SQL 练习查询

2024年8月29日 | 阅读 10 分钟

如果您想成为一名数据管理员、数据库开发人员或数据分析师,那么掌握 SQL 查询至关重要。如果您想处理结构化数据,那么您必须知道如何从关系数据库中检索、处理和分析数据。

在本文中,我们将学习几个 SQL 查询,以帮助您提高查询能力。

以下是 SQL 查询:

1. 编写创建新表的查询。

2. 编写向表中插入新记录的查询

3. 编写从表中删除记录的查询

4. 编写更新表中记录的查询

5. 编写从数据库中删除表的查询

6. 编写从表中选择所有记录以检索数据的查询

7. 编写从表中选择特定列的查询

8. 编写从列中选择不重复值的查询

9. 编写使用 WHERE 子句过滤记录的查询

10. 编写以降序排序记录的查询

11. 编写以升序排序记录的查询

12. 编写基于公共列连接两个表的查询

13. 编写计算表中行数的查询。

我们将使用 COUNT() 函数来计算行数。语句如下:

14. 编写分组记录并计算聚合函数的查询

15. 编写限制结果集中返回的行数的查询。

我们将使用 LIMIT 子句来限制行数。语句如下:

16. 编写计算列值之和的查询

17. 编写计算列平均值的查询

18. 编写从列中获取最小值的查询

19. 编写从列中检索最大值的查询

20. 编写检索指定范围内值的行的查询

21. 编写检索与指定值列表匹配的行的查询

22. 编写使用通配符在列中搜索模式的查询

23. 编写基于 GROUP BY 查询中的聚合函数过滤数据的查询

24. 编写检索指定日期范围内行的查询

25. 编写组合两个或多个 SELECT 语句结果集的查询

26. 编写在查询中执行条件逻辑的查询

27. 编写删除表中所有行,但保留表结构的查询

28. 编写在表的一个或多个列上创建索引的查询

29. 编写修改现有表结构的查询

30. 编写返回表达式列表中第一个非 NULL 值的查询

31. 编写在两个表达式相等时返回 NULL,否则返回第一个表达式的查询。

我们将使用 NULLIF() 函数来实现此目的,语句如下:

基于实际问题的 SQL 查询练习

让我们来看一些基于实际问题的 SQL 查询练习,以练习上面讨论的 SQL 查询。

1. 编写一个名为 'employees' 的表,其中包含 empId、empName、empAge、empAddress 和 empSalary 字段。

查询

结果: 'employees' 表将如下所示。

empIdempNameempAgeempAddressempSalary

2. 编写向上面的 'employees' 表中插入值的查询。

查询

结果: 向 'employees' 表中插入值后,它将如下所示。

empIdempNameempAgeempAddressempSalary
1Daksh25斋浦尔32000
2Ananya30博帕尔37000
3Aarush32斋浦尔35000
4Reyansh30博帕尔40000
5Jhalak28斋浦尔39000

3. 考虑 'employees' 表,编写从 'employees' 表中删除 'empId=1' 记录的查询。

查询

结果: 上述语句将从 'employees' 表中删除 'empId=1' 的记录。

empIdempNameempAgeempAddressempSalary
2Ananya30博帕尔37000
3Aarush32斋浦尔35000
4Reyansh30博帕尔40000
5Jhalak28斋浦尔39000

4. 考虑 'employees' 表,编写更新 'employees' 表中 'empId=5' 的年龄的查询。

查询

结果: 上述语句将更新 'employees' 表中 'empId=5' 的年龄。

empIdempNameempAgeempAddressempSalary
1Daksh25斋浦尔32000
2Ananya30博帕尔37000
3Aarush32斋浦尔35000
4Reyansh30博帕尔40000
5Jhalak28斋浦尔39000

5. 考虑 'employees' 表,编写从 'employees' 表中选择所有记录的查询。

查询

结果: 正如您在下面看到的,上述语句将选择 'employees' 表中的所有记录。

