查询语法:
一、基础查询
- 查询多个字段
SELECT 字段列表 FROM 表名;
SELECT * FROM 表名;
- 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
- 起别名:
AS:AS也可以省略
eg:
-- 基础查询=============
-- 查询name age 两列
select name,age from stu;
-- 查询所有列的数据,列名的列表可以使用*代替,(一般不使用)
select * from stu;
-- 查询地址信息
select address from stu;
-- 去除重复记录
select DISTINCT address from stu;
-- 查询姓名,数学成绩,英语成绩
select name,math 数学成绩,english as 英语成绩 from stu;
二、条件查询
- 条件查询语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件:
eg:
-- 条件查询========
-- 1、查询年龄大于20岁的成员信息
select * from stu where age > 20;
-- 2、查询年龄大于等于20岁 并且 年龄小于等于30岁的成员信息
select * from stu where age >= 20 and age <= 30;
select * from stu where age BETWEEN 20 and 30;
-- 3、查询入学日期在'1998-09-01'到'1999-09-01'之间的成员信息
select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
-- 4、查询年龄等于18岁的成员信息
SELECT * from stu where age = 18;
-- 5、查询年龄不等于等于18岁的成员信息
SELECT * from stu where age != 18;
SELECT * from stu where age <> 18;
-- 6、查询年龄等于18 或者 年龄等于20岁 或者 年龄等于22岁的成员信息
SELECT * from stu where age = 18 or age = 20 or age = 22;
SELECT * from stu where age in (18,20,22);
-- 7、查询英语成绩为null的成员信息
-- 注意:null值的比较不能用=、!= ,需要使用is、is not
select * from stu where english is null;
select * from stu where english is not null;
- 模糊查询like
通配符:
(1) _ :代表单个任意字符
(2) % :代表任意个数字符
eg:
-- 1、查询姓'马'的成员信息
SELECT * from stu where name like '马%';
-- 2、查询第二个字是'花'的成员信息
SELECT * from stu where name like '_花%';
-- 3、查询名字中包含'德'的成员信息 (常用)
SELECT * from stu where name like '%德%';
三、排序查询
- 排序查询语法
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2]...;
排序方式:
- ASC:升序排列(默认值)
- DESC:降序排列
注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
-- 1、查询学生信息,按照年龄升序排列
SELECT * from stu ORDER BY age asc;
-- 2、查询学生信息,按照数学成绩降序排列
SELECT * from stu ORDER BY math DESC;
-- 3、查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
SELECT * from stu ORDER BY math DESC,english ASC;
四、聚合函数
- 概念:将一列数据作为一个整体,进行纵向计算
- 分类:
- 语法:
SELECT 聚合函数名(列名) FROM 表;
注意:null值不参与所有聚合函数运算
eg:
-- 1、统计班级一共有多少个学生
select count(id) from stu; -- count统计的列名不能为空
-- 2、查询数学成绩的最高分
select max(math) from stu;
-- 3、查询数学成绩的最低分
select min(math) from stu;
-- 4、查询数学成绩的总分
select sum(math) from stu;
-- 5、查询数学成绩的平均分
select avg(math) from stu;
五、分组查询
- 分组查询语法
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
where 和 having的区别:
- 执行时机不一样:where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
- 可判断的条件不一样:where不能对聚合函数进行判断,而having可以。
执行顺序:where > 聚合函数 >having
eg:
-- 1、查询男同学和女同学各自的数学平均分
select sex,avg(math) from stu group by sex;
-- 2、查询男同学和女同学各自的数学平均分,以及各自人数
select sex,avg(math),count(*) from stu group by sex;
-- 3、查询男同学和女同学各自的数学平均分,以及各自的人数,要求:分数低于70分的不参与分组
select sex,avg(math),count(*) from stu where math > 70 group by sex;
-- 4、查询男同学和女同学各自的数学平均分,以及各自的人数,要求:分数低于70分的不参与分组,分组后人数大于2个的。
select sex,avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;
六、分页查询
- 分页查询语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
起始索引:从0开始
计算公式:起始索引 = (当前页码 - 1) * 每页显示的条数
eg:
-- 1、从0开始查询,查询3条数据
select * from stu limit 0,3;
-- 2、每页显示3条数据,查询第1页数据
select * from stu limit 0,3;
-- 3、每页显示3条数据,查询第2页数据
select * from stu limit 3,3;
-- 4、每页显示3条数据,查询第3页数据
select * from stu limit 6,3;
#计算公式:起始索引=(当前页码 - 1)*每页显示的条数