连接查询
查询信息的来源如果来自多张表,则必须对这些表进行连接查询。连接是把不同的表的记录连到一起的最普通的方法,通过连接查询可将多个表作为一个表进行处理。
连接查询分为内连接和外连接
<一>内连接
<1>交叉连接(笛卡尔积)
交叉连接(Cross Join),又称“笛卡尔连接(Cartesian Join)”或“叉乘(Product)”,他是所有类型的内连接基础。
语法:
SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE子句]
通俗而言,交叉连接就是两个集合中的每一个成员都与对方集合中的任意一个成员有关联。
重点:
交叉连接的查询效率非常低,实际上SQL产品会尽可能的避免使用交叉连接。
<2>内连接
内连接是应用程序中非常常见的连接操作,它一般都是默认的连接类型。
语法:
SELECT fieldlist FROM 表1 [INNER] JOIN 表2 ON 表1.column1=表2.column2[where condition]
where condition 可以省略,它为查询条件表达式。
liner 可以省略。
<3>自然连接
自然连接(Natural join)是一种特殊的内连接,它要求相连接的两张表的连接依据列必须是相同的字段(字段名相同,字段属性相同)。
语法:
SELECT fieldlist FROM 表1 NATURAL JOIN 表2 [where condition]
重点:
部分数据库不支持自然连接,如SQL Server等。
<二>多表连接查询方法
如果查询的信息来源于多张表,则可以通过两两相连的方式建立多表连接查询。
语法:
SELECT fieldlinst FROM 表1 JOIN 表2 ON 表1.column1=表2.column2_1 JOIN 表3 on
表2.column2_2=表3.column3 [where condition]
注:
表1与表2和表3两两相连
三表以上的连接查询方法与三表的查询方法一样,都是通过两两相连的方法实现。
<1>简单的多表查询连接
如果在FROM子句中,直接列出所有要连接的表,然后在WHERE子句中指定连接条件,此为简单多表查询,它与内连接功能相同。
语法:
两表连接查询
SELECT fieldlist FROM 表1,表2
WHERE 表1.column1=表2.column2 [and 其他条件]
三表连接查询
SELECT fieldlist FROM 表1,表2,表3
where 表1.column1=表2.column2_1 and 表2.column2_2=表3.column3 [and 其他条件]
<三>外连接查询
通俗说当不满足连接条件的记录也在查询结果中,使用外部连接
<1>左外连接
包括左表的所有记录和右表中满足连接条件的记录
<2>右外连接
是左外连接的反向连接