day35_mysql单表查询与多表查询
目录
1、单表查询
1.1 单表查询语法:
SELECT 字段1,字段2... FROM 表名
WHERE 条件
GROUP BY field
HAVING 筛选
ORDER BY field
LIMIT 限制条数
1.2 关键字执行优先级:
from
where
gropu by
having
select
distinct
order by
limit
1.3 where 约束
- 比较运算符:
> < >= <= != <>
between 80 and 100
in(a,b,c)
like 'x%'
以x开头- 逻辑运算符
and/or
NULL
的判断:只能用is
,不能用=
1.4 group by
按照优先级,gropu by
分组发生在where
之后
分组:将所有记录按照某个相同字段进行归类,比如针对员工信息表职位分组,或者按照性别分组
注意:
1、select
优先级在group by
之后,所以select 只能查询分组后的结果
2、分组后不能直接使用select
查询每个组内的数据,可以通过聚合函数查看组内的相关内容
1.5 聚合函数
聚合函数聚合的是组的内容,若是没有分组,则默认一组
where
执行在group by
之前,因此where
约束中绝不能使用聚合函数
count(字段名a) # 统计组内字段a的数据个数
max()
min()
avg()
sum()
1.6 having 过滤
having
的执行优先级在group by
之后
因此having
只能过滤使用where
或者group
后的字段,并且可以使用聚合函数
1.7 order by
按字段排序
order by 字段名 # 默认按照字段升序排序
order by 字段名 desc # 按照字段降序排序
order by 字段名1,字段2 desc # 先按照字段1升序排序,在这个排序的基础上,相等记录按照字段2降序排序
1.8 limit
限制查询的记录数量
优先级最低
limit a,b # 按照排序的顺序,取从a到b的记录,a默认位0
1.9 正则查询
对字符串匹配的方式
where 字段名 regexp 're_format'
having 字段名 regexp 're_format'
2、多表查询
2.1 什么是多表查询
即联合多个表查询信息
2.2 使用多表查询的好处
在表中存储记录时,存在多个表格中的字段重复的情况,为了减少内存占用,也为了修改数据的便利性,设计了多表查询的方式
2.3 如何实现多表查询
2.3.1 外键
定义表格时,将某个字段定义为外键,即通过这个字段可以找到别的表的相应的值
语法:在定义表格时
constraint 外键名 foreign key(被约束的字段) references 约束的表(约束的字段)
2.3.2 查询方式
1、拼接表格
2、查询表格
拼接表格的方式:
基本连接方式:
1、select * from 表1 left join 表2 on 表1.外键=表2.外键
2、select * from 表1 right join 表2 on 表1.外键=表2.外键
3、select * from 表1 inner join 表2 on 表1.外键=表2.外键
# left 以表1的记录为准
# right 以表2的记录为准
# inner 以匹配的为准
全连接方式:
全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果
select * from 表1 left join 表2 on 表1.外键 = 表2.外键
union
select * from 表1 right join 表2 on 表1.外键 = 表2.外键
;
注意:
mysql不支持全外连接 full JOIN
2.4 子查询
即以查询语句作为另一个查询语句的参数
- 当查询结果时多个值时,可ui使用关键字
in
- 当查询结果为一个值时,可以使用比较运算符
- 可以用
exist
语句判断
select id,name from department
where id in (select dep_id from employee group by dep_id having avg(age) > 25);
select name,age from emp where age > (select avg(age) from emp);
mysql> select * from employee
where exists (select id from department where id=200);