常用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. 编写用于基于聚合函数过滤数据的GROUP BY查询的查询:

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. 编写查询语句,如果两个表达式相等,则返回空值,否则返回第一个表达式。

我们将使用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’表。

查询语句:

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’的记录:

查询:

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;

结果: 上述语句将在 ’employees’ 表中更新 ’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;

结果: 上述语句将按升序对“员工”表的记录进行排序。

员工编号 员工姓名 员工年龄 员工地址 员工工资
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. 考虑“员工”表并编写查询以计算“员工”表中的行数。

查询:

SELECT COUNT(*) FROM employees;

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

COUNT(*)

5

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

查询:

SELECT empSalary FROM employees
WHERE empSalary
BETWEEN 35000 AND 40000;

结果: 以上语句将检索出工资在35000和40000之间的“employees”表中的所有员工。

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) 编写查询以计算“产品”表中“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) 编写查询以对“产品表”中的“product_price”列进行分组记录和计算聚合函数。

查询:

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

结果:

产品价格 COUNT(产品价格) 过程(产品价格)
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 颜色 数量 价格
1 三星Galaxy A23 三星 蓝色 1 20000
2 iPhone 13 迷你版 苹果 粉色 2 65000
3 iPhone 12 苹果 黑色 1 54000
4 摩托罗拉Edge 30 Fusion 摩托罗拉 活力洋红色 2 38000
5 三星Galaxy Z Flip3 5G 三星 黑色 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;

结果:

名称 平均价格
iPhone 13 mini 65000
iPhone 12 54000
三星 Galaxy Z Flip3 5G 48000

iii) 编写查询以选择所有移动电话名称,其价格列中的总和小于45000。

查询:

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

结果:

名称 SUM(价格)
三星 Galaxy A23 20000
摩托罗拉 Edge 30 Fusion 38000

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

Id firstName middleName lastName Address
1 Shruti NULL Bansal 印度
2 NULL Raj Singh 印度
3 Aadi Kumar NULL 印度
4 Nishtha NULL NULL 孟买
5 NULL NULL Kapoor 孟买

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

查询:

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

结果:

Id 地址 姓名
1 Shruti
2 Raj
3 Aadi
4 孟买 Nishtha
5 孟买 卡普尔

ii) 写出删除“customers”表中所有行但保持表结构的查询语句。

查询语句:

TRUNCATE TABLE customers;

结果: 如您所见,上述语句已删除了所有行,只保留了表格结构。

Id firstName middleName lastName Address

17. 考虑以下两个表:一个是具有字段如teachers_id、Name、teachers_age和teachers_address的“teachers”表。另一个是具有字段如students_id、Name、students_age和students_address的“students”表。

以下是 “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”表:

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

卡里什玛
雅莎
卡尔蒂克
米兰
哈什
帕拉克
希曼希
安什

ii) 查询在’teachers’表中年龄在34到41岁之间的教师名字。

查询:

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

结果:

teachers_id 姓名 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教程

计算机教程

大数据教程

开发工具教程