MySQL -> DQL:SQL99:内连接(inner join on),外连接(left/right outer join on),交叉连接(cross)

“SQL92连接两个表:内连接”:

# 内连接不区分主从表
"SQL92连接两个表:内连接":
select *
from1,2
where1.字段 =2.字段;# 两表重叠部分

“SQL99连接两个表:内连接”:

"SQL99连接两个表:内连接":
select *
from1
inner join2
on1.字段 =2.字段;# 两表重叠部分,其中inner可以省略
where '正常的筛选条件;'

SQL99外连接:left/right outer join on

外连接包括内连接:
外连接=内连接+没有交集的部分
(有些数据在从表中有对应的数据,有些数据在从表中没有对应的数据,需要查询没有对应数据的字段时用外连接)

表A:

name			boyid
柳岩				8
苍老师				9
Angelababy			3
热巴				2
周冬雨				9
周芷若				1
岳灵珊				9
小昭				1
双儿				9
王语嫣				4
夏雪				9
赵敏				1
表B:

id  boyname    
1	张无忌	
2	鹿晗		
3	黄晓明	
4	段誉	

“查询表A中所有name对应的boyname”:left outer join on

# A,B表连接,不仅显示有对应数据的name,没有对应的数据也查询出来
# 主表为left左边的表A,对应的数据找不到用null代替
"查询表A中所有name对应的boyname":left outer join on
slect name boyname
from 表A
left outer join 表B
on boyid = id;

结果:
name	   boyname
柳岩		null
苍老师		null
Angelababy	黄晓明
热巴		鹿晗
周冬雨		null
周芷若		张无忌
岳灵珊		null
小昭		张无忌
双儿		null
王语嫣		段誉
夏雪		null
赵敏		张无忌

“查询表A中所有name对应的boyname”:right outer join on

# 主表为右边的表B,对应的数据找不到用null代替
"查询表A中所有name对应的boyname":right outer join on
select name,boyname
from 表A
right outer join 表B
on boyid = id;

输出:
Angelababy	黄晓明
热巴		鹿晗
周芷若		张无忌
小昭		张无忌
王语嫣		段誉
赵敏		张无忌

“全外连接”:左外连接和右外连接一起用,左外的所有数据加右外的所有数据,默认去重

# MySQL中使用:union关键字:联合(后面会有联合查询),oracle中使用full关键字
# MySQL中:比较复杂:需要两个连接都写
"全外连接":左外连接和右外连接一起用,左外的所有数据加右外的所有数据,默认去重
select name,boyname
from A
left outer join B
on boyid = id;
union
select name,boyname
from A
right outer join B
on boyid = id; 

# oracle中使用:
select name,boyname
from A
full outer join B
on boyid = id;

“交叉连接”:cross,交叉连接就是正常的from A,B;显示笛卡尔积的表

# 表A中每一条数据都与表B中的每一条数据匹配,会有A*B条数据
"交叉连接":cross,交叉连接就是正常的from A,B;显示笛卡尔积的表
select name,boyname
from A
cross outer join B
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值