SQL 查询练习

SQL 查询练习

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

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

以下是SQL查询:

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

CREATE TABLE tableName (
 columnName datatype,
 columnName datatype,
  ...
);

2. 编写查询以插入新记录到表中:

INSERT INTO tableName (Column1, Column2, ?)
VALUES (Value1, Value2, ?);

3. 编写一个查询来删除表中的记录:

DELETE FROM tableName WHERE condition;

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

UPDATE tableName
SET columnName = newValue
WHERE condition;

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

DROP TABLE tableName;

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

SELECT * FROM tableName;

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

SELECT Column1, Column2 FROM tableName;

8. 编写查询以从列中选择唯一值:

SELECT DISTINCT columnName FROM tableName;

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

SELECT * FROM tableName WHERE condition;

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

SELECT * FROM tableName
ORDER BY columnName DESC;

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

SELECT * FROM tableName
ORDER BY columnName ASC;

12. 编写查询语句以基于一个共同的列连接两个表:

SELECT * FROM Table1 JOIN Table2
ON Table1.columnName = Table2.columnName;

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

我们将使用COUNT()函数来计算行的数量。声明如下:

SELECT COUNT(*) FROM tableName;

14. 编写查询以对记录进行分组并计算聚合函数:

SELECT columnName, COUNT(*), AVG(columnName)
FROM tableName GROUP BY columnName;

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

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

SELECT columnName FROM tableName LIMIT 10;

16. 编写查询以查找列中值的总和:

SELECT SUM(columnName) FROM tableName;

17.编写查询以查找列的平均值:

SELECT AVG(columnName) FROM tableName;

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

SELECT MIN(columnName) FROM tableName;

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

SELECT MAX(columnName) FROM tableName;

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

SELECT columnName FROM tableName
WHERE columnName
BETWEEN Value1 AND Value2;

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

SELECT columnName FROM tableName
WHERE columnName
IN (Value1, Value2, Value3);

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

SELECT columnName FROM tableName WHERE columnName LIKE 'abc%';

23. 编写查询以依据分组查询中的聚合函数过滤数据:

SELECT Column1, COUNT(Column2)
FROM tableName
GROUP BY Column1 HAVING COUNT(Column2) > 5;

24. 编写查询以检索在指定范围内具有日期的行:

SELECT columnName FROM tableName
WHERE columnName
BETWEEN '2023-01-01' AND '2023-07-30';

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

SELECT * FROM Table1
UNION SELECT columnName FROM Table2;

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

SELECT columnNamse, CASE WHEN Condition1 THEN 'Value1'
WHEN Condition2 THEN 'Value2'
ELSE 'Value3'
END AS newColumn FROM tableName;

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

TRUNCATE TABLE tableName;

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

CREATE INDEX indexName ON tableName (Column1, Column2);

29. 编写查询语句以修改现有表的结构:

ALTER TABLE tableName ADD columnName datatype;

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

SELECT COALESCE(Column1, Column2, … , ColumnN) AS Result
FROM tableName;

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

我们将使用NULLIF()函数来实现,语句如下所示:

SELECT NULLIF(Column1, 0) AS result FROM tableName;

实践SQL查询的基于现实生活的问题:

让我们来看一些基于现实生活的问题,以练习上述讨论的SQL查询:

1. 编写查询以创建一个名为’employees’的表,该表具有字段empId、empName、empAge、empAddress和empSalary。

查询:

CREATE TABLE employees (
          empId INT,
          empName VARCHAR(40),
          empAge INT,
          empAddress VARCHAR(40),
          empSalary INT
        );

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

empId empName empAge empAddress empSalary

2. 写出插入值到上述 ’employees’ 表的查询语句。

Query:

INSERT INTO employees
VALUES(1, 'Daksh', 25, 'Jaipur', 32000),
(2, 'Ananya', 30, 'Bhopal', 37000),
(3, 'Aarush', 32, 'Jaipur', 35000),
(4, 'Reyansh', 30, 'Bhopal', 40000)
(5, 'Jhalak', 28, 'Jaipur', 39000);

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

empId empName empAge empAddress empSalary
1 Daksh 25 Jaipur 32000
2 Ananya 30 Bhopal 37000
3 Aarush 32 Jaipur 35000
4 Reyansh 30 Bhopal 40000
5 Jhalak 28 Jaipur 39000

3. 考虑 ’employees’ 表,在 ’employees’ 表中写一个查询语句来删除 ’empId=1′ 的记录:

Query:

DELETE FROM employees WHERE empId=1;

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

empId empName empAge empAddress empSalary
2 Ananya 30 Bhopal 37000
3 Aarush 32 Jaipur 35000
4 Reyansh 30 Bhopal 40000
5 Jhalak 28 Jaipur 39000

