查询表中的记录
1.语法
Select 字段列表
From 表名列表
Where 条件列表
Group by 分组字段
Having 分组之后的条件限定
Order by 排序
Limit 分页限定
2.基础查询
1.多个字段的查询
SELECT 字段名1,字段名2, FROM 表名;
2.查询所有
SELECT * FROM 表名;
3.去重复查询
SELECT DISTINCT 字段名1,字段名2 FROM 表名;
4.计算列
SELECT 字段名1,字段名2,字段名3+字段名4 FROM 表名;
5.计算列重命名
SELECT 字段名1,字段名2,字段名3+字段名4 AS 新的列名 FROM 表名;
3.条件查询
- WHERE 子句后跟条件
- 运算符
< >= <= != <> …
between…and 在…之间
in (集合)
like _单个任意字符 %多个任意字符
判断年龄 大于等于20
SELECT * FROM student WHERE age>=20;
判断年龄等于20
SELECT * FROM student WHERE age=20;
年龄不等与20的
SELECT * FROM student WHERE age!=20;
SELECT * FROM student WHERE age<>20;
年龄在20-30之间的
SELECT * FROM student WHERE age>=20 && age<=30;
SELECT * FROM student WHERE age>=20 AND age<=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
年龄包含(22,19,24)
SELECT * FROM student WHERE age = 22 OR age =19 OR age = 24;
SELECT * FROM student WHERE age IN(22,19,24);
null不能使用= (!=)判断
SELECT * FROM student WHERE math = NULL;
判断数学成绩为null的
SELECT * FROM student WHERE math IS NULL;
判断数学成绩不为null的
SELECT * FROM student WHERE math IS NOT NULL;
查询张开头的名字
SELECT * FROM student WHERE `name` LIKE '张%';
查询第二位是三的人
SELECT * FROM student WHERE `name` LIKE '_三';
查询两个字的名字
SELECT * FROM student WHERE `name` LIKE '__';
查询姓名中包含某个字符
SELECT * FROM student WHERE `name` LIKE '%三%';
4.排序语法
- 语法
ORDER BY 排序字段1 排序方式1,排序字段2 排序方式2; - 排序方式
ASC 升序 默认方式
DESC 降序
查询后按降序排列
SELECT * FROM 表名 ORDER BY 列名 DESC;
查询后按降序排列,如果列名1有相等的,按列名2的降序排列
SELECT * FROM 表名 ORDER BY 列名1 DESC, 列名2 DESC;
5.聚合函数
解释:将一列数据作为一个整体,进行纵向计算(聚合计算会 排除 null );
不排除null解决方案
- 选择非空列
- IFNULL
聚合函数,表的数据的总数
SELECT COUNT(列名) FROM student;
如果是null 让他为0
SELECT COUNT(IFNULL(列名,0)) FROM student;
聚合函数 最大值
SELECT MAX(列名) FROM student;
聚合函数 最小值
SELECT MIN(列名) FROM student;
聚合函数 求和
SELECT SUM(列名) FROM student;
聚合函数 平均值
SELECT AVG(列名) FROM student;
6.分组查询
语法
GROUP BY
WHERE 和 HAVING的区别
- 在分组之前限定,如果不满足条件,则不参与分组,having 在分组之后限定,如果不满足条件,则不回被查出
- where后不能跟聚合函数 having 可以跟聚合函数
分组查询 按列名1分组 查询列名2平均值,和总数
SELECT 列名1,AVG(列名2),COUNT(列名3) FROM 表名 GROUP BY 列名1;
分组查询 按列名1分组 查询列名2平均值,和总数 排除 列名2大于80的
SELECT 列名1,AVG(列名2),COUNT(列名3) FROM 表名 WHERE 列名2>80 GROUP BY 列名1;
分组查询 按列名1分组 查询列名2平均值,和总数 排除 列名2大于80的 并且 总数大2的
SELECT 列名1,AVG(列名2),COUNT(列名3) FROM 表名 WHERE 列名2>80 GROUP BY 列名1 HAVING COUNT(id)>2;
// '人数' 是 AS 的新名字 聚合函数可以 AS 名字 并且在别的地方调用
SELECT 列名1,AVG(列名2),COUNT(列名3) 人数 FROM 表名 WHERE 列名2>80 GROUP BY 列名1 HAVING 人数>2;
7.分页查询
语法
LIMIT 开始的索引,每页查询的条数;
公式
开始的索引 = (当前的页码-1) * 每页显示的条数;
分页查询
SELECT * FROM student LIMIT 0,3;