目录
三,外连接查询(左left join,右right join)
一,内连接查询
内连接的语法如下:
SELECT fieldlist FROM table1【INNER】 JOIN table2 ONtable1.column1=table2.column2【where condition】
语法说明如下:
(1)fieldlist:table1 表和 table2 表中的字段列。如果 fieldlist 取两张表所有列,则可用“*”代替,此时会出现连接依据列重复,即table1表的column1与table2表的column2为重复列。
(2)table1 [INNER] JOIN table2:将table1表与table2表进行内连接,INNER可省略。
(3)table1.column1=table2.column2:连接条件,其中column1和column2为table1 表与table2表的关联列,通常它们为外键列和主键列。
(4)“inner”可省略。
(5)“where condition”可省略,它为查询条件表达式。
!!!注意
连接依据的列可能包含null值,null 值不与任何值匹配(甚至和它本身)。
- 交叉连接(Cross Join)又称“笛卡尔连接(Cartesian Join)”或“叉乘(Product)”,它是所有类型的内连接的基础。
- 相等连接
- 自然连接(Natural Join)相连接的两张表的连接依据列必须是相同的字段(字段名相同,字段属性相同)。在自然连接中两张表的所有名称相同的列都将被比较,并且在结果集中把重复的列去掉,结果集中两张表中名称相同的列仅出现一次。而普通的内连接并不去掉重复的列。(部分数据库不支持自然连接,如 SQL Server 等。)
语法:SELECT fieldlist FROM table1 NATURAL JOIN table2 【where condition】
二,多表连接查询
如果查询的信息来源于多张表,则可通过两两相连的方式建立多表连接查询。
多表连接查询语法:
SELECT fieldlist FROM table1 JOIN table2 ON table1.column1=table2.column2_1
JOIN table3 on table2.column2_2=table3.column3 【where condition】
table2 与 table1 和 table3 两两相连。
三表以上连接查询的方法与三表连接查询的方法一样,均是通过两两相连的方式实现。
简单多表连接查询语法:
如果在FROM子句中,直接列出所有要连接的表,然后在WHERE子句中指定连接条件,此为简单多表查词,它与内连接功能相同。
使用两表连接查询语法:
SELECT fieldlist FROM table1,table2 WHERE table1.column1=table2.column2
【and 其他条件】
使用三表连接查询语法:SELECT fieldlist FROM table1,table2,table3 where
table1.column1=table2.column2_1 and table2.column2_2=table3.column3
【and 其他条件】
三,外连接查询(左left join,右right join)
在内连接查询中,只有满足连接条件的记录才能出现在查询结果中。但在实际应用中,如果希望不满足连接条件的记录也在查询结果中出现,这时需要使用外连接查询。根据不同的外连接形式,外连接所生成的结果集中不仅包含符合条件的数据记录,还包含左表、右表或左右表中所有的数据记录。
外连接查询语法:
SELECT 字段名 FROM 表名1 LEFT | RIGHT | FULL [OUTER] JOIN 表名2
ON 表名1.字段名1=表名2.字段名2
“outer”可省略
左外连接的结果集包括左表的所有记录和右表中满足连接条件的记录,结果集中那些不符合连接条件的来源于右表的列值为null。
右外连接是左外连接的反向连接。右外连接的结果集包括右表的所有记录和左表中满足连接条件的记录,结果集中那些不符合连接条件的来源于左表的列值为null。