Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1242865
  • 博文数量: 510
  • 博客积分: 20296
  • 博客等级: 上将
  • 技术积分: 4680
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-30 03:58
文章存档

2011年(13)

2010年(92)

2009年(242)

2008年(163)

我的朋友

分类: 数据库开发技术

2009-01-26 20:00:00

    如果我们想要列出一个表格中每一笔的资料,无论它的值在另一个表格中有没有出现,那该怎么办呢?在这个时候,我们就需要用到 SQL OUTER JOIN (外部连接) 的指令。

    外部连接的语法是依数据库的不同而有所不同的。举例来说,在 Oracle 上,我们会在 WHERE 子句中要选出所有资料的那个表格之后加上一个 "(+)" 来代表说这个表格中的所有资料我们都要。

    假设我们有以下的两个表格:

 Store_Information 表格

store_name

Sales

Date

Los Angeles

$1,500

Jan-05-1999

San Diego

$250

Jan-07-1999

Los Angeles

$300

Jan-08-1999

Boston

$700

Jan-08-1999

 Geography 表格    

region_name

store_name

East

Boston

East

New York

West

Los Angeles

West

San Diego

    我们需要知道每一间店的营业额。如果我们用一个普通的连接,我们将会漏失掉 'New York'这个店,因为它并不存在于 Store_Information 这个表格。所以,在这个情况下,我们需要用外部连接来串联这两个表格:

  1. SELECT A1.store_name, SUM(A2.Sales) SALES
  2. FROM Georgraphy A1, Store_Information A2
  3. WHERE A1.store_name = A2.store_name (+)
  4. GROUP BY A1.store_name

    我们在这里是使用了 Oracle 的外部连接语法。

结果:

store_name SALES
Boston $700
New York
Los Angeles $1800
San Diego $250

    请注意: 当第二个表格没有相对的资料时,SQL 会传回 NULL 值。在这一个例子中, 'New York' 并不存在于 Store_Information 表格,所以它的 "SALES" 栏位是 NULL。

  1. 补充:根据查询语句中指定的关键字及各个表的位置,可将外连接分为3类:
  2. 1.左外连接(LEFT OUTER JOIN):返回所有的匹配行并从关键字JOIN左边的表中返回所有不匹配的行。
  3. 2.右外连接(RIGHT OUTER JOIN):返回所有的匹配行并从关键字JOIN右边的表中返回所有不匹配的行。
  4. 3.完全连接(FULL OUTER JOIN):返回两个表中所有匹配的行和不匹配的行。

上一页:SQL 连接

下一页:SQL Subquery

阅读(796) | 评论(0) | 转发(0) |
0

上一篇:14.SQL 连接

下一篇:16.SQL Subquery

给主人留下些什么吧!~~