4. 考虑“employees”表格并编写查询以更新“employees”表格中“empId = 5”的年龄:

查询:

UPDATE employees SET empAge = 29 WHERE empId=5;

结果: 将在“员工”表中更新“empId = 5”的年龄。

empId empName empAge empAddress empSalary
1 Daksh 25 Jaipur 32000
2 Ananya 30 Bhopal 37000
3 Aarush 32 Jaipur 35000
4 Reyansh 30 Bhopal 40000
5 Jhalak 28 Jaipur 39000

5. 考虑’employees’表并编写查询以选择’employees’表中的所有记录:

查询:

SELECT * FROM employees;

结果: 如你所见,上述语句将从’employees’表中选择所有记录。

empId empName empAge empAddress empSalary
1 Daksh 25 Jaipur 32000
2 Ananya 30 Bhopal 37000
3 Aarush 32 Jaipur 35000
4 Reyansh 30 Bhopal 40000
5 Jhalak 28 Jaipur 39000

6. 考虑 ’employees’ 表,并编写查询以从 ’employees’ 表中选择 ’empName’ 和 ’empSalary’ 列:

查询:

SELECT empName, empSalary FROM employees;

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

empName empSalary
Daksh 32000
Ananya 37000
Aarush 35000
Reyansh 40000
Jhalak 39000

7. 考虑一下’employees’表,并编写查询以从’employees’表的’empAddress’列中选择不同的值:

查询:

SELECT DISTINCT empAddress FROM employees;

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

empAddress   
---  
Jaipur   
Bhopal   

8. 考虑 ’employees’ 表格,并使用 WHERE 子句编写查询来过滤和选择 empAddress=’Jaipur’ 的记录:

查询语句:

SELECT * FROM employees
WHERE empAddress='Jaipur';

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

empId empName empAge empAddress empSalary
1 Daksh 25 Jaipur 32000
3 Aarush 32 Jaipur 35000
5 Jhalak 28 Jaipur 39000

9. 考虑到’employees’表,请编写查询以按降序对’employees’表的记录进行排序。

查询:

SELECT * FROM employees
ORDER BY empName DESC;

结果: 以上语句将按降序排序’employees’表的记录。

empId empName empAge empAddress empSalary
4 Reyansh 30 Bhopal 40000
5 Jhalak 28 Jaipur 39000
1 Daksh 25 Jaipur 32000
2 Ananya 30 Bhopal 37000
3 Aarush 32 Jaipur 35000

10. 考虑以下 ’employees’ 表并编写查询以按升序排序 ’employees’ 表的记录。

查询:

SELECT * FROM employees
ORDER BY empName ASC;

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

empId empName empAge empAddress empSalary
3 Aarush 32 Jaipur 35000
2 Ananya 30 Bhopal 37000
1 Daksh 25 Jaipur 32000
5 Jhalak 28 Jaipur 39000
4 Reyansh 30 Bhopal 40000

11. 考虑’employees’表格并编写查询来计算’employees’表格中的行数。

查询:

SELECT COUNT(*) FROM employees;

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

COUNT(*)   
---  
5   

12. 考虑’employees’表,并编写查询以检索薪水在35000至40000之间的所有员工。

查询:

SELECT empSalary FROM employees
WHERE empSalary
BETWEEN 35000 AND 40000;

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

empId empName empAge empAddress empSalary
2 Ananya 30 Bhopal 37000
3 Aarush 32 Jaipur 35000
4 Reyansh 30 Bhopal 40000
5 Jhalak 28 Jaipur 39000

13. 考虑’employees’ 表,并编写查询语句以添加名为 ‘Department’ 的另一列。

查询语句:

ALTER TABLE employees ADD Department VARCHAR(45);

结果: 由于在新列’Department’中没有插入任何值,所以默认情况下它包含NULL。

empId empName empAge empAddress empSalary Department
1 Daksh 25 Jaipur 32000 NULL
2 Ananya 30 Bhopal 37000 NULL
3 Aarush 32 Jaipur 35000 NULL
4 Reyansh 30 Bhopal 40000 NULL
5 Jhalak 28 Jaipur 39000 NULL

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

product_id product_name product_quantity product_price
1 Speaker 2 10000
2 Printer 1 21000
3 Key Board 5 2500
4 Refill Cartridge 6 1500
5 CD Drive 4 2000

i) 编写查询以计算“products”表中“product_price”列的值的总和。

查询语句:

SELECT SUM(product_price)
FROM products;

结果:

SUM(product_price)   
---  
37000   

ii) 写一个查询来计算”products”表中”product_price”列的平均值。

