承接国内外服务器租用托管、定制开发、网站代运营、网站seo优化托管接单、网站代更新,新老站点皆可!!咨询QQ:3787320601

SQL开发知识:SQL语句中区别的连接JOIN及join的用法

管理员 2023-06-24 07:48:39 互联网圈 13 ℃ 0 评论 6523字 收藏

为了从两个表中获得数据,我们有时会用JOIN将两个表连接起来。通常有以下几种连接方式:

JOIN  or  INNER JOIN(内连接) : 这两个是相同的,要求两边表同时有对应的数据,返回行,任何一边缺失数据就不显示。

LEFT JOIN(左外连接):即便右侧的表中没有匹配,也从左表返回所有的行。

RIGHT JOIN(右外连接):即便左侧的表中没有匹配,也从右表返回所有的行。

FULL JOIN(全外连接):只要其中一个表中存在匹配就返回行。

如例,有grade表(课程号sn,分数scroe,学号id),student表(学号id,学生姓名name),要查询学生的姓名和成绩

当JOIN或是INNER JOIN时,

SELECT s.name,g.sn,g.score from student as s join grade as g on s.id = g.id

SELECT s.name,g.sn,g.score from student as s inner join grade as g on s.id = g.id

结果集以下

当LEFT JOIN时,

SELECT s.name,g.sn,g.score from student as s left join grade as g on s.id = g.id

结果集以下

当RIGHT JOIN时,

SELECT s.name,g.sn,g.score from student as s right join grade as g on s.id = g.id

结果集以下

当FULL JOIN时,

SELECT s.name,g.sn,g.score from student as s full join grade as g on s.id = g.id

结果集以下

注意,两个表连接时用on,在使用left join(right join或full join)时,on与where的区分是:

on条件是在生成临时表时使用的条件,它不管on中的条件会不会为真,都会返回左侧表中的记录

where条件是在临时表生成好后再对临时表进行过滤的条件,这时候已没有left join的含义(一定要返回左侧表的记录)了,条件不为真的就全部过滤掉。以下图,

on条件为黄色部份

SELECT s.name,g.sn,g.score from student as s left join grade as g on s.id = g.id and score =90

SELECT s.name,g.sn,g.score from student as s left join grade as g on s.id = g.id where score =90

下面看下SQL中join的各种用法

1.自然连接(natural join)

自然连接将表中具有相同名称的列自动进行匹配,自然连接没必要指定任何同等连接条件也不能认为指定哪些列需要被匹配,自然连接得到的结果表中,两表中名称相同的列只出现一次。

select * from employee natural join department;

2.内连接(inner join):产生的结果是A和B的交集(相同列里面的相同值)

内连接查询能将左表和右表中能关联起来的数据连接后返回,返回的结果就是两个表中所有相匹配的数据。

select * from TableA as A inner join TableB B on A.PK = B.PK;
select * from TableA as A inner join TableB B on A.PK > B.PK;

3.外连接(outer join)

内连接是要显示两张表的内存,而外连接不要求如此,外连接可以根据连接表保存左表,右表或全部表的行动而分为左外连接右外连接和全连接。

select * from TableA as A left(right/full) join TableB as B on A.PA = B.PK;

Full Join:产生的结果是A和B的并集(如果没有相同的值会用null作为值)

Left Join:产生表A的完全集,而B表中匹配的则有值(没有匹配的则以null值取代)

Right Join:产生表B的完全集,而A表中匹配的则有值(没有匹配的则以null值取代)

4.交叉连接(cross join)

又称笛卡尔连接,交叉连接返回两个集合的笛卡尔积。

select * from TableA cross join TableB;

参考链接:http://mazhuang.org/2017/09/11/joins-in-sql/

总结

以上所述是小编给大家介绍的SQL语句中区别的连接join及join的用法,大家如有疑问可以留言,或联系站长。感谢亲们支持!!!

文章来源:丸子建站

文章标题:SQL开发知识:SQL语句中区别的连接JOIN及join的用法

https://www.wanzijz.com/view/58830.html

X

截屏,微信识别二维码

微信号:weimawl

(点击微信号复制,添加好友)

打开微信