当前位置:Gxlcms > 数据库问题 > SQL----Inner Join、 Outer Join、Cross Join理解

SQL----Inner Join、 Outer Join、Cross Join理解

时间:2021-07-01 10:21:17 帮助过:37人阅读

table Stu ( Stu_no varchar(10), Class_no nvarchar(10) primary key(Stu_no) ) create table Class( Class_no nvarchar(10), Class_teacher nvarchar(10) primary key(Class_no) ) insert into Stu values (1,电系),(2,火系),(3,水系) insert into Class values (金系,皮卡丘),(草系,妙蛙种子),(水系,蚊香蝌蚪)

这里的数据,学生表1,2号的班级电系,火系,班级表中没有

班级表草系,金系,在学生表中也不存在

技术图片            技术图片

 

 

sql的join可以分为内连接(inner join),外连接(outer join)、交叉连接(cross join)

 

其中inner和outer语法中需要加on, on后为连接条件,按照这个条件来进行筛选

cross语法不需要加on

 

1.inner join 内连接

      看成两个表的并集,要求每个表中每一行都匹配,不匹配的行会被排除

       技术图片

      在Stu、Class两表中使用内连接,目的是取出当前有班主任的学生的信息   

select * 
from Stu inner join Class
on Stu.Class_no = Class.Class_no

    学生表中学生1,2分别是电系和火系的,班级表中没有这个班级,就删去1,2学生的信息

    班级表的草系和金系,在学生表中没有这样班级的学生,于是将草系,金系删除

    这样获取学生,老师信息是一一对应的

    技术图片

 

2.outer join 外连接

  外连接分为三大类,左连接、右连接、全链接

 

左(外)连接:

    看作两个表的下图连接,左表中的每一行都要存在,右表与左表不匹配的内容删去,输出中匹配不了的右表部分使用null

       技术图片

    Stu、Class做左连接,目的是选取每个学生的信息,学号,班级,老师,没有班主任的学生也要输出

select * 
from Stu left join Class 
on Stu.Class_no = Class.Class_no

    学生表1,2分别是电系和火系,在右表班级中没有对应的班级,使用null值代替,仍输出左表不匹配内容

    班级草系、金系在左表学生中没有匹配,删除

    技术图片

 

左内连接:

    看作是两个表做下图操作,在左外连接上去除了右表存在部分,只提取左表没有匹配的行

    技术图片

    Stu,Class进行左内连接,目的选取所有没有班主任的学生

select * 
from Stu left join Class 
on Stu.Class_no = Class.Class_no
where Class.Class_no is null

    在左连接的基础上,选择右表匹配项为null值的项,就是左表中没有匹配的项

    进行左连接后,1,2号学生没有匹配到班主任,右表内容为null,选择右表值为null的项就可以将左表未匹配项选择出来  

    技术图片

 

右(外)连接:

    将两表看作下图操作,右表中每一行都存在,左表与右表匹配不了的行删去,输出中匹配不了的左表部分使用null填充

    技术图片

    Stu、Class进行右连接,输出所有班级信息,没有学生也输出

select * 
from Stu right join Class
on Stu.Class_no = Class.Class_no

    班级表中信息全部输出,草系,金系与左表没有匹配项,将左表内容用null进行输出

    技术图片

 

右内连接:

    将两表看作下图操作,在右外连接的基础上,除去左表也存在的内容,提取右表中没有匹配的行

    技术图片

    Stu、Class右内操作,输出所有没有学生的班级

select * 
from Stu right join Class
on Stu.Class_no = Class.Class_no
where Stu.Class_no is null

    在右外连接的基础上,班级表草系,金系对应学生表中的信息为空,将空值输出

    技术图片

 

全(外)链接:

    两个表进行并集操作,对应不匹配位置使用null值替代

    技术图片

    Stu、Class进行并集操作,目的选出所有学生,班级信息

select * 
from Stu full join Class
on Stu.Class_no = Class.Class_no

  

    技术图片

 

全内连接:

    两表进行下图操作,选出左右两表所有没有匹配的项

    技术图片

select * 
from Stu full join Class
on Stu.Class_no = Class.Class_no
-- 全内连接
where Stu.Class_no is null or Class.Class_no is null 

    Stu、Class做全内连接,选出两个表中所有没有匹配的项

    技术图片

 

3.Cross join 交叉连接

    两个表中所有元素的排列组合,Stu表中有3个班级,Class表中有3个班级,输出值为3*3 = 9个

    cross join 不用加on

select *   
from Stu cross join Class

    什么都不加,直接在from后面放两个表,也是交叉连接

select * 
from Stu,Class

技术图片

 

SQL----Inner Join、 Outer Join、Cross Join理解

标签:没有   左连接   筛选   元素   内容   select   info   weight   code   

人气教程排行