数据查询语言(DQL)是SQL语言中的一部分,主要用于查询数据库中的数据。DQL允许用户根据特定的条件来检索表中的数据,并且可以包含一些基本的操作和条件。
语法结构:
SELECT 列名称1 , 列名称2 FROM 表名称;
其中,SELECT指定要检索的列,FROM指定要查询的表,WHERE指定筛选条件。
以下是一些常用的DQL查询语句的示例:
- 查询所有数据
如果要查询表中所有的数据,可以使用以下语句:
SELECT * FROM table_name;
这将返回表中的所有行和所有列。
- 查询指定列的数据
如果要查询表中某个或某些列的数据,可以使用以下语句:
SELECT column1, column2 FROM table_name;
这将返回表中指定列的所有行。
条件筛选查询
可以使用WHERE子句对查询结果进行条件筛选。WHERE子句允许你指定一个条件,用于从数据库表中过滤出符合条件的记录。同时,还可以与其他DQL语句(如JOIN、GROUP BY等)结合使用,以满足特定的数据查询需求。
条件运算符
-
等于(=)
使用"="运算符来比较两个值是否相等。例如,如果要查询名为"John"的用户信息,可以使用以下查询:
SELECT * FROM users WHERE name = 'John';
-
不等于(<>或!=)
使用"<>"或"!="运算符来比较两个值是否不相等。例如,如果要查询不是名为"John"的用户信息,可以使用以下查询:
SELECT * FROM users WHERE name <> 'John';
-
大于(>)
使用">"运算符来比较一个值是否大于另一个值。例如,如果要查询年龄大于25岁的用户信息,可以使用以下查询:
SELECT * FROM users WHERE age > 25;
-
小于(<)
使用"<"运算符来比较一个值是否小于另一个值。例如,如果要查询年龄小于30岁的用户信息,可以使用以下查询:
SELECT * FROM users WHERE age < 30;
-
大于等于(>=)
使用">="运算符来比较一个值是否大于或等于另一个值。例如,如果要查询年龄大于或等于25岁的用户信息,可以使用以下查询:
SELECT * FROM users WHERE age >= 25;
-
小于等于(<=)
使用"<="运算符来比较一个值是否小于或等于另一个值。例如,如果要查询年龄小于或等于30岁的用户信息,可以使用以下查询:
SELECT * FROM users WHERE age <= 30;
-
模糊匹配LIKE
使用LIKE运算符进行模糊匹配。它允许在模式中使用通配符 "%"(匹配任意字符序列)和 "_"(匹配任意单个字符)。例如,如果要查询名字中包含"J"的用户信息,可以使用以下查询:
SELECT * FROM users WHERE name LIKE '%J%';
-- 查询姓名由5个字母构成的学生记录
SELECT * FROM student WHERE stu_name LIKE '_____';
-- 查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
SELECT * FROM student WHERE stu_name LIKE '____i';
--查询姓名以“z”开头的学生记录
SELECT * FROM student WHERE stu_name LIKE 'z%';
-- 查询姓名中第2个字母为“i”的学生记录
SELECT * FROM student WHERE stu_name LIKE'_i%';
-- 查询姓名包含“三”的学生记录
SELECT * FROM student WHERE stu_name LIKE '%三%';
-
IN
使用IN运算符来检查一个值是否在给定的列表中。例如,如果要查询ID为1、3或5的用户信息,可以使用以下查询:
SELECT * FROM users WHERE id IN (1, 3, 5);
-
BETWEEN
使用BETWEEN运算符来指定一个值是否在指定的范围之间。它包括范围的最小值和最大值。例如,如果要查询年龄在20到30岁之间的用户信息,可以使用以下查询:
SELECT * FROM users WHERE age BETWEEN 20 AND 30;
列与表取别名
在DQL中,可以为表和列取别名,以便在查询中引用它们。使用别名可以使SQL语句更易读、易写,也可以在查询中消除歧义。
-
为表取别名
可以为表取一个别名,以便在查询中引用该表。例如:
SELECT t.name FROM table1 AS t;
在上述查询中,表table1被赋予了别名"t",然后可以通过"t"来引用该表。
-
为列取别名
同样,也可以为列取别名。例如:
SELECT name AS player_name FROM table_name;
在上述查询中,列"name"被赋予了别名"player_name"。在结果集中,"player_name"将代表"table_name"表中的"name"列。
-
同时为表和列取别名
还可以同时为表和列取别名。例如:
SELECT t.name AS player_name FROM table1 AS t;
排序
在DQL中,可以通过ORDER BY子句对查询结果进行排序。排序可以按照升序(ASC)或降序(DESC)进行。
语法结构:
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式, 字段2 排序方式2;
其中,排序方式可以是ASC(升序,默认值)或DESC(降序)。
以下是一些排序查询的示例:
-
单列排序:
SELECT * FROM employees ORDER BY last_name ASC; -- 按姓氏升序排序
SELECT * FROM employees ORDER BY last_name DESC; -- 按姓氏降序排序
-
多列排序:
SELECT * FROM employees ORDER BY last_name ASC, first_name ASC; -- 先按姓氏升序排序,再按名字升序排序
SELECT * FROM employees ORDER BY last_name DESC, first_name DESC; -- 先按姓氏降序排序,再按名字降序排序
-
对聚合结果进行排序:
SELECT COUNT(*) FROM employees GROUP BY department_id ORDER BY COUNT(*) DESC; -- 按部门人数降序排序
聚合函数
运算函数
DQL中的聚合函数是一组用于对查询结果进行统计的函数。常见的聚合函数包括:
-
COUNT函数:用于计算查询结果中的行数。
SELECT COUNT(*) FROM table_name; -- 计算表中的行数
SELECT COUNT(column_name) FROM table_name; -- 计算符合条件的行数
-
SUM函数:用于计算某个列的总和。
SELECT SUM(column_name) FROM table_name; -- 计算列的总和
-
AVG函数:用于计算某个列的平均值。
SELECT AVG(column_name) FROM table_name; -- 计算列的平均值
-
MAX函数:用于找出某个列的最大值。
SELECT MAX(column_name) FROM table_name; -- 找出列的最大值
-
MIN函数:用于找出某个列的最小值。
SELECT MIN(column_name) FROM table_name; -- 找出列的最小值
GROUP BY 查询(分组查询)
GROUP BY子句在DQL中用于根据一个或多个列对查询结果进行分组。它通常与聚合函数一起使用,以便对每个组应用计算并生成汇总数据。
语法如下:
SELECT 列1, 列2, ... FROM 表名 GROUP BY 列1, 列2, ... ;
其中,列1、列2等是要选择的列,表名是要查询的表的名称,GROUP BY子句指定了根据哪些列进行分组。
以下是一些GROUP BY查询的示例:
-
根据单个列分组:
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id; -- 按部门分组并计算每个部门的员工数
-
根据多个列分组:
SELECT department_id, job_title, COUNT(*) FROM employees GROUP BY department_id, job_title; -- 按部门和职位分组并计算每个部门中每个职位的员工数
-
使用聚合函数与GROUP BY结合:
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id; -- 按部门分组并计算每个部门的平均工资
GROUP BY子句还可以与HAVING子句一起使用,以进一步筛选分组结果。HAVING子句允许你指定一个条件,用于在分组之后对分组结果进行筛选。
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id HAVING AVG(salary) > 50000; -- 按部门分组并计算每个部门的平均工资,仅返回平均工资大于50000的部门
HAVING子句
HAVING子句是SQL语句中的一个条件筛选语句,它用于在分组查询(group by)之后进一步筛选满足条件的分组结果。
语法上,HAVING子句位于GROUP BY子句之后,完整的语法如下:
SELECT 列1, 列2, ... FROM 表名 GROUP BY 列1, 列2, ... HAVING 条件;
其中,列1、列2等是要选择的列,表名是要查询的表的名称,GROUP BY子句指定了根据哪些列进行分组,HAVING子句则指定了进一步筛选分组的条件。
HAVING子句可以与聚合函数一起使用,例如COUNT、SUM、AVG等,以便对每个组应用计算并生成满足条件的汇总数据。
以下是一些HAVING子句的示例:
-
根据分组后的计数筛选:
SELECT department_id, COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 10; -- 按部门分组并计算每个部门的员工数,仅返回员工数大于10的部门
-
根据聚合函数的计算结果筛选:
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id HAVING AVG(salary) > 50000; -- 按部门分组并计算每个部门的平均工资,仅返回平均工资大于50000的部门
注意事项:
- HAVING子句只能用于在分组查询(group by)之后进行筛选,不能单独使用。
- HAVING子句后面的字段必须是分组字段或聚合函数的结果,不能是表中的其他字段。
- 在使用HAVING子句时,SELECT子句中必须包含一个或多个聚合函数,否则会报错。
标签:GROUP,name,--,数据库,查询,语法,子句,DQL,SELECT From: https://www.cnblogs.com/yund/p/17657040.html