关键字:连接

在实际应用中,大多的查询都是需要多表连接查询的,本文是对JOIN的用法的小总结。 首先,设定两张表,作为下面例子的操作对象。

表1 student

file

表2 major

file

1.【INNER JOIN】内连接

这是最常用的,获取两个表中指定字段满足匹配关系的记录。 内连接通常有两种情况:

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

--查询每个学生的学号、姓名、专业、班级
--涉及到student和major两张表,用共有字段“学号”为连接字段
--写法1:使用INNER JOIN
SELECT A.id, A.姓名, B.专业, B.班级
FROM student A
INNER JOIN major B   
ON  A.学号=B.学号

--写法2:--省去了INNER,直接写JOIN,与INNER JOIN没有区别
SELECT A.学号, A.姓名, B.专业, B.班级
FROM student A
JOIN major B  
ON  A.学号=B.学号

--写法3: --使用WHERE,已经逐渐被淘汰
SELECT A.学号, A.姓名, B.专业, B.班级
FROM student A, major B
WHERE A.学号=B.学号 

--上面三种写法的结果都是一样的,推荐使用写法2

file

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

--要在学生表里查询与 b同名字的学生信息

SELECT B.学号, B.姓名, B.性别 
FROM student A 
JOIN student B
ON A.姓名=B.姓名 AND A.姓名='b'

2.【LEFT JOIN】左连接

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

--左连接:显示左表student所有记录,如右表中没有与之
--匹配的项则以NULL值代替。

SELECT A.学号, A.姓名, B.专业, B.班级
FROM student A LEFT JOIN major B  
ON  A.学号=B.学号

file

3.【RIGHT JOIN】右连接

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

--右连接:显示右表major所有记录,如左表中没有与之
--匹配的项则以NULL值代替。

SELECT A.学号, A.姓名, B.专业, B.班级
FROM student A RIGHT JOIN major B  
ON  A.学号=B.学号

file

4.【FULL JOIN】 完全连接

返回两个表中的所有行。

--完全连接:显示两张表的并集,如果其中一张表的记录
--在另一张表中没有匹配的行,则对应的数据项填充NULL

SELECT A.学号, A.姓名, B.专业, B.班级
FROM student A FULL JOIN major B  
ON  A.学号=B.学号

file

5.【CROSS JOIN】交叉连接

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

--交叉连接:一张表中的数据依次取出分别与另一张表中的
--每条数据挨个组合,最后记录数量为两张表记录数的乘积

SELECT * FROM student CROSS JOIN major

--本例student和major都为7条记录,所以结果为5*7=35条记录

6.【Left Excluding JOIN】左表唯一和【Right Excluding JOIN】右表唯一

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

--左表唯一:将右表B以及两张表交集的部分过滤掉,
--得到的记录是左表中唯一存在的。

SELECT A.学号, A.姓名, B.专业, B.班级
FROM student A LEFT JOIN major B  
ON  A.学号=B.学号
WHERE B.学号 IS NULL

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

--右表唯一:将左表A以及两张表交集的部分过滤掉,
--得到的记录是右表中唯一存在的。

SELECT A.学号, A.姓名,B.专业, B.班级
FROM student A RIGHT JOIN major B  
ON  A.学号=B.学号
WHERE A.学号 IS NULL

file

7.【Outer Excluding JOIN】非交集连接

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

--非交集连接:查找两张表中没有关联的记录项。

SELECT A.学号, A.姓名, B.专业, B.班级
FROM student A FULL JOIN major B  
ON  A.学号=B.学号
WHERE A.学号 IS NULL OR B.学号 IS NULL

file

更多信息,参见https://help.kingbase.com.cn/v8/index.html

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