mysql 多表联查+子查询复习

多表查询:

笛卡尔积查询:
笛卡尔积查询就是两张表相乘,假如左表有M条数据,右表有N条数据。相乘就是M*N条数据,但是这些数据中包含了大量的错误数据,需要用条件判断去筛选数据。

内连接查询:
本质上就是笛卡儿积查询加上条件判断。

select * from1 inner join2 on 条件判断;
select * from1 cross join2;
#inner可以不写 on相当于where

内连接的语法顺序:

select 查询字段
from 表名
inner join 表名
on 连接条件
where 筛选条件
group by 根据什么字段分组
order by 根据什么字段降序或者升序 默认升序 desc降序

聚合函数通常对group by 分组之后的数据进行处理,如果不使用,则对全部数据起作用

左外连接查询:
左表的所有数据加上右表经过筛选后的数据

select * from1 left join2 on 条件判断;

右外连接查询
右表的所有数据加上左表经过筛选后的数据

select * from1 right join2 on 条件判断;

全外连接查询
就是左表的信息加上右表的信息,但是mysql不支持全外连接,所以要使用union将两个表的数据加上

select * from1 full join2 on 条件判断; #mysql不支持

select * from1
union
select * from2;
#union会去重
#union的使用必须保证两个查询到的列数相同才行
#union all不去重

总结:
外连接查询将没有对应关系的数据也显示出来,这样的数据本来就是有问题,所以一般都使用内连接查询。

子查询

子查询的分类:
标量子查询(返回的结果是一行一列)
列子查询(返回的结果是一列多行)
行子查询(返回的结果是一行多列)
表子查询(返回的结果是多行多列)

子查询出现的位置:
select 后面只支持标量子查询
from 后面支持表子查询
where或者having后面支持标量子查询、列子查询、行子查询
exists后面支持表子查询

## 各个位置的特点:
子查询放在where having 后面:
1、子查询放在()里面
2、子查询放在where having 右边
3、子查询是标量子查询的,单行操作符(< > <=> =…)
4、列子查询一般使用的是any、all、some、in…
any/some 和子查询返回的摸一个值进行比较
all 和子查询返回的结果中的所有值进行比较
in/not in 等于查询列表中的任何一个值
5、子查询的优先级是高于主查询

子查询放在select 后面:
1、可以起别名
2、只能是标量子查询

子查询放在from后面:
1、必须起别名
2、在from后面的子查询充当的是一个表(数据源)

exists后面出现的子查询:
1、外查询先执行
2、返回的类似bool:0或1
3、如果成立,就把成立的内行取出,再显示数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值