数据库多表关联查询

这篇博客介绍了数据库中的多表关联查询,包括左外连接、右连接、全外连接和内连接的概念,并通过实例展示了它们的区别。同时,讨论了ON和WHERE子句在不同类型的JOIN操作中的用法和差异。
摘要由CSDN通过智能技术生成

20170630第一次写博客!!!

最近在使用多表关联查询注意到一些之前没有发现的细节问题,特此整理加强记忆和理解。

多表关联查询,两个表之间连接关系可分为左外连接left [outer] join,右连接right [outer] join,全外连接full [outer] join,内连接[inner] join。举例说明下

table student

SIDNAMEDNO
1ZS1
2LS1
3WW2
4ZL
    

        table dept

DIDDNAME
1研发部
2测试部
3市场部

1、左外连接

SELECT  *

FROM student s LEFT OUTER JOIN dept d

ON s.dno = d.did;

结果:

1 ZS 1 1 研发部

2 LS 1 1 研发部

3 WW 2 2 测试部

4 ZL

2、右外连接

SELECT  *
FROM student s RIGHT OUTER JOIN dept d
ON s.dno = d.did;

结果:

1 ZS 1 1 研发部
2 LS 1 1 研发部
3 WW 2 2 测试部
3 市场部

3、全外连接(注:mysql不支持全外连接

SELECT  *
FROM student s FULL OUTER JOIN dept d
ON s.dno = d.did;

mysql中实现全外接连的变相方法:

SELECT  *
FROM student s LEFT OUTER JOIN dept d
ON s.dno = d.did
UNION
SELECT  *
FROM student s RIGHT OUTER JOIN dept d
ON s.dno = d.did;

结果:

1 ZS 1 1 研发部
2 LS 1 1 研发部
3 WW 2 2 测试部
4 ZL
3 市场部

4、内连接

SELECT  *
FROM student s INNER JOIN dept d
ON s.dno = d.did

结果:

1 ZS 1 1 研发部
2 LS 1 1 研发部
3 WW 2 2 测试部

等价于

SELECT * 
FROM student s,dept d
where s.dno = d.did;

(注:这里没有使用join,所以别习惯性的使用on)

5、on(连接条件)和where(过滤条件)的区别

      5.1 在inner join中on和where的效果是相同的

SELECT  *
FROM student s INNER JOIN dept d
ON s.dno = d.did
AND s.dno = 1;

等价于

SELECT  *
FROM student s INNER JOIN dept d
ON s.dno = d.did
WHERE s.dno = 1;

结果:

1 ZS 1 1 研发部
2 LS 1 1 研发部

5.2 外连接,以左外连接为例。

在使用left jion时,on和where条件的区别如下:

1) on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2)where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

SELECT  *
FROM student s LEFT JOIN dept d
ON s.dno = d.did
AND s.dno = 1;

结果:

1 ZS 1 1 研发部
2 LS 1 1 研发部
3 WW 2
4 ZL

SELECT  *
FROM student s LEFT JOIN dept d
ON s.dno = d.did
WHERE s.dno = 1;

结果:

1 ZS 1 1 研发部
2 LS 1 1 研发部



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值