联接查询及子查询
LEFT JOIN 和RIGHT JOIN 运算
用于FROM子句时,把源表记录组合起来。
语法
FROM表1 [ LEFT | RIGHT ] JOIN表2
ON 表1.字段1compopr 表2. 字段2
LEFT JOIN 及RIGHT JOIN 运算可分为以下几个部分:
table1, table2记录被组合的表的名称。
field1, field2被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr任何的关系比较运算子:"=," "<," ">," "<=," ">=," 或"<>."
说明
用LEFT JOIN 运算创建左边外部联接.左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。
用RIGHT JOIN 运算创建右边外部联接.右边外部联接将包含了从第二个(右边)开始的两个表中的全部记录,即使在第一个(左边)表中并没有匹配值的记录。
例如,可以使用LEFT JOIN 与部门(左边)及员工(右边)表来选择所有的部门,包含了没有分配到员工的部门。可以使用RIGHT JOIN 选择所有的员工,包含了没有分配到部门的员工。
下列示例显示如何在类标识符字段中联接类表及产品表。查询将会列出所有种类的列表,包含那些没有产品在其中的种类:
SELECT CategoryName,
ProductName
FROM Categories LEFT JOIN Products
ON Categories.CategoryID = Products.CategoryID;
在本例中,CategoryID 是联接的字段,但由于它不包含在SELECT语句中,因此,也不包含在查询结果中。要包含联接的字段,请在SELECT 语句中输入字段名—在这个示例中为
Categories.CategoryID。
INNER JOIN 运算
组合两个表中的记录,只要在公共字段之中有相符的值。
语法
FROM table1 INNER JOIN table2 ON table1.field1compopr table2.field2
INNER JOIN 运算可分为以下几个部分:
table1, table2记录被组合的表的名称。
field1, field2被联接的字段的名称。若它们不是由数字构成的,则这些字段必须为相同的数据类型并包含同类数据,但它们无须具有相同的名称。
compopr任何的关系比较运算子:"=," "<," ">," "<=," ">=," 或"<>."
说明
可以在FROM子句中使用INNER JOIN运算。这是最普通的联接类型。只要在这两个表的公共字段之中有相符值,内部联接将组合两个表中的记录。
可以使用INNER JOIN 与部门表及员工表选择每一个部门中的全部员工。反之,可以使用LEFT JOIN 或RIGHT JOIN运算创建outer join,从而选择所有部门(即使有些并没有员工)或所有员工(即使有些尚未分配到部门)。