empIdempNameempAgeempAddressempSalary
1Daksh25斋浦尔32000
2Ananya30博帕尔37000
3Aarush32斋浦尔35000
4Reyansh30博帕尔40000
5Jhalak28斋浦尔39000

6. 考虑 'employees' 表,编写从 'employees' 表中选择 'empName' 和 'empSalary' 列的查询。

查询

结果: 上述语句将从 'employees' 表中选择 'empName' 和 'empSalary' 列。

empNameempSalary
Daksh32000
Ananya37000
Aarush35000
Reyansh40000
Jhalak39000

7. 考虑 'employees' 表,编写从 'employees' 表的 'empAddress' 列中选择不重复值的查询。

查询

结果: 上述语句将从 'employees' 表的 'empAddress' 列中选择不重复的值。

empAddress
斋浦尔
博帕尔

8. 考虑 'employees' 表,编写使用 WHERE 子句过滤并选择 empAddress='Jaipur' 的记录的查询。

查询

结果: 上述语句将过滤 'employees' 表中的记录。

empIdempNameempAgeempAddressempSalary
1Daksh25斋浦尔32000
3Aarush32斋浦尔35000
5Jhalak28斋浦尔39000

9. 考虑 'employees' 表,编写将 'employees' 表的记录按降序排序的查询。

查询

结果: 上述语句将按降序对 'employees' 表中的记录进行排序。

empIdempNameempAgeempAddressempSalary
4Reyansh30博帕尔40000
5Jhalak28斋浦尔39000
1Daksh25斋浦尔32000
2Ananya30博帕尔37000
3Aarush32斋浦尔35000

10. 考虑 'employees' 表,编写将 'employees' 表的记录按升序排序的查询。

查询

结果: 上述语句将按升序对 'employees' 表中的记录进行排序。

empIdempNameempAgeempAddressempSalary
3Aarush32斋浦尔35000
2Ananya30博帕尔37000
1Daksh25斋浦尔32000
5Jhalak28斋浦尔39000
4Reyansh30博帕尔40000

11. 考虑 'employees' 表,编写计算 'employees' 表中行数的查询。

查询

结果: 上述语句将计算 'employees' 表中的行数。

COUNT(*)
5

12. 考虑 'employees' 表,编写在 'employees' 表中检索薪水在 35000 到 40000 之间的所有员工的查询。

查询

结果: 上述语句将在 'employees' 表中检索薪水在 35000 到 40000 之间的所有员工。

empIdempNameempAgeempAddressempSalary
2Ananya30博帕尔37000
3Aarush32斋浦尔35000
4Reyansh30博帕尔40000
5Jhalak28斋浦尔39000

13. 考虑 'employees' 表,编写添加一个名为 'Department' 的新列的查询。

查询

结果: 由于没有在新列 'Department' 中插入任何值,因此它默认包含 NULL。

empIdempNameempAgeempAddressempSalary部门
1Daksh25斋浦尔32000NULL
2Ananya30博帕尔37000NULL
3Aarush32斋浦尔35000NULL
4Reyansh30博帕尔40000NULL
5Jhalak28斋浦尔39000NULL

14. 考虑一个名为 'products' 的表,其中包含 product_id、product_name、product_quantity 和 product_price 等字段。

product_idproduct_nameproduct_quantityproduct_price
1发言者210000
2打印机121000
3键盘52500
4墨盒61500
5CD 驱动器42000

i) 编写在 'products' 表的 'product_price' 列中计算值的总和的查询。

查询

结果

SUM(product_price)
37000

ii) 编写在 'products' 表的 'product_price' 列中计算平均值的查询。

查询

结果

AVG(product_price)
7400

iii) 编写从 'products' 表的 'product_price' 列中检索最小值的查询。

查询

结果

MIN(product_price)
1500

iv) 编写从 'products' 表的 'product_price' 列中检索最大值的查询。

查询

结果

MAX(product_price)
21000

V) 编写在 'products' 表的 'product_price' 列中分组记录并计算聚合函数的查询。

查询

结果

