1 查询表中数据
SELECT * FROM 表名;
2 按条件查询
SELECT * FROM 表名 WHERE 条件;
2.1 查询年龄大于70岁的人
SELECT * FROM 表名 WHERE age > 70;
2.2 查询年龄等于70岁的人
SELECT * FROM 表名 WHERE age = 70;
2.3 查询年龄不等于70岁的人
SELECT * FROM 表名 WHERE age <> 70;
SELECT * FROM 表名 WHERE age != 70;
2.4 查询年龄在20~70的人
SELECT * FROM 表名 WHERE age >= 20 && age <=70;
SELECT * FROM 表名 WHERE age >= 20 AND age <=70;
SELECT * FROM 表名 WHERE age BETWEEN 20 AND 70; -- 都是先写where
2.5 查询年龄为70岁、45岁的人
SELECT * FROM 表名 WHERE age = 45 || age =70 ;
SELECT * FROM 表名 WHERE age = 45 or age =70 ;
2.6 查询年龄为NULL的人
SELECT * FROM 表名 WHERE age is NULL; --判断是不是为null不能用布尔逻辑,只能用is或者is not
2.7 查询年龄不为NULL的人
SELECT * FROM 表名 WHERE age is not NULL;
3 模糊查询(也是用到条件where的,只不过“=”变成了like)
使用like进行模糊查询。占位符有_和%。_表示单个任意字符,%表示0个或多个任意字符。
3.1 查询姓王的人
SELECT * FROM 表名 WHERE name LIKE "王%";
3.2 查询第二个字是化的人
SELECT * FROM 表名 WHERE name like "_化%";
3.3 查询名字是两个字的人
SELECT * FROM 表名 WHERE name like "__";
3.4 查询名字带马的人
SELECT * FROM 表名 WHERE name LIKE "%马%";
4 排序查询
SELECT * FROM 表名 ORDER BY 列名1 排序方式1,列名2 排序方式2; -- 把字段名和排序规则一起看!ASC:升序(默认升序,即不写排序方式的时候),DESC:降序
4.1 年龄升序排序
SELECT * FROM 表名 ORDER BY age;
SELECT * FROM 表名 ORDER BY age ASC;
4.2 年龄降序排序
SELECT * FROM 表名 ORDER BY AGE DESC;
4.3 按年龄升序排序,如果年龄一样,则按照成绩升序排序(注意:如果多个条件排序时,当前一个条件值一样才会判断第二个条件)
SELECT * FROM 表名 ORDER BY AGE ASC, SCORE ASC; -- 分开写
5 聚合函数查询
聚合函数:将一列数据作为整体,进行纵向计算。
常用的聚合函数有:
1.count:计算个数
2.max:计算最大值
3.min:计算最小值
4.sum:计算和
5.avg:计算平均值
5.1 根据name字段求出表中的人数
SELECT COUNT(name) FROM 表名; -- 会排除name为NULL的记录,记录name不为空的数据有几条,而不是name不相同的数据有几条
一般写成:
SELECT COUNT(IFNULL(name,0)) FROM 表名; -- IFNULL(name,0)的意思是如果name为NULL则当成0来看
5.2 求出行中不全为NULL的数据条数
SELECT COUNT(*) FROM 表名; -- count(*)表示只要行中有一个数据不为null,就算一条数据
5.3 求出成绩最大、最小值
SELECT MAX(score) FROM 表名;
SELECT MIN(score) FROM 表名;
5.4 求出年龄之和(注:SUM自动排除NULL进行计算)
SELECT SUM(age) FROM 表名;
5.5 求出年龄的平均值(注:AVG在求和时排除了NULL进行计算,但是总数(分母)算上了包括了NULL的数据)
SELECT AVG(age) FROM 表名;
6 分组查询
SELECT 分组后查询的字段 FROM 表名 GROUP BY 分组字段;
例子:
比如说分组后查询字段有性别、平均年龄,分组字段为性别,则进行性别分组后,会显示出性别和平均年龄分组的结果,性别分组的结果就是男和女,年龄分组的结果就是男性的平均年龄以及女性的平均年龄。
6.1 求出男性、女性的平均年龄
SELECT sex,AVG(age) FROM 表名 GROUP BY sex;
6.2 查询男同学人数
SELECT SEX,COUNT(ID) 表名 GROUP BY sex; --先按性别划分,在分别求出每组的人数
6.3 查询年龄在70岁以下的男生人数(先满足条件再分组)
SELECT SEX,COUNT(id) FROM 表名 WHERE age<70 GROUP BY sex;
6.4 查询年龄在70岁以下的男生人数,如果人数大于10则显示出来(此问题有两次限定,一次在分组前,用WHERE,一次在分组后,用HAVING)
SELECT sex,COUNT(id) FROM 表名 WHERE AGE <70 GROUP BY sex HAVING COUNT(id) > 10;
6.5 分组查询取别名
SELECT sex,COUNT(id) 别名 FROM 表名 WHERE AGE < 70 GROUP BY sex HAVING 别名 > 10 ;
7 分页查询(第n页的起始索引 = (n-1) * 每页显示的条数)
SELECT * FROM 表名 LIMIT 起始索引,每页查询条数;-- 注意:第一条索引是0
7.1 每页显示3条记录,显示第一页
SELECT * FROM 表名 LIMIT 0,3;
7.2 每页显示3条记录,显示第二页
SELECT * FROM 表名 LIMIT 3,3;