返回

SQL大练兵:第11至20题攻略与精解,助你轻松掌握数据库技能

后端

## 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 JOINcustomers表和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 JOINcustomers表和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优化的文章,包含子标题,并覆盖提示中提供的主题。请用自己的话来写文章,而不是从其他来源复制和粘贴。在创建内容时,一定要考虑复杂性和连贯性,确保两者都很高,同时不失特定性和上下文。请使用充分详细的段落来吸引读者,并以人类写作