product_priceCOUNT(product_price)Age(product_price)
10000110000
21000121000
250012500
150011500
200012000

15. 考虑一个名为 'mobilephones' 的表,其中包含 Id、Name、Company、Quantity 和 Price 等字段。

ID名称公司颜色数量价格
1三星 Galaxy A23三星蓝色120000
2iPhone 13 miniApple粉色265000
3iPhone 12Apple黑色154000
4Motorola Edge 30 Fusion摩托罗拉Viva Magenta238000
5三星 Galaxy Z Flip3 5G三星黑色448000

i) 编写在 'mobilephones' 表的 'Colour' 列中选择以“bl”开头的所有客户的查询。

查询

结果

product_priceCOUNT(product_price)Age(product_price)
10000110000
21000121000
250012500
150011500
200012000

15. 考虑一个名为 'mobilephones' 的表,其中包含 Id、Name、Company、Quantity 和 Price 等字段。

ID名称公司颜色数量价格
1三星 Galaxy A23三星蓝色120000
3iPhone 12Apple黑色154000
5三星 Galaxy Z Flip3 5G三星黑色448000

ii) 编写在 'mobilephones' 表的 'Price' 列中选择平均值大于 45000 的所有手机名称的查询。

查询

结果

名称AVG(Price)
iPhone 13 mini65000
iPhone 1254000
三星 Galaxy Z Flip3 5G48000

iii) 编写在 'mobilephones' 表的 'Price' 列中选择总和小于 45000 的所有手机名称的查询。

查询

结果

名称SUM(Price)
三星 Galaxy A2320000
Motorola Edge 30 Fusion38000

16. 考虑包含 Id、firstName、middleName、lastName 和 Address 的 'customers' 表。

IDfirstNamemiddleNamelastName地址
1ShrutiNULLBansal果阿
2NULLRajSingh果阿
3AadiKumarNULL果阿
4NishthaNULLNULL孟买
5NULLNULLKapoor孟买

i) 编写从 firstName、middleName 和 lastName 列返回第一个非 NULL 值的查询。

查询

结果

ID地址姓名
1果阿Shruti
2果阿Raj
3果阿Aadi
4孟买Nishtha
5孟买Kapoor

ii) 编写删除 'customers' 表中的所有行,但保留表结构的查询。

查询

结果: 正如您所看到的,上述语句删除了所有行,但只留下了表结构。

IDfirstNamemiddleNamelastName地址

17. 考虑两个表:一个是 'teachers' 表,它有 teachers_id、Name、teachers_age 和 teachers_address 字段。另一个是 'students' 表,它有 students_id、Name、students_age 和 students_address 字段。

这是'teachers' 表:

teachers_id名称teachers_ageteachers_address
100Karishma35Noida
101Yasha29Meerut
102Kartik40Noida
103Milan36勒克瑙

这是'students' 表:

students_id名称students_agestudents_address
200Harsh19Noida
201Palak18勒克瑙
202Himanshi20Roorkee
203安什19Roorkee

i) 编写使用 UNION 操作符组合 'teachers' 表中的 'Name' 列和 'students' 表中的 'Name' 列的查询。

查询

结果

名称
Karishma
Yasha
Kartik
Milan
Harsh
Palak
Himanshi
安什

ii) 编写在 'teachers' 表中查找年龄在 34 到 41 之间的老师姓名的查询。

查询

结果

teachers_id名称teachers_ageteachers_address
100Karishma35Noida
102Kartik40Noida
103Milan36勒克瑙

结论

在本文中,您学习了几个用于练习的 SQL 查询。您阅读了各种基于实际问题的题目,并使用 SQL 查询来解决它们。如果您想熟练掌握数据库的管理和数据检索,练习 SQL 查询非常重要。

通过定期练习,您可以正确理解 SQL 语法,并改进查询优化技术。您可以轻松识别和纠正错误。如果您掌握了 SQL 查询,您将能够从数据库中提取有价值的见解,并做出数据驱动的决策,这将有助于您职业发展。