一、基础查询
1、多个字段的查询
select 字段1,字段2...字段n from 表名;
-- 如果要查询所有字段,可以用*代替
2、去除重复
select distinct 字段1 from 表名;
-- 完全一样的查询结果才能去重
3、计算列
select distinct 字段1,字段2,字段3 字段1+字段2+字段3 from 表名;
-- 计算字段1、2、3之和
-- 如果null参与的计算,结果都是null,若为null,则为0可以这样写:
select distinct 字段1,字段2,字段3 字段1+字段2+ifnull(字段3,0) from 表名;
4、起别名
select distinct 字段1,字段2,字段3 字段1+字段2+ifnull(字段3,0) as 别名 from 表名;
-- as可以省略,空格必须有
二、条件查询
1、where子句后跟条件;
2、运算符
>、<、<=、>=、=、<>
BETWEEN...AND
IN(集合)
LIKE
IS NULL
and 或 &&
or 或者 ||
not 或者 !
实例:
-- 查询年龄大于等于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;-- 这么写也行
-- 查询年龄等于20,23,25岁的学生
SELECT * FROM student WHERE age =20 OR age = 23 OR age = 25;
SELECT * FROM student WHERE age IN (20,23,25);
-- 查询英语成绩为null的学生
SELECT * FROM student WHERE english = NULL; -- 错误写法
SELECT * FROM student WHERE english IS NULL; -- 正确写法
-- 查询英语成绩不为null的学生
SELECT * FROM student WHERE english IS NOT NULL;
三、模糊查询
LIKE-模糊查询
占位符:
_:单个任意字符;
%:多个任意字符;
例如:
-- 查询姓马的同学
SELECT * FROM student WHERE name LIKE '马%';
-- 查询姓名中第二个字是‘化’的同学
SELECT * FROM student WHERE name LIKE '_化%';
-- 查询姓名中包含‘马’的人
SELECT * FROM student WHERE name LIKE '%马%';-- 用得多
四、排序查询
1、语法
order by 子句;
-- 例如
order by 排序字段1 排序方式1,排序字段2 排序方式2...
2、排序方式
升序(ASC):默认;
降序(DESC);
-- 数学成绩按照降序排序
SELECT * FROM student ORDER BY math DESC;
-- 按照数学成绩排序,如果数学成绩是一样的,按照英语成绩排序
SELECT * FROM student ORDER BY math ASC,english ASC;
注意:多个排序条件,当前面的条件查询到的结果一样的时候,才会去执行后面的条件;
五、聚合函数
将一列数据作为一个整体,进行纵向计算;
1、count:计算数量
2、max:计算最大值
3、min:计算最小值
4、sum:求和
5、avg:计算平均值
示例:
-- 计算数学成绩最大值
SELECT MAX(math) FROM student;
六、分组查询
1、语法
GROUP BY 分组字段;
2、示例
-- 按照性别分组,分别计算男女同学的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;
-- 按照性别分组,分别计算男女同学的平均分,但要求大于70分的才参与分组
SELECT sex , AVG(math) FROM student WHERE age > 70 GROUP BY sex;
-- 按照性别分组,分别计算男女同学的平均分,但要求大于70分的才参与分组,分组之后人数要大于2人
SELECT sex, AVG(math), COUNT(id) FROM student WHERE age > 70 GROUP BY sex HAVING COUNT(id) > 2 ;
SELECT sex, AVG(math), COUNT(id) AS 人数 FROM student WHERE age > 70 GROUP BY sex HAVING 人数 > 2 ;
3、注意
分组之后查询的字段:分组字段、聚合函数;
where和having的区别:
where在分组之前进行限定,若不满足条件,则不参与分组;
having在分组之后进行限定,若不满足条件,则不会被查询出来;
where后不可以跟聚合函数,having后可以进行聚合函数的判断;
七、分页查询
1、语法
limit 开始的索引,每页查询的条数;
2、示例
-- 每页查3条数据
SELECT * FROM student LIMIT 0,3 -- 第一页
SELECT * FROM student LIMIT 3,3 -- 第二页
-- 公式:开始的索引= (当前的页码 - 1) * 每页显示的条数;
3、公式
公式:开始的索引= (当前的页码 - 1) * 每页显示的条数;
4、limit分页操作是MySQL的一个“方言”,不同数据库实现分页的方式不一样;