目录
1:介绍
2:语法
3:聚合函数
4:DOL 语句练习
5:SQL执行顺序
1:介绍
数据查询语言,用来查询数据库中表的记录
2:语法
select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后字段列表 order by 排序字段列表 limit 分页参数
1.:查询多个字段
select 字段1,字段2,.....from 表名;
select * from 表名; --查看表中的所有字段
2:设置别名 as可以省略
select 字段1 [as 别名1],字段2 [as 别名2]...from 表名;
3:去除重复记录
select distinct 字段列表 from 表名;
4:条件查询
select 字段列表 from 表名 where 条件列表
where后的条件:
5: 分组查询
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
where与having区别:
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。判断条件不同: where不能对聚合函数进行判断,而having可以
注意:
执行顺序: where >聚合函数> having 。
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
分组后select :后面为要查询的字段,只可以写分组字段和聚合函数否则会报错
6:排序查询
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2....
排序方式:
asc 升序(默认值)----可以省略不写
desc降序
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
7:分页查询
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意
起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数.
分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT.
如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
eg:
user_name表中的原始数据
--查询指定字段:id,job,name
select id,job,name from user_name;
--查询所有字段(下面的2选1)
select id,job,name,gender,age,id_card,time_a from user_name;
select * from user_name;
--查询员工的身份证,起别名 as可以省略
select id_card as "身份证" from user_name;
select id_card "身份证" from user_name;
--查询公司员工的年龄地址(不要重复)
select distinct age from user_name;
原始数据
--查询年龄为18的员工
select id,name,age from user_name where age=18;--查询表user_name中年龄为18的人,打印出他们的id,name,age字段
select * from user_name where age=18;--查询表user_name中年龄为18的人,打印出他们的全部字段
--查询年龄小于18的员工
select * from user_name where age<18;-查询表user_name中年龄小于18的人,打印出他们的全部字段
select id,name,gender from user_name where age<18;-查询表user_name中年龄小于18的人,打印出他们的id,name,gender字段
--查询年龄小于等于 17的员工信息
select * from user_name where age<=17;
select id,name,job from user_name where age<=17;
--4.查询没有身份证号的员工信息
select * from user_name where id_card is null;
select id,name,age from user_name where id_card is null;
--5.查询有身份证号的员工信息
select * from user_name where id_card is not null;
select id,name from user_name where id_card is not null;
-- 6. 查询年龄不等于 18 的员工信息
select * from user_name where age!=18;
select * from user_name where age<>18;
-- 7. 查询年龄在15岁(包含) 到 20岁(包含)之间的员工信息
select * from user_name where age>=15 && age<=20;
select * from user_name where age>=15 and age<=20;
select * from user_name where age between 15 and 20;
-- 8. 查询性别为 男 且年龄小于18岁的员工信息
select * from user_name where age<18 and gender="男";
--9。查询年龄等于18 或 17 或 20 的员工信息
select * from user_name where age=18 or age=17 or age=20;
select * from user_name where age in(17,18,20);
--10。查询姓名为两个字的员工信息_%
select * from user_name where name like "__";
-- 11,查询身份证号最后一位是X的员工信息
select * from user_name where id_card like "%x";
分组查询
原数据
--根据性别分组 ,统计男性员工 和 女性员工的数量, 下面2句话sql结果一样
select gender,count(gender) from user_name group by gender;
select gender,count(*) from user_name group by gender;
-- 2.根据性别分组 ,统计男性员工 和 女性员工的平均年龄
select gender,avg(age) from user_name group by gender;
-- 3:查询年龄小于18的员工 并根据性别分组 ,获取员工总人数大于等于3
select gender,count(*) "总人数" from user_name where age<=18 group by gender; having count(*)>=3;
select gender,count(*) "总人数" from user_name where age<=18 group by gender; having "总人数">=3;
排序查询:
原始数据
sql
-- 1.根据年龄对公司的员工进行升序排序 asc可以省略不写
select * from user_name order by age;
select * from user_name order by age asc;
select * from user_name order by age desc;
-- 2.根据入职时间,对员工进行降序排序
select * from user_name order by time_a desc;
-- 3:根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序
select * from user_name order by age asc,time_a desc;
分页查询
sql
-- 1. 查询第1页员工数据, 每页展示10条记录
select * from user_name limit 0,3;
select * from user_name limit 3;
-- 2,查询第2页员工数据,每页展示3条记录 --------> (页码-1)*页展示记录数
select * from user_name limit 3,3; --因为一共5条数据所以只显示第2页剩下2条数据了
3:聚合函数
1:介绍
将一列数据作为一个整体,进行纵向计算
2:常见聚合函数
3: 语法
select 聚合函数(字段列表) from 表名;
注意:null 值不参与所有聚合函数的运算.
-- 1.统计该企业员工数量
select count(*) from user_name;
select count(id) from user_name;
-- 2.统计该企业员工的平均年龄
select avg(age) from user_name;
-- 3。统计该企业员工的最大年龄
select max(age) from user_name;
-- 4。统计该企业员工的最小年龄
select min(age) from user_name;
-- 5.统计id为18的员工的年龄之和
select sum(age) from user_name where id=18;
4:DOL 语句练习
-- 1.查询年龄为20,21,22,23岁的女性员工信息。
select * from user_name where gender="女" and age in (20,21,22,23);
-- 2. 查询性别为 男 ,并且年龄在 18-40 岁(含)以内的姓名为三个字的员工。
select * from user_name where gender="男" and age between 18 and 40 and name like "___";
--3,统计员工表中,年龄小于60岁的 ,男性员工和女性员工的人数。
select gender,count(*) from user_name where age<60 group by gender;
--4,查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
select name,age from user_name where age<35 order by age asc,time_a desc;
--5,查询性别为男,且年龄在18-40 岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
select * from user_name where gender="男" and age between 18 and 40 order by age asc,time_a asc limit 3;
-- 1.查询年龄为20,21,22,23岁的女性员工信息。
select * from user_name where gender="女" and age in (20,21,22,23);
-- 2. 查询性别为 男 ,并且年龄在 18-40 岁(含)以内的姓名为三个字的员工。
select * from user_name where gender="男" and age between 18 and 40 and name like "___";
--3,统计员工表中,年龄小于60岁的 ,男性员工和女性员工的人数。
select gender,count(*) from user_name where age<60 group by gender;
--4,查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
select name,age from user_name where age<35 order by age asc,time_a desc;
--5,查询性别为男,且年龄在18-40 岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
select * from user_name where gender="男" and age between 18 and 40 order by age asc,time_a asc limit 3;
5:SQL执行顺序