查询语句:

SELECT AVG(product_price)
FROM products;

结果:

AVG(product_price)   
---  
7400   

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

查询:

SELECT MIN(product_price)
FROM products;

结果:

MIN(product_price)   
---  
1500   

iv) 编写查询,以检索“products”表中“product_price”列的最大值。

查询语句:

SELECT MAX(product_price)
FROM products;

结果:

MAX(product_price)   
---  
21000   

V)编写查询语句以对“products”表中的“product_price”列进行分组并计算聚合函数。

查询语句:

SELECT product_price, COUNT(product_price), AVG(product_price)
FROM products GROUP BY product_price;

结果:

product_price COUNT(product_price) Age(product_price)
10000 1 10000
21000 1 21000
2500 1 2500
1500 1 1500
2000 1 2000

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

Id Name Company Colour Quantity Price
1 Samsung Galaxy A23 Samsung Blue 1 20000
2 iPhone 13 mini Apple Pink 2 65000
3 iPhone 12 Apple Black 1 54000
4 Motorola Edge 30 Fusion Motorola Viva Magenta 2 38000
5 Samsung Galaxy Z Flip3 5G Samsung Black 4 48000

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

查询语句:

SELECT * FROM mobilephones
WHERE Colour LIKE 'bl%';

结果:

product_price COUNT(product_price) Age(product_price)
10000 1 10000
21000 1 21000
2500 1 2500
1500 1 1500
2000 1 2000

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

Id Name Company Colour Quantity Price
1 Samsung Galaxy A23 Samsung Blue 1 20000
3 iPhone 12 Apple Black 1 54000
5 Samsung Galaxy Z Flip3 5G Samsung Black 4 48000

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

查询:

SELECT Name, AVG(Price)
FROM mobilephones
GROUP BY Name HAVING AVG(Price) > 45000;

结果:

Name AVG(Price)
iPhone 13 mini 65000
iPhone 12 54000
Samsung Galaxy Z Flip3 5G 48000

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

查询:

SELECT Name, SUM(Price)
FROM mobilephones
GROUP BY Name HAVING SUM(Price) < 45000;

结果:

Name SUM(Price)
Samsung Galaxy A23 20000
Motorola Edge 30 Fusion 38000

16. 考虑到具有Id,firstName,middleName,lastName和Address的“customers”表。

Id firstName middleName lastName Address
1 Shruti NULL Bansal Goa
2 NULL Raj Singh Goa
3 Aadi Kumar NULL Goa
4 Nishtha NULL NULL Mumbai
5 NULL NULL Kapoor Mumbai

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

查询:

SELECT Id, Address COALESCE(firstName, middleName, lastName) AS NAME
FROM customers;

结果:

Id Address NAME
1 Goa Shruti
2 Goa Raj
3 Goa Aadi
4 Mumbai Nishtha
5 Mumbai Kapoor

ii)编写查询以从“customers”表中删除所有行,但保留表结构。

查询:

TRUNCATE TABLE customers;

结果: 如你所见,上面的声明已删除所有行,只剩下表格结构。

Id firstName middleName lastName Address

17. 考虑两个表格:一个是“teachers”表格,它有fields包括teachers_id, Name, teachers_age和teachers_address。另一个是“students”表格,它有fields包括students_id, Name, students_age和students_address。

下面是 ‘teachers’表格:

teachers_id Name teachers_age teachers_address
100 Karishma 35 Noida
101 Yasha 29 Meerut
102 Kartik 40 Noida
103 Milan 36 Lucknow

以下是 ‘学生’表:

students_id Name students_age students_address
200 Harsh 19 Noida
201 Palak 18 Lucknow
202 Himanshi 20 Roorkee
203 Ansh 19 Roorkee

i) 使用UNION运算符编写查询,将“teachers”表中的“Name”列与“students”表中的“Name”列合并。

查询语句:

SELECT Name FROM teachers
UNION SELECT Name FROM students;

结果:

Name   
---  
Karishma   
Yasha   
Kartik   
Milan   
Harsh   
Palak   
Himanshi   
Ansh   

ii) 编写查询以查找年龄在34岁和41岁之间的教师的姓名在“teachers”表中。

查询:

SELECT * FROM teachers
WHERE teachers_age 
BETWEEN '34' AND '41';

结果:

teachers_id Name teachers_age teachers_address
100 Karishma 35 Noida
102 Kartik 40 Noida
103 Milan 36 Lucknow

结论:

在这篇文章中,你学习了几个用于练习的SQL查询。你阅读了各种基于真实生活的问题,并使用SQL查询解决了它们。如果你想要在管理和检索数据库方面变得熟练,练习SQL查询是很重要的。

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程