4.3.2 连接的类型
(1)内连接[inner]join
内连接只将两个表中满足指定条件的记录连接成一条新记录,舍弃所有不满足条件没有进行连接的记录。内连接是数据表最常用的连接方式,其语法格式为:
格式一:
S ELECT列名列表
FROM表名1{[inner]Join表名2
ON表名1.列名=表名2.列名}[…n]
格式二:
SELECT列名列表
FROM表名1,表名2[,…]
WHERE表名1.列名=表名2.列名[and…]
说明:
当表名太长时,一般可在FROM指定表的同时为表定义一个别名,定义格式为:表名[AS]别名(用AS或空格隔开)或:表名.别名。
如果两个表有相同的字段名,在指定字段名时必须在列名前面加上表名(或表别名)作为前缀加以区别,用“表名.列名”或“表别名.列名”表示。
如果列名是某个表中单独具有的,可以不加前缀,但加上表名会增强可读性。
注意:为表名定义别名后,在SELECT及各个子句中指定字段时必须使用“别名.列名”的格式,不允许再使用“表名.列名”。
(2)外连接
在内连接(自然连接)中,必须是两个表中匹配的记录才能在结果集中出现。而外连接只限制一个表,对另一个表不加限制(所有的行都可出现在结果集中),以便在结果集中保证该表的完整性。外连接分为左外连接、右外连接、全外连接三种。
①左外连接
左外连接返回左表(表名1)的全部记录及右表相关的信息。
左外连接取左表的全部记录按指定条件与右表中满足条件的记录进行连接,若右表中没有满足条件的记录则在相应字段填入NULL(Bit位类型字段填0)。但条件不限制左表,左表的全部记录都包括在结果集中,以保持左表的完整性。
语法格式:
SELECT列名列表
FROM表名1 left[outer]join表名2
ON表名1.列名=表名2.列名
②右外连接
右外连接返回右表的全部记录及左表相关的信息。右外连接与左外连接相同,只是把两个表的顺序颠倒了一下,就是取右表的全部记录按指定条件与左表中满足条件的记录进行连接,若左表中没有满足条件的记录则在相应字段填入NULL(Bit位类型字段填0),右表的全部记录都在结果集中,保持右表的完整性。
SELECT列名列表
FROM表名1 right[outer]join表名2
ON表名1.列名=表名2.列名
注意:右外连接与左外连接只是表的顺序不一样,如果把左外连接中表的顺序变一下,再使用右外连接,其结果是相同的。
③全外连接
全外连接返回左表与右表的全部记录。全外连接相当于先进行左外连接再进行右外连接的综合连接,就是取左表的全部记录按指定条件与右表中满足条件的记录进行连接。右表中不满足条件的记录则在相应字段填入NULL,再将右表不满足条件的记录列出,在左表不符合条件记录的相应字段填入NULL。
全外连接使两个表的全部记录都包括在结果集中,可以保持两个表的完整性。语法格式:
SELECT列名列表
FROM表名1 full[outer]join表名2
ON表名1.列名=表名2.列名
(3)自连接
自连接是一张表自己对自己的内连接,即在一张表的两个副本之间进行内连接。用自连接可以将同一个表的不同行连接起来。
使用自连接时,必须为两个副本指定别名,使之在逻辑上成为两个表。语法格式:
SELECT列名列表
FROM表名[AS]别名1 join表名.别名2
ON别名1.列名=别名2.列名
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。