百科狗-知识改变命运!

sql语句中join ,left join ,right join有什么区别

百变鹏仔2年前 (2023-12-21)阅读数 16#综合百科
文章标签字段结果

left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录。

right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。

inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。

full join:外连接,返回两个表中的行:left join + right join

cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。

declare @a table(a int,b int)

declare @b table(a int,b int)

insert @a values(1,1)

insert @a values(2,2)

insert @b values(1,1)

insert @b values(3,3)

select * from @a

select * from @b

--左:

select * from @a Aa left join @b Bb on Aa.a=Bb.a

--右:

select * from @a Aa right join @b Bb on Aa.a=Bb.a

--内

select * from @a Aa inner join @b Bb on Aa.a=Bb.a

--外:

select * from @a Aa full join @b Bb on Aa.a=Bb.a

--交叉连接

select * from @a cross join @b

SQL的Join语法有很多,

inner join(等值连接) 只返回两个表中联结字段相等的行,

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录,

right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录,

sql语句中join ,left join ,right join有什么区别

假设我们有两张表。Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的,如下所示:

A表

id name

1 Pirate

2 Monkey

3 Ninja

4 Spaghetti

B表

id name

1 Rutabaga

2 Pirate

3 Darth Vade

4 Ninja

让我们看看不同JOIN的不同。

FULL [OUTER] JOIN

(1)

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

TableA.name = TableB.name 的情况,A和B的交集有两条数据,那么 FULL OUTER JOIN的结果集,

应该是2+2+2=6条,即上面的交集,再加剩下的四条数据,没有匹配,以null补全。

结果集

(TableA.) (TableB.)

id name id name

1 Pirate 2 Pirate

2 Monkey null null

3 Ninja 4 Ninja

4 Spaghetti null null

null null 1 Rutabaga

null null 3 Darth Vade

Full outer join 产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。

可以使用IFNULL判断。

(2)

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

WHERE TableA.id IS null OR TableB.id IS null

添加这个 where 条件,可以排除掉两表的数据交集。

结果集

(TableA.) (TableB.)

id name id name

2 Monkey null null

4 Spaghetti null null

null null 1 Rutabaga

null null 3 Darth Vade

产生A表和B表没有交集的数据集。

UNION 与 UNION ALL

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。UNION 只选取记录,而UNION ALL会列出所有记录。

(1)SELECT name FROM TableA UNION SELECT name FROM TableB

新结果集

name

Pirate

Monkey

Ninja

Spaghetti

Rutabaga

Darth Vade

选取不同值。

(2)SELECT name FROM TableA UNION ALL SELECT name FROM TableB

新结果集

name

Pirate

Monkey

Ninja

Spaghetti

Rutabaga

Pirate

Darth Vade

Ninja

全部列出来。

希望对你有帮助~

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)
{if $zbp->Config('yd1125')->foot}