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

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

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 Aaa=Bba

--右:

select from @a Aa right join @b Bb on Aaa=Bba

--内

select from @a Aa inner join @b Bb on Aaa=Bba

--外:

select from @a Aa full join @b Bb on Aaa=Bba

--交叉连接

select from @a cross join @b

1、check the manual that corresponds to your MySQL server version for the right syntax to use near ')

语法错误:  `turn` TINYINT(2) NULL DEFAULT NULL,

           PRIMARY KEY (`id`)

                   )COLLATE='utf8_general_ci'

第二行没有逗号。

看你什么数据库了

每种数据库的方式不太一样的

给你sqlserver的方法

select 

课程名称,学分

from 表

where left(课程名称,3)='计算机'

and right(课程名称,2)='基础'

直接用SQL语句就可以连接:(inner) join on 内链接 与 where 子查询 是一样的。

主要有区别是 left join right join 以及 full join,功能和性能跟where有差异

inner join

(等值连接)

只返回两个表中联结字段相等的行

WHERE 和INNER JOIN产生的连接关系,本质区别不详,结果一样。

(1)在效率上,Where可能具有和Inner join一样的效率。但基本可以肯定的(通过SQLServer帮助和其它资料,以及本测试)是Join的效率不比Where差。

(2)使用Join可以帮助检查语句中的无效或者误写的关联条件。

(3)从可读性角度来看,Where更直观。

left join

left outer join

(左联接)

返回包括左表中的所有记录和右表中联结字段相等的记录

左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

right join

right outer join

(右联接)

返回包括右表中的所有记录和左表中联结字段相等的记录

右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

full join

full outer join

(全连接)

完整外部联接返回左表和右表中的所有行

当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。

如果表之间有匹配行,则整个结果集行包含基表的数据值。

Join & where总结:

where是两个表中的数据满足共同条件才会显示。

Jion on是相同条件匹配。

因此,除了inner join结果通常不一样。

一般数据库都有内置的字符串函数,调用这些函数就可以实现这个功能,比如sql server的函数是SUBSTRING (<expression>, <starting_ position>, length),Oracle和MySql都有类似的函数,可以查看一下帮助文档或者网上搜一下。希望对你有帮助。

举个简单的例子吧,从结果来理解比较具体些。

a表

name sex

张三 男

李四

b表

name age

李四 30

王五 23

1\全外连接

select aname,asex,bname,bage

from a full outer join b on aname=bname

结果如下,

name sex name age

张三 男 NULL NULL

李四 女 李四 30

NULL NULL 王五 23

关联字段name,左表有而右表没有的,如张三,bname,bage都为NULL,加上左右两边都有的就是左连接的结果;而右表有而左表表没有的,如王五,aname,asex都为NULL,加上左右两边都有的就是右连接的结果;左右两边都有的如,李四,这就是内连接。相见如下

2\左

select aname,asex,bname,bage

from a left outer join b on aname=bname

结果如下

name sex name age

张三 男 NULL NULL

李四 女 李四 30

2\右

select aname,asex,bname,bage

from a right outer join b on aname=bname

结果如下

name sex name age

李四 女 李四 30

NULL NULL 王五 23

3\内联

select aname,asex,bname,bage

from a inner join b on aname=bname

结果如下

name sex name age

李四 女 李四 30

4\交叉

select aname,asex,bname,bage

from a cross join b on aname=bname

结果如下

name sex name age

张三 男 李四 30

李四 女 王五 23

张三 男 王五 23

李四 女 李四 30 望采纳

INNER JOIN 产生的结果是AB的交集

SELECT FROM TableA INNER JOIN TableB ON TableAname = TableBname

2LEFT [OUTER] JOIN 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。

SELECT FROM TableA LEFT OUTER JOIN TableB ON TableAname = TableBname

3RIGHT [OUTER] JOIN 产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。

SELECT FROM TableA RIGHT OUTER JOIN TableB ON TableAname = TableBname

图标如left join类似。

4FULL [OUTER] JOIN 产生A和B的并集。对于没有匹配的记录,则会以null做为值。

SELECT FROM TableA FULL OUTER JOIN TableB ON TableAname = TableBname

你可以通过is NULL将没有匹配的值找出来:

SELECT FROM TableA FULL OUTER JOIN TableB ON TableAname = TableBname

WHERE TableAid IS null OR TableBid IS null

5 CROSS JOIN 把表A和表B的数据进行一个NM的组合,即笛卡尔积。如本例会产生44=16条记录,在开发过程中我们肯定是要过滤数据,所以这种很少用。

SELECT FROM TableA CROSS JOIN TableB

相信大家对inner join、outer join和cross join的区别一目了然了。

以上就是关于sql语句中join ,left join ,right join有什么区别全部的内容,包括:sql语句中join ,left join ,right join有什么区别、数据库报错——check the manual that corresponds to your MySQL server version for the right、在数据库中,怎么查询以'计算机'开头,'基础'结尾的课程名称,学分等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9399712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存