DQL
查询语法
基础查询
1.查询多个字段
-- 查询所有记录,不要使用!
SELECT * FROM users;
-- 查询用户名,性别
SELECT username,sex FROM users;
2.去除重复记录 distinct
SELECT DISTINCT username FROM users;
3.取别名 AS,as也可以省略,有空格隔开就行
SELECT username as 用户名,sex as 性别 FROM users;
条件查询
SELECT username,sex FROM users WHERE 条件列表;
-- 查询年龄大于20岁的学员信息
SELECT * FROM stu WHERE age > 20;
-- 查询年龄等于18,20,22的学员信息
SELECT * FROM stu WHERE age = 18 OR age = 20 OR age = 22;
SELECT * FROM stu WHERE age in (18,20,22);
-- 查询英语成绩为null的学员信息
-- 错误写法:SELECT * FROM stu WHERE english = NULL;
-- NULL的比较不能使用=,!=,只能使用IS,IS NOT
SELECT * FROM stu WHERE english IS null;
-- 模糊查询 LIKE
/*
通配符
(1)_:代表单个任意字符
(2)%:代表任意个数字符
*/
SELECT * FROM stu WHERE `name` LIKE '柳_';
SELECT * FROM stu WHERE `name` LIKE '马%‘;
排序查询
-- 按年龄升序排列,ASC表示升序,默认升序,可以省略
SELECT * FROM stu ORDER BY age ASC;
-- 按数学成绩降序排列,数学成绩相同则按英语成绩升序排列
SELECT * FROM stu ORDER BY math DESC ,english;
分组查询
聚合函数:将一列数据作为整体进行计算
-- 分组查询
-- 统计一个班一共有多少个学生
SELECT count(id) FROM stu;
-- count统计的列中不能有null,故count的取值一般为主键(非空且唯一)或者*
-- 查询数学成绩的最高分
SELECT MAX(math) FROM stu;
-- 查询数学成绩的最低分
SELECT MIN(math) FROM stu;
-- 查询数学成绩的总分
SELECT SUM(math) FROM stu;
-- 查询数学成绩的平均分
SELECT AVG(math) FROM stu;
-- 查询英语成绩最低分
SELECT MIN(english) FROM stu;
-- null值不参与聚合函数计算
/*
分组查询语法:
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定]
GROUP BY 分组字段名 [HAVING 分组后条件过滤];
*/
SELECT * FROM stu;
-- 查询男同学和女同学各自的数学平均分
SELECT sex,AVG(math) FROM stu GROUP BY sex;
-- 分组之后,查询字段应为分组字段和聚合函数,查询其他字段没有意义
-- 例:select name,sex,AVG(math) FROM stu GROUP BY sex;这里面的name字段没有意义
-- 查询男同学和女同学各自的数学平均分,及各自人数
SELECT sex 性别,AVG(math) as 平均分,COUNT(*) as 人数 FROM stu GROUP BY sex;
-- 查询男同学和女同学各自的数学平均分,及各自人数,要求分数低于70不参与分组
SELECT sex 性别,AVG(math) as 平均分,COUNT(*) as 人数 FROM stu WHERE math >=70 GROUP BY sex;
-- 查询男同学和女同学各自的数学平均分,及各自人数,要求分数低于70不参与分组,且分组之后人数大于2
-- WHERE 不能对聚合函数进行判断,having可以,因为执行顺序:where>聚合函数>having
分页查询(LIMIT)
/*
分页查询语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
起始索引从0开始,类似数组下标
*/
-- 从0开始查询,查询3条数据
SELECT * FROM stu LIMIT 0,3;
-- 每页显示3条数据,查询第一页数据
SELECT * FROM stu LIMIT 0,3;
-- 每页显示3条数据,查询第二页数据
SELECT * FROM stu LIMIT 3,3;
-- 每页显示3条数据,查询第三页数据
SELECT * FROM stu LIMIT 6,3;
-- LIMIT是MySQL专属,oracle使用的是rownumber,SQL server使用的是top