在数据库面试中,SQL 语句是一个不可或缺的考点。以下是一些常见面试题以及它们的解答,旨在帮助您应对数据库面试中的 SQL 挑战。
SELECT 语句
**问题 1:**编写一个 SQL 语句,从 "customers" 表中选择所有客户的姓名、城市和电子邮件。
**解答:**
sql
SELECT name, city, email
FROM customers;
WHERE 子句
**问题 2:**编写一个 SQL 语句,从 "orders" 表中选择所有订单号大于 1000 的订单。
**解答:**
sql
SELECT order_id
FROM orders
WHERE order_id > 1000;
GROUP BY 子句
**问题 3:**编写一个 SQL 语句,按城市对 "customers" 表中的客户进行分组,并计算每个城市中的客户数量。
**解答:**
sql
SELECT city, COUNT(*) AS customer_count
FROM customers
GROUP BY city;
JOIN
**问题 4:**编写一个 SQL 语句,从 "orders" 表和 "customers" 表中联接数据,返回每个客户的姓名和订单数量。
**解答:**
sql
SELECT c.name, COUNT(o.order_id) AS order_count
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.name;
子查询
**问题 5:**编写一个 SQL 语句,找到 "customers" 表中订单数量最多的客户。
**解答:**
sql
SELECT c.name
FROM customers c
WHERE c.customer_id IN (
SELECT customer_id
FROM orders
GROUP BY customer_id
ORDER BY COUNT(*) DESC
LIMIT 1
);
优化
**问题 6:**如何优化以下 SQL 语句以提高查询性能?
sql
SELECT *
FROM orders o
WHERE o.order_date > '2023-01-01'
AND o.order_status = 'shipped';
**解答:**
* 使用索引:在 "order_date" 和 "order_status" 列上创建索引。
* 使用复合索引:创建同时包含 "order_date" 和 "order_status" 列的复合索引。
* 使用覆盖索引:创建包含查询中所有列的索引。