SQL多表查询:SQL JOIN连接查询各种用法总结

您所在的位置:网站首页 请问12560是什么短号 SQL多表查询:SQL JOIN连接查询各种用法总结

SQL多表查询:SQL JOIN连接查询各种用法总结

#SQL多表查询:SQL JOIN连接查询各种用法总结| 来源: 网络整理| 查看: 265

首先,设定两张表,作为下面例子的操作对象。

表1 学生信息表

表2 专业班级表

再来个SQL JOIN连接查询各种用法的大合影,先预热一下。

No.1 【INNER JOIN】内连接

这是最常用的,获取两个表中指定字段满足匹配关系的记录。

内连接通常有两种情况:

等值连接:查找两个表中连接字段相等的记录。

--查询每个学生的学号、姓名、籍贯、年龄、专业、班级 --涉及到student和major两张表,用共有字段“学号”为连接字段 --写法1:使用INNER JOIN SELECT A.学号,A.姓名,A.籍贯,A.年龄,B.专业,B.班级 FROM student A INNER JOIN major B ON A.学号=B.学号 --写法2:--省去了INNER,直接写JOIN,与INNER JOIN没有区别 SELECT A.学号,A.姓名,A.籍贯,A.年龄,B.专业,B.班级 FROM student A JOIN major B ON A.学号=B.学号 --写法3: --使用WHERE,已经逐渐被淘汰 SELECT A.学号,A.姓名,A.籍贯,A.年龄,B.专业,B.班级 FROM studentA,majorB WHERE A.学号=B.学号 --上面三种写法的结果都是一样的,推荐使用写法2

自身连接:就是和自己进行连接查询,给一张表取两个不同的别名,然后附上连接条件。

--要在学生表里查询与 HH 同龄且籍贯也相同的学生信息 SELECT B.学号,B.姓名,B.性别,B.籍贯,B.年龄 FROM student A JOIN student B ON A.年龄=B.年龄 AND A.籍贯=B.籍贯 AND A.姓名='HH' No.2 【LEFT JOIN】左连接

获取左表中的所有记录,即使在右表没有对应匹配的记录。

--左连接:显示左表student所有记录,如右表中没有与之 --匹配的项则以NULL值代替。 SELECT A.学号,A.姓名,A.籍贯,A.年龄,B.专业,B.班级 FROM student A LEFT JOIN major B ON A.学号=B.学号 No.3 【RIGHT JOIN】右连接

用于获取右表中的所有记录,即使左表没有对应匹配的记录。

--右连接:显示右表major所有记录,如左表中没有与之 --匹配的项则以NULL值代替。 SELECT A.学号,A.姓名,A.籍贯,A.年龄,B.专业,B.班级 FROM student ARIGHT JOIN major B ON A.学号=B.学号 No.4 【FULL JOIN】 完全连接

返回两个表中的所有行。

--完全连接:显示两张表的并集,如果其中一张表的记录 --在另一张表中没有匹配的行,则对应的数据项填充NULL SELECT A.学号,A.姓名,A.籍贯,A.年龄,B.专业,B.班级 FROM student A FULL JOIN major B ON A.学号=B.学号 No.5 【CROSS JOIN】交叉连接

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

--交叉连接:一张表中的数据依次取出分别与另一张表中的 --每条数据挨个组合,最后记录数量为两张表记录数的乘积 SELECT * FROM student CROSS JOIN major --本例student和major都为7条记录,所以结果为7*7=49条记录 No.6 延伸【Left Excluding JOIN】左表唯一

返回左表有但右表没有关联数据的记录。

--左表唯一:将右表B以及两张表交集的部分过滤掉, --得到的记录是左表中唯一存在的。 SELECT A.学号,A.姓名,A.籍贯,A.年龄,B.专业,B.班级 FROM student A LEFT JOIN major B ON A.学号=B.学号 WHERE B.学号 IS NULL

No.7 延伸【Right Excluding JOIN】右表唯一

返回右表有但左表没有关联数据的记录。

--右表唯一:将左表A以及两张表交集的部分过滤掉, --得到的记录是右表中唯一存在的。 SELECT A.学号,A.姓名,A.籍贯,A.年龄,B.专业,B.班级 FROM student A RIGHT JOIN major B ON A.学号=B.学号 WHERE A.学号 IS NULL No.8 延伸【Outer Excluding JOIN】非交集连接

返回左表和右表里没有相互关联的记录。

--非交集连接:查找两张表中没有关联的记录项。 SELECT A.学号,A.姓名,A.籍贯,A.年龄,B.专业,B.班级 FROM student A FULL JOIN major B ON A.学号=B.学号 WHERE A.学号 IS NULL OR B.学号 IS NULL 最后

谈及 SQL 里的各种 JOIN 之间的区别时,被广为引用的是 CodeProject 上C.L. Moffatt的文章, 本文也有所参考,感兴趣的小伙伴可以去看一下。

https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3