文章目录
DQL:数据查询语言(Data Query Language):select(查询) from 子句 where 子句
简单查询
#查询所有列
select * from 表名;
#查询指定列
select 列,... from 表名;
#去除查询的重复列(表格特大的时候,如果存在相同的项目只显示一次)
select distinct 列,... from 表名;
给列名起别名
select 列1 别名1,列2 别名2 from 表名;
条件查询
select * from 表名 where 查询条件
按条件查询
查询条件必须遵循条件运算符:< > >= <= = <> !=
#查询年龄大于等于20岁的
select * from 表名 where 年龄<=20;
按逻辑查询
查询条件必须遵循逻辑运算符:and(与) ,or(或) ,not(非)
#查询有奖金的人员信息
select * form 表名 where 奖金 not null;
模糊查询
_ 表示单个字符
% 表示N个字符
%XXX% 表示XXX的任意位置。
#查询姓张且名字为两个字的人员
select * from 表名 where 名字 like '张_';
#查询姓张的人员信息
select * from 表名 where 名字 like '张%';
//查询名字中含有小字的人员信息
SELECT * FROM 表名 WHERE 名字 LIKE '%小%';
排序查询
关键字:ORDER BY 默认为升序排列 ASC(升序) DESC(降序)
若有相同的项目,则可以在后面添加其他的排序条件
//以工资的升序排列
SELECT * FROM 表名 ORDER BY 工资 ASC;
//以工资的降序进行排列
SELECT * FROM 表名 ORDER BY 工资 DESC;
//当有相同的项目存在的时候,可以添加其他的排序条件
SELECT * FROM 表名 ORDER BY 工资 DESC, 员工号 ASC;
分组查询
分组语法
select 聚合函数,分组字段 from 表1,... where 分组前筛选 group by 分组的字段 having 分组后筛选 order by 排序字段或表达式
聚合函数
关键字
COUNT(*) 表示总共有几列
SUM(sal) 表示该列的总和
MAX(sal) 表示该列的最大值
MIN(sal) 表示该列的最小值
AVG(sal) 表示该列的平均值
//求出emp表格中的总人数,及工资的总和 最高 最低 和平均数
SELECT COUNT(*) 总人数, SUM(sal) 工资总和, MAX(sal) 最高工资, MIN(sal) 最低工资, AVG(sal) 平均工资 FROM emp;
特点:
- sum和avg只支持数值类型,其他支持任何类型
- 聚合函数都忽略null
- 和聚合函数一起查询的字段必须为分组的字段
- count(*)计算结果集的行数,效率高
分页查询
mysql特有的limit查询
LIMIT 4, 3;
4表示:从第五行开始查(下标从0开始算)
3表示:查询3行记录
(当前页-1)* 每页记录数, 每页记录数
//查询第三页每页十行记录
SELECT * FROM emp LIMIT 20,10;
子查询
在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句
主查询: 主要查询的对象,第一条 select 语句
主查询和子查询的关系
- 子查询是嵌入到主查询中
- 子查询是辅助主查询的,要么充当条件,要么充当数据源
- 子查询是可以独立存在的语句,是一条完整的 select 语句
子查询分类
标量子查询: 子查询返回的结果是一个数据(一行一列)
列子查询: 返回的结果是一列(一列多行)
行子查询: 返回的结果是一行(一行多列)
标量子查询
#1.查询班级学生平均年龄 2.查询大于平均年龄的学生 3.查询班级学生的平均身高
select * from students where age > (select avg(age) from students);
列级子查询
#1.查询还有学生在班的所有班级名字 2.找出学生表中所有的班级 id 3.找出班级表中对应的名字
select name from classes where id in (select cls_id from students);
行级子查询
#需求: 查找班级年龄最大,身高最高的学生 行元素: 将多个字段合成一个行元素,在行级子查询中会使用到行元素
select * from students where (height,age) = (select max(height),max(age) from students);