sql中的连接

sql中的表连接有inner join,left join(left outer join),right join(right outer join),full join(full outer join),cross join

在此基础上我们能扩展出 left excluding join,right excluding join,full outer excluding join

注:left join是left outer join 的简写,即左连接和左外连接是一样的

首先定义两个比较经典的表

学生信息表和选课表

student

studentId	name	    sex
1         	小明        	男
2         	小黄        	男
3         	小红        	女
4         	小杨        	男

course

studentId	courseName
1         	数学        
1         	语文        
1         	英语        
2         	数学        
2         	语文        
2         	英语        
3         	数学        
3         	语文        
3         	英语        
5         	数学        
5         	语文        
5         	英语        

这两张表其实并不规范,course的studentId其实是一个外键,对应student的studentId,所以course的studentId不应该有5,不过为了测试方便,暂且这么写

 

内连接(inner join)

select s.* ,c.courseName
from student s
inner join course c 
on s.studentId=c.studentId

结果

studentId	name	     sex	courseName
1         	小明        	男	数学        
1         	小明        	男	语文        
1         	小明        	男	英语        
2         	小黄        	男	数学        
2         	小黄        	男	语文        
2         	小黄        	男	英语        
3         	小红        	女	数学        
3         	小红        	女	语文        
3         	小红        	女	英语        

左连接(left join)  

select s.* ,c.courseName
from student s
left join course c 
on s.studentId=c.studentId

结果

studentId	name	        sex	courseName
1         	小明        	男	数学        
1         	小明        	男	语文        
1         	小明        	男	英语        
2         	小黄        	男	数学        
2         	小黄        	男	语文        
2         	小黄        	男	英语        
3         	小红        	女	数学        
3         	小红        	女	语文        
3         	小红        	女	英语        
4         	小杨        	男	NULL

右连接

select s.* ,c.courseName
from student s
right join course c 
on s.studentId=c.studentId

结果

studentId    name         sex     courseName
1             小明            男      数学        
1             小明            男      语文        
1             小明            男      英语        
2             小黄            男      数学        
2             小黄            男      语文        
2             小黄            男      英语        
3             小红            女      数学        
3             小红            女      语文        
3             小红            女      英语        
NULL       NULL         NULL     数学        
NULL       NULL        NULL     语文        
NULL       NULL         NULL     英语        

全连接

select s.* ,c.courseName
from student s
full join course c 
on s.studentId=c.studentId

结果

studentId    name         sex   courseName
1             小明            男    数学        
1             小明            男    语文        
1             小明            男    英语        
2             小黄            男    数学        
2             小黄            男    语文        
2             小黄            男    英语        
3             小红            女    数学        
3             小红            女    语文        
3             小红            女    英语        
4             小杨            男    NULL
NULL        NULL        NULL  数学        
NULL        NULL        NULL  语文        
NULL        NULL        NULL  英语        

左不包含连接(left excluding join)

select s.* ,c.courseName 
from student s
left join course c 
on s.studentId=c.studentId
where c.studentId is null

结果

studentId	name	sex	courseName
4         	小杨     男	NULL

右不包含连接(right excluding join)

select s.* ,c.courseName 
from student s
right join course c 
on s.studentId=c.studentId
where s.studentId is null

结果

studentId	name	sex	courseName
NULL	     NULL	NULL	数学        
NULL	     NULL	NULL	语文        
NULL	     NULL	NULL	英语        

全不包含连接(Full outer excluding join)

select s.* ,c.courseName 
from student s
full join course c 
on s.studentId=c.studentId
where s.studentId is null or c.studentId is null

结果

studentId	name	sex	courseName
4         	小杨     男	NULL
NULL	     NULL	NULL	数学        
NULL	     NULL	NULL	语文        
NULL	     NULL	NULL	英语        

笛卡儿积(cross join) 

select s.* ,c.courseName 
from student s
cross join course c 

结果

studentId    name    sex    courseName
1             小明            男    数学        
1             小明            男    语文        
1             小明            男    英语        
1             小明            男    数学        
1             小明            男    语文        
1             小明            男    英语        
1             小明            男    数学        
1             小明            男    语文        
1             小明            男    英语        
1             小明            男    数学        
1             小明            男    语文        
1             小明            男    英语        
2             小黄            男    数学        
2             小黄            男    语文        
2             小黄            男    英语        
2             小黄            男    数学        
2             小黄            男    语文        
2             小黄            男    英语        
2             小黄            男    数学        
2             小黄            男    语文        
2             小黄            男    英语        
2             小黄            男    数学        
2             小黄            男    语文        
2             小黄            男    英语        
3             小红            女    数学        
3             小红            女    语文        
3             小红            女    英语        
3             小红            女    数学        
3             小红            女    语文        
3             小红            女    英语        
3             小红            女    数学        
3             小红            女    语文        
3             小红            女    英语        
3             小红            女    数学        
3             小红            女    语文        
3             小红            女    英语        
4             小杨            男    数学        
4             小杨            男    语文        
4             小杨            男    英语        
4             小杨            男    数学        
4             小杨            男    语文        
4             小杨            男    英语        
4             小杨            男    数学        
4             小杨            男    语文        
4             小杨            男    英语        
4             小杨            男    数学        
4             小杨            男    语文        
4             小杨            男    英语        
View Code

相关文章: