DQL查询包括以下这些内容:
• 基础查询
• 条件查询(WHERE)
• 分组查询(GROUP BY)
• 排序查询(ORDER BY)
• 分页查询(LIMIT)
(一)、基础查询
1、查询多个字段
SELECT 字段列表 FROM 表名;
SELECT * FROM 表名;
当前表中数据如下:
2、去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
直接查询表中address结果如下,可以看出有重复的地址信息出现:
去除重复记录
3、起别名
AS: AS也可以省略
(二)条件查询
1、条件查询语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
2、条件
查询年龄大于30的SELECT id,name,age,sex,address,math, english,hire_date from stu WHERE age>30;
-- 查询年龄大于等于30岁的信息SELECT id,name,age,sex,address,math, english,hire_date from stu WHERE age>=30;
-- 查询年龄大于等于30岁并且年龄小于等于50的信息SELECT id,name,age,sex,address,math, english,hire_date from stu WHERE age>=30 AND age<=50;
-- 查询年龄不等于30的SELECT id,name,age,sex,address,math, english,hire_date from stu WHERE age!=30;
-- 查询英语为null的
-- 注意:null值的比较不能使用 = !=,需要使用 is is not
SELECT id,name,age,sex,address,math, english,hire_date from stu WHERE english is null;
LIKE 占位符:(1) _:代表单个任意字符(2)%:代表任意个数字符-- 查询姓‘马’的
SELECT id,name,age,sex,address,math,english,hire_date FROM stu WHERE name like '马%';
-- 查询第二个字是‘花’的
SELECT id,name,age,sex,address,math,english,hire_date FROM stu WHERE name like '_花%';
-- 查询名字中有‘运’的
SELECT id,name,age,sex,address,math,english,hire_date FROM stu WHERE name like '%运%';
(三)排序查询
1、排序查询语法SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2]…;排序方式:ASC:升序排列(默认)DESC:降序排列注意: 如果有多个排序条件,当前边的条件值一样时,才会根据第二条进行排序-- 查询年龄按照升序
SELECT id,name,age,sex,address,math,english,hire_date FROM stu ORDER BY age ASC;
-- 查询按照数学成绩降序排列
SELECT id,name,age,sex,address,math,english,hire_date FROM stu ORDER BY math DESC;
-- 查询,按数学成绩降序排列,如果数学成绩一样,再按照英语升序排列
SELECT id,name,age,sex,address,math,english,hire_date FROM stu ORDER BY math DESC,english ASC;
(四)聚合函数
1、聚合函数的概念将一列数据作为一个整体,进行纵向计算。2、聚合函数的分类:
3、聚合函数的语法SELECT 聚合函数名(列名) FROM 表;注意:null值不参与所有聚合函数运算。-- 统计指定列的数量
SELECT count(name) FROM stu;
english列中有一个数据为null,所以统计数量为9,因此,统计数据时要选用不为null的列。推荐直接在括号内写*
-- 查询数学成绩最高的
SELECT max(math) FROM stu;
-- 查询数学成绩最低的
SELECT min(math) FEOM stu;
-- 求数学成绩总和
SELECT sum(math) FEOM stu;
-- 数学成绩平均值
SELECT avg(math) FEOM stu;
(五)分组查询
1、分组查询语句
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义。where和having的区别:(1)执行的时机不一样:where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤(2)可判断的条件不一样:where不能对聚合函数进行判断,having可以。执行顺序:where>聚合函数>having查询男女生各自的数学平均分
SELECT avg(math) FROM stu GROUP BY sex;
查询男女生各自数学平均分,以及各自人数
SELECT avg(math),count(*) FROM stu GROUP BY sex;
查询男女生各自数学平均分,以及各自人数,要求:分数低于70不参与分组
SELECT avg(math),count(*) FROM stu WHERE math>=70 GROUP BY sex;
查询男女生各自数学平均分,以及各自人数,要求:分数低于70不参与分组,分组之后人数大于两个的。
SELECT avg(math),count(*) FROM stu WHERE math>=70 GROUP BY sex HAVING count(*)>2;
(六)分页查询
1、分页查询语法SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;起始索引:从0开始计算公式:起始索引=(当前页码-1) * 每页显示的条数提示:(1)分页查询limit是MySQL数据库的方言(2)Oracle分页查询使用rownumber(3)SQL server分页查询使用top从0开始查询3条数据
SELECT id,name,age,sex,address,math,english,hire_date FROM stu LIMIT 0,3;
每页显示三条数据,查询第一页数据
SELECT id,name,age,sex,address,math,english,hire_date FROM stu LIMIT 0,3;
每页显示三条数据,查询第二页数据
SELECT id,name,age,sex,address,math,english,hire_date FROM stu LIMIT 3,3;
每页显示三条数据,查询第三页数据
SELECT id,name,age,sex,address,math,english,hire_date FROM stu LIMIT 6,3;