SQL中的各种连接的区别总结(内连接,左连接,左外连接,右连接,右外连接,全连接,全外连接)

在数据库中建立两张表方便大家理解,teacher和student表(student表中的teacherid字段是对应teacher表中的ID,举个例子张三的老师就是李四,没有teacherid就是这个人暂时没有老师)

 

INNER JOIN:   返回两个表的匹配得上的数据,不匹配不显示
LEFT JOIN:     即使右表中没有匹配,也从左表返回所有的行,没匹配的数据填空null
RIGHT JOIN:   即使左表中没有匹配,也从右表返回所有的行,没匹配的数据填空null
FULL JOIN:     返回两个表的所有数据,没匹配的数据填空null

 

(1)通过INNER JOIN来从两个表获取数据

(在数据库语言中,被称为显性连接。内连接返回的是两个表匹配得上的数据,匹配不上的不返回。 注:INNER JOIN 和JOIN是一样的)

SELECT t1.XXX,t2.XXX
FROM t1 INNER JOIN t2
ON t1.Id_t1 =t2.Id_t1

如图:有两个学生没select出来是原因他们没有teacherid,两个表数据匹配不上

 

(2)通过LEFT JOIN来从两个表获取数据

(以左表为基础,显示左表中的所有列,而右表中的数据只显示与关联条件相匹配的列,不匹配的列以NULL字符填充。注:LEFT JOIN 和LEFT OUTER JOIN是一样的)

 

SELECT t1.XXX,t2.XXX
FROM t1 LEFT JOIN t2
on t1.Id_t1=t2.Id.t1

 

如图:可以看出11个学生的数据都拿到了,因为左表用的是student表

来看看左表是teacher表是什么样子。

可以看到这次只有9条数据,就是因为左表用的是teacher表

 

(3)通过RIGHT JOIN来从两个表获取数据

(以右表为基础,显示右表中的所有列,而左表中的数据只显示与关联条件相匹配的列,不匹配的列以NULL字符填充。注:RIGHT JOIN 和RIGHT OUTER JOIN是一样的)

 

SELECT t1.XXX,t2.XXX
FROM t1 RIGHT JOIN t2
on t1.Id_t1=t2.Id.t1

 

如图:这里只有9条数据,因为右表用的是teacher表

右表是student时有11条数据。

 

这里可以这样来记忆和理解:

left join 是以左表来作为一个基准,他只会拿到左表想要的数据。

right left是以右表来作为一个基准,他只会拿到右表想要的数据。

 

 

(4)通过FULL JOIN来从两个表获取数据

(显示两个表的全部列,不匹配的列以NULL字符填充。注:FULL JOIN 和FULL OUTER JOIN是一样的)

SELECT t1.XXX,t2.XXX
FROM t1 FULL JOIN t2
on t1.Id_t1=t2.Id.t1

如图:可以看到full join会报错,百度之后发现mysql是不支持FUll JOIN (Orcale支持)这种写法的,不过可以用UNION来实现

如图:

 

下面是一些其他的连接写法

(1)通过WHERE使用连接语句,从两个表获取数据(在数据库语言中,被称为隐性连接,基本上被放弃使用)

SELECT t1.XXX,t2.XXX
FROM t1, t2
WHERE t1.Id_t1 = t2.Id_t1 

如图:与INNER JOIN 效果一致

 

(2)通过(+)来从两个表获取数据(+ 表示补充,即右表有加号,就是左连接,反之,就是右连接。全连接不支持这个写法)

SELECT t1.XXX,t2.XXX
FROM t1,t2
WHERE t1.Id_t1=t2.Id_t1(+)

注:Mysql不支持这种写法,Orcale才支持

 

总结:

1.像内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)、全连接(FULL JOIN)。中间加个OUTER

,例如左外连接(LEFT OUTER JOIN)、全外连接(FULL OUTER JOIN),跟他本身是没有区别的。可以说左连接是左外连接的缩写

2.通过WHERE来连接两个表的数据,属于数据库语言中的隐性连接,现在用的比较少了。

3.把内连接和全连接对应,左连接和右连接对应可以很方便的理解这四个的区别。

(1)内连接就是两个表匹配的上就显示出来。全连接就是两个表都显示出来,不管匹配的问题。

(2)左连接就是左边的表全部显示,右边的表匹配的上才显示(因为可能出现a表有的数据,b表没有,所以会出现空的数据,空的会自动填充null),反之,同一个道理。

 

 

SQL连接(Join)用于将两个或多个表的数据关联起来,以便于查询数据。常见的连接类型包括左连接右连接内连接外连接。 1. 左连接(Left Join):左连接返回左表所有的数据记录,以及所有和左表匹配的数据记录。如果没有匹配的数据记录,则返回 NULL。左连接使用 "LEFT JOIN" 或 "LEFT OUTER JOIN" 关键字实现。 2. 右连接(Right Join):右连接返回所有的数据记录,以及左表所有和表匹配的数据记录。如果左表没有匹配的数据记录,则返回 NULL。右连接使用 "RIGHT JOIN" 或 "RIGHT OUTER JOIN" 关键字实现。 3. 内连接(Inner Join):内连接只返回左两表都匹配的数据记录。内连接使用 "INNER JOIN" 或 "JOIN" 关键字实现。 4. 外连接(Outer Join):外连接分为左外连接外连接左外连接返回左表所有的数据记录,以及所有和左表匹配的数据记录,如果没有匹配的数据记录,则返回 NULL;外连接返回所有的数据记录,以及左表所有和表匹配的数据记录,如果左表没有匹配的数据记录,则返回 NULL。外连接使用 "FULL OUTER JOIN" 或 "FULL JOIN" 关键字实现。 示例代码: ```sql -- 左连接 SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column; -- 右连接 SELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column; -- 内连接 SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column; -- 左外连接 SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.column = table2.column; -- 外连接 SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.column = table2.column; -- 外连接 SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.column = table2.column; ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值