SQL乐园(20)
软件世界
我们前面学习了内部连接和交叉连接,很多朋友可能会问,有没有外部连接呢?有的。简单地说,利用内部连接可以得到符合条件的纪录,利用交叉连接可以获得按照所有可能的方式组合而成的纪录,而外部连接的结果由两部分组成:一个表的所有记录和另一个表的所有符合条件的纪录。
外部连接有三种:左外部连接(简称左连接)、右外部连接(简称右连接)和完全外部连接,下面通过例子分别介绍它们的工作原理。
左外部连接
假设有下面两个数据表A(表1)和B(表2)。对它们做左连接,只须执行下面的语句:SELECT * FROM A LEFT OUT ER JOIN B ON(A. Column2=B. Col umn4),结果如表3所示。从表中可以看出,结果集中包含表A的全部数据,而表B中的数据,只有第一条记录包含在结果集中,当没有找到匹配的记录时,用Null值填充。
提示:有些数据库中,外部连接可以省略OUTER关键字,如MS SQL Server,而在有些数据库中,OUTER关键字必须出现。
右外部连接
顾名思义,右连接的作用与左连接几乎相同,惟一的不同是结果集中包含第二个表(右侧的表)的所有记录,而第一个表(左侧的表)只有符合条件的记录才纳入结果集。
执行SELECT * FROM A RIGHT OUTER JOIN B ON(A.Column2=B. Col umn4),得到的结果集如表4所示。
完全外部连接
完全外部连接就像双头连接,来自两个表的记录都将返回,没有找到匹配值的列用Null填充。定义这种连接的主要目的是为这样的连接要求提供一种快捷的实现方法,如果没有这种连接定义,用普通的语句实现相同的要求需要大量的代码。
执行SELECT * FROM A FULL OUTER JOIN B ON(A.Column2=B. Col umn4)便可以得到如表5所示的结果。
预告:下期我们一起来认识嵌套查询。
上期问题:假设有Store表(ID:仓库号,StoreName:仓库名称,N条记录)和Products表(ID:货物号,StoreName:货物名称,M条记录),求交叉连接后的结果集和记录总数。
参考答案:
SELECT * FROM Store CROSS JOIN Products
SELECT COUNT(*) FROM Store CROSS JOIN Products
本期问题:在Northwind数据库products表中按产品编号的顺序,列出所有产品的主要信息(产品编号productID、产品名称productname、价格Unitprice),并把“order details”表中卖出价(Unitprice)与products表中定价(Unitprice)相同的订单编号列出来。
本期的幸运读者是安徽的王树人,他将获得《全民学电脑──电脑入门》(含1CD)一本。请朋友们在答题的E-mail中注明通讯地址,以便邮寄奖品。


