99表连接 内连接与外连接

本文详细介绍了SQL中的连接查询,包括交叉连接、等值连接(自然连接、使用using、使用on)、自连接及外连接(左连接、右连接、全连接)。通过实际案例展示了不同连接方式的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.99表内连接

​ 首先,在使用查询语句时,当要查询的数据来源于多张表时,使用连表查询;当查询数据来自于一张表,但是相关的满足条件来自于其他表时,优先使用子查询。

1.1cross join|笛卡尔积

格式:select 数据 from 数据源1 cross join 数据源2…;

例:select e.empno ,e.ename,d.deptno from emp e cross join dept d;

使用cross join 最后得到的数据集是笛卡尔积的状态。

1.2等值连接

1.2.1自然连接

​ natural join作为自然连接,会自动将同名字段|主外键关系的字段进行等值连接,且在自然连接中,同名字段不能写限定词(指明出处)。

--在自然连接中 同名字段会自动进行等值连接
select e.empno,e.ename,deptno from emp e natural join dept d;
1.2.2join…using ()

​ join…using 在使用过程中,using中存放同名的字段,语句按照括号内的字段进行等值连接。

--在join.....using中,同名字段不能写限定词(指明出处)
select e.empno,e.ename,e.deptno from emp e join dept d using(deptno);
1.2.3join…on…

​ join…on…不同于以上两种连接方式,等值的连接判断需要我们自己写在on后面,当然on后面也可以做非等值判断。

当连接两张表时:数据源1 join 数据源2 on 连接条件

当连接多张表时:数据源1 join 数据源2 on 连接条件1 join 数据源3 on连接条件2…

​ 即当连接多张表时,后面的表会和前面已经连接的新表再次进行连接。

--查询所有员工的信息以及所在部门信息然后过滤掉,只保留10部门 -->先连接,然后后过滤
select * from emp e join dept d on e.deptno = d.deptno where e.deptno = 10;
--连接多张表
select * from student st join score sc on st.sno=sc.sno join course co on sc.cno=co.cno 

​ join…on…用于自连接:

--使用join......on......自连接,当过滤条件都来源于自身时,则需要用到自连接
select * from emp e1 join emp e2 on e1.mgr = e2.empno;

2.外连接

​ 使用内连接查询数据时,有些数据不满足连接条件,但是也要想展示出来则需要用到外连接,在外连接中主表很关键,主表中的数据不满足连接条件也会全部显示出来。

  • 左连接:left join
  • 右连接:right join
  • 全连接:full join
--左连接
select * from emp e1 left join emp e2 on e1.mgr = e2.empno; 
--右连接
select * from emp e2 right join emp e1 on e1.mgr = e2.empno; 
--两边都是主表
select * from emp e1 full join emp e2 on e1.mgr = e2.empno;

​ 不同于92查询语法中的左右连接,99语法中使用方法更加灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值