sql表链接的几种方式

这里有两张表TableA和TableB,分别是姓名表和年龄表,用于咱们例子的测试数据
TableA
id
name
1
t1
2
t2
4
t4
TableB
id
age
1
18
2
20
3
19
在开发中咱们的业务需求有时候是复杂的,多张表联合查询的时候是有多种方式的,面对不一样的需求,
灵活使用不一样的表链接方式,那么表链接分红哪几种呢?
 
表链接有几种?
sql表链接分红 外链接内链接交叉链接。
 
一.外链接
概述:
外链接包括三种,分别是左外链接、右外链接、全外链接。
对应的sql关键字:LEFT/RIGHT/FULL OUTER JOIN,一般咱们都省略OUTER关键字,写成LEFT/RIGHT/FULL JOIN。
在左、右外链接中都会以一种表为基表,基表的全部行、列都会显示,外表若是和条件不匹配则全部的外表列值都为NULL。
全外链接则全部表的行、列都会显示,条件不匹配的值皆为NULL。
 
    1.左外链接示例:
    sql语句:  select * from TableA left join TableB on TableA.id=TableB.id
    结果:
id
name
id
age
1
t1
1
18
2
t2
2
20
4
t4
NULL
NULL

    注释:TableA(基表)中全部的行列都显示了,第三行的条件不匹配全部TableB(外表)的值都为NULL。sql

    
    2.右外链接示例:
    sql语句: select * from TableA right join TableB on TableA.id=TableB.id
    结果:
id
name
id
age
1
t1
1
18
2
t2
2
20
NULL
NULL
3
19
 注释:TableB(基表)中全部的行列都显示了,第三行的条件不匹配全部TableA(外表)的值都为NULL。
 
    3.全外链接示例:
    sql语句:select * from TableA full join TableB on TableA.id=TableB.id
    结果:
    
id
name
id
age
1
t1
1
18
2
t2
2
20
NULL NULL 3
19
4 t4
NULL
NULL

注释:TableA和TableB的全部行列都显示了,条件不匹配的行的值为NULL测试

 
二.内链接

概述:内链接是用比较运算符比较要链接的列的值的链接,不匹配的行不会被显示。sql关键字JOIN 或者INNER JOIN,一般咱们写成JOIN
例子:
    select * from TableA JOIN TableB on TableA.id=TableB.id
结果:
    
id
name
id
age
1
t1
1
18
2
t2
2
20
注释:只返回条件匹配的行
 
以上写法等效于:
    select * from TableA,TableB where TableA.id=TableB.id
    select * from TableA cross join TableB where TableA.id=TableB.id (cross join 后只能用where不能用on)
 
三.交叉链接
概念:没有where条件的交叉链接将产生链接表所涉及的笛卡尔积。即TableA的行数*TableB的行数的结果集。(TableA 3行*TableB 3行=9行)
sql语句:
    select * from TableA cross join TableB
结果:
id
name
id
age
1
t1
1
18
2
t2
1
18
4
t4
1
18
1
t1
2
20
2
t2
2
20
4
t4
2
20
1
t1
3
19
2
t2
3
19
4
t4
3
19
注释:返回3*3=9行数据,即笛卡尔积。
 
以上写法等效于:
select * from TableA,TableB
相关文章
相关标签/搜索