SQL大练兵:第11至20题攻略与精解,助你轻松掌握数据库技能
2023-07-07 21:56:18
## SQL练习题大揭秘:第11至20题攻略与精解
## 前言
SQL(Structured Query Language,结构化查询语言)作为一种强大的数据库编程语言,广泛应用于数据查询、管理和分析。为了帮助你提高SQL技能,我们精选了50道SQL练习题,并分为了5个部分,每部分包含10道题。在这篇文章中,我们将重点解析SQL练习题的第11至20题,并提供多种解法和详细的分析。无论你是SQL新手还是经验丰富的数据库专家,这些练习题和解析都能帮助你提高你的SQL技能。
## 练习题解答
### 11. 查询特定城市和国家中的客户姓名
题目:
SELECT name
FROM customers
WHERE city = 'London'
AND country = 'UK';
解析:
-- 查询名为“London”的城市中,“UK”国家的客户姓名
SELECT name
FROM customers
WHERE city = 'London'
AND country = 'UK';
结果:
| name |
|---|---|
| John Doe |
| Jane Smith |
分析:
这条查询语句使用WHERE
子句来过滤customers
表,只返回满足city
列等于“London”且country
列等于“UK”的客户的姓名。
### 12. 查询单价大于10的产品名称和单价
题目:
SELECT product_name, unit_price
FROM products
WHERE unit_price > 10;
解析:
-- 查询单价大于10的产品名称和单价
SELECT product_name, unit_price
FROM products
WHERE unit_price > 10;
结果:
| product_name | unit_price |
|---|---|
| iPhone 13 | 1200 |
| MacBook Pro | 1500 |
| Apple Watch | 400 |
分析:
这条查询语句使用WHERE
子句来过滤products
表,只返回单价大于10的产品的名称和单价。
### 13. 查询订购次数大于1的客户ID和订购次数
题目:
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING order_count > 1;
解析:
-- 查询订购次数大于1的客户ID和订购次数
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING order_count > 1;
结果:
| customer_id | order_count |
|---|---|
| 1 | 3 |
| 2 | 2 |
| 3 | 4 |
分析:
这条查询语句使用GROUP BY
子句将orders
表中的数据按customer_id
列分组,并使用COUNT(*)
函数计算每组的订购次数。然后,使用HAVING
子句过滤结果,只返回订购次数大于1的客户的ID和订购次数。
### 14. 查询每种产品的平均单价
题目:
SELECT product_name, AVG(unit_price) AS average_price
FROM products
GROUP BY product_name;
解析:
-- 查询每种产品的平均单价
SELECT product_name, AVG(unit_price) AS average_price
FROM products
GROUP BY product_name;
结果:
| product_name | average_price |
|---|---|
| iPhone 13 | 1200 |
| MacBook Pro | 1500 |
| Apple Watch | 400 |
分析:
这条查询语句使用GROUP BY
子句将products
表中的数据按product_name
列分组,并使用AVG()
函数计算每组的平均单价。
### 15. 查询每位客户的最近一次订购日期
题目:
SELECT customer_name, MAX(order_date) AS last_order_date
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id
GROUP BY customer_name;
解析:
-- 查询每位客户的最近一次订购日期
SELECT customer_name, MAX(order_date) AS last_order_date
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id
GROUP BY customer_name;
结果:
| customer_name | last_order_date |
|---|---|
| John Doe | 2023-03-08 |
| Jane Smith | 2023-02-28 |
分析:
这条查询语句使用INNER JOIN
将customers
表和orders
表连接起来,并使用GROUP BY
子句将数据按customer_name
列分组。然后,使用MAX()
函数计算每组的最近一次订购日期。
### 16. 查询每种产品的总订购数量
题目:
SELECT product_name, SUM(quantity) AS total_quantity
FROM order_items
GROUP BY product_name
ORDER BY total_quantity DESC;
解析:
-- 查询每种产品的总订购数量,并按数量降序排列
SELECT product_name, SUM(quantity) AS total_quantity
FROM order_items
GROUP BY product_name
ORDER BY total_quantity DESC;
结果:
| product_name | total_quantity |
|---|---|
| iPhone 13 | 100 |
| MacBook Pro | 50 |
| Apple Watch | 25 |
分析:
这条查询语句使用GROUP BY
子句将order_items
表中的数据按product_name
列分组,并使用SUM()
函数计算每组的总订购数量。然后,使用ORDER BY
子句将结果按总订购数量降序排列。
### 17. 查询每位客户的订购次数
题目:
SELECT customer_name, COUNT(*) AS order_count
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
GROUP BY customer_name;
解析:
-- 查询每位客户的订购次数,包括没有订购的客户
SELECT customer_name, COUNT(*) AS order_count
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
GROUP BY customer_name;
结果:
| customer_name | order_count |
|---|---|
| John Doe | 3 |
| Jane Smith | 2 |
| Mary Johnson | 0 |
分析:
这条查询语句使用LEFT JOIN
将customers
表和orders
表连接起来,并使用GROUP BY
子句将数据按customer_name
列分组。然后,使用COUNT(*)
函数计算每组的订购次数。由于使用了LEFT JOIN
,因此即使没有订购的客户也会出现在结果中,订购次数为0。
### 18. 查询每种产品的最低单价
题目:
SELECT product_name, MIN(unit_price) AS min_price
FROM products
GROUP BY product_name;
解析:
-- 查询每种产品的最低单价
SELECT product_name, MIN(unit_price) AS min_price
FROM products
GROUP BY product_name;
结果:
| product_name | min_price |
|---|---|
| iPhone 13 | 1200 |
| MacBook Pro | 1500 |
| Apple Watch | 400 |
分析:
这条查询语句使用GROUP BY
子句将products
表中的数据按product_name
列分组,并使用MIN()
函数计算每组的最低单价。
### 19. 查询每位客户的总收入
题目:
SELECT customer_name, SUM(total_price) AS total_revenue
FROM customers
INNER JOIN orders ON customers.customer_id = orders.】写一篇相关的博客,写作要求:100%独特、SEO优化的文章,包含子标题,并覆盖提示中提供的主题。请用自己的话来写文章,而不是从其他来源复制和粘贴。在创建内容时,一定要考虑复杂性和连贯性,确保两者都很高,同时不失特定性和上下文。请使用充分详细的段落来吸引读者,并以人类写作