现在的位置: 首页 > 综合 > 正文

SQL—DML—联结表の自联结,NATURAL JOIN,LEFT OUTER JOIN,RIGHT OUTER JOIN

2013年10月17日 ⁄ 综合 ⁄ 共 1025字 ⁄ 字号 评论关闭
  • 自联结

上例子:

找到Jim Jones所在公司工作的所有客户。

当然可以使用子查询,在这里就不把子查询的代码写出来了,使用自联结查询一下:

SELECT c1.cust_id,c1.cust_name,c1.cust_contact
FROM Customers AS c1,Customers AS c2
WHERE c1.cust_name = c2.cust_name
AND c2.cust_contact = 'Jim Jones';

此查询中需要的两个表实际上是相同的表,为了解决冲突,使用了别名。

这个例子可以使用子查询也可以使用联结,但是由于许多DBMS处理联结远比处理子查询快的多,因此建议使用自联结。

  • 自然联结(NATURAL JOIN)

自然连接(NATURAL JOIN)是一种特殊的等价连接,它将表中具有相同名称的列自动进行记录匹配。自然连接不必指定任何同等连接条件。

自然连接自动判断相同名称的列,而后形成匹配。缺点是,虽然可以指定查询结果包括哪些列,但不能人为地指定哪些列被匹配。

事实上,使用基于WHERE子句的等值连接要比使用NATURAL JOIN运算符进行自然连接要灵活得多。

等值连接与自然连接的区别:

1. 等值连接中不要求相等属性值的属性名相同,而自然连接要求相等属性值的属性名必须相同,即两关系只有在同名属性才能进行自然连接。如R中的C列和S中的D列可进行等值连接,但因为属性名不同,不能进行自然连接。

2. 等值连接不将重复属性去掉,而自然连接去掉重复属性,也可以说,自然连接是去掉重复列的等值连接。如R中的B列和S中的B列进行等值连接时,结果有两个重复的属性列B,而进行自然连接时,结果只有一个属性列B。

  • 外部联结(LEFT OUTER JOIN,RIGHT OUTER JOIN)

许多联结将一个表中的行与另一个表中的行相关联。但有时候会需要包含没有关联行的那些行,这时就需要使用外联结。

例:

SELECT Customers.cust_id,Orders.order_num
FROM Customers LEFT OUTER JOIN Orders
ON Custers.cust_id = Orders.cust_id;

与内部联结关联两个表中的行不同的是,外部联结还包括没有关联行的行。

在使用OUTER JOIN的语法时,必须使用LEFT OUTER JOIN或者RIGHT OUTER JOIN指定包括其所有行的表,RIGHT指出是OUTER JOIN右边的表,LEFT指出的是OUTER JOIN左边的表。

抱歉!评论已关闭.