sql数据库之联表查询


表准备:

在网站 https://www.bejson.com/runcode/sql/ 或者 https://www.liaoxuefeng.com/wiki/1177760294764384/1179611432985088

执行下列sql创建表

CREATE TABLE jobs( employee varchar(30), title varchar(30));
CREATE TABLE ranks( title varchar(30), rank varchar(30));
CREATE TABLE salary( rank varchar(30), payment int(11));
insert into jobs values('张三','经理'),('李四','总经理'),('王五','总经理助理');
insert into ranks values('经理','三'),('总经理','一'),('总经理助理','二'),('董事长','零');
insert into salary values('一',20000),('二',8000),('三',7000),('四',7000);

这次我们用到3张表:

jobs 表:

 ranks 表:

 salary 表:

 

一、 内连接——Inner Join

内连接Inner join基于连接谓词将两张表(如A和B)的列组合在一起,产生新的结果表。

 

select ranks.title,ranks.rank,salary.rank,salary.payment from ranks,salary where salary.rank=ranks.rank; 隐式内连接

select * from ranks r inner join salary s on s.rank=r.rank; 显式内连接

查询结果如下:

r!title r!rank s!rank s!payment
经理 7000
总经理 20000
总经理助理 8000

二、左外连接(left outer join,outer可省略)

左表全部出现在结果集中,若右表无对应记录,则相应字段为NULL

 

select * from ranks r left join salary s on r.rank=s.rank;

结果如下:

r!title r!rank s!rank s!payment
经理 7000
总经理 20000
总经理助理 8000
董事长 NULL NULL
select * from ranks r left join salary s on r.rank=s.rank where s.rank is null;

结果如下:

r!title r!rank s!rank s!payment
董事长 NULL NULL

三、右外连接(right outer join,outer可省略)

右表全部出现在结果集中,若左表无对应记录,则相应字段为NULL

select * from ranks r right join salary s on r.rank=s.rank;

 

 结果如下:

 
r!title r!rank s!rank s!payment
经理 7000
总经理 20000
总经理助理 8000
NULL NULL 7000
select * from ranks r right join salary s on r.rank=s.rank where r.rank is null;

结果如下:

r!title r!rank s!rank s!payment
NULL NULL 7000

四、全外连接(full outer join)

全外连接=左外连接+右外连接

 

select * from ranks r full outer join salary s on r.rank=s.rank;

结果如下:

r!title r!rank s!rank s!payment
经理 7000
总经理 20000
总经理助理 8000
董事长 NULL NULL
NULL NULL 7000
select * from ranks r full outer join salary s on r.rank=s.rank where r.rank is null or s.rank is null;

结果如下:

r!title r!rank s!rank s!payment
董事长 NULL NULL
NULL NULL 7000

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM