按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
是指与个表内的行与本表内的数据相互进行联合 产生的结果行数取决于参加联合的行数
也就是说内部联合的行数取决于 WHERE 子句的结果 外部联合则是表间的联合 如上例
中的 ORDERS 表与 PART 表的联合 内部联合的例子如下
INPUT
SELECT P。PARTNUM P。DESCRIPTION P。PRICE O。NAME O。PARTNUM
FROM PART P JOIN ORDERS O ON ORDERS。PARTNUM = 54
OUTPUT
PARTNUM DESCRIPTION PRICE NAME PARTNUM
54 PEDALS 54。25 BIKESPEC 54
42 SEATS 24。50 BIKESPEC 54
46 TIRES 15。25 BIKESPEC 54
23 MOUNTAIN BIKE 350。45 BIKESPEC 54
76 ROAD BIKE 530。00 BIKESPEC 54
10 TANDEM 1200。00 BIKESPEC 54
注 在这里你使用的语法中的 JOIN ON 不是 ANSI 标准中所指定的 而是我们所使用的解
释器的附加语法 你可以用它来指明是内部联合还是外部联合 大多数解释器对些都进行
了类似的扩充 注意这种类型的联合没有 WHERE 子句
分析
结果表明 PART 表中的所有的行都与 PARTNUM 为 54 的行进行了组合 再来看一个
外部右联合的例子
INPUT/OUTPUT
SELECT P。PARTNUM P。DESCRIPTION P。PRICE O。NAME O。PARTNUM FROM PART P
RIGHT OUTER JOIN ORDERS O ON ORDERS。PARTNUM = 54
PARTNUM DESCRIPTION PRICE NAME PARTNUM
132
…………………………………………………………Page 133……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
PARTNUM DESCRIPTION PRICE NAME PARTNUM
TRUE WHEEL 23
TRUE WHEEL 76
TRUE WHEEL 10
TRUE WHEEL 42
54 PEDALS 54。25 BIKE SPEC 54
42 SEATS 24。50 BIKE SPEC 54
46 TIRES 15。25 BIKE SPEC 54
23 MOUNTAIN BIKE 350。45 BIKE SPEC 54
76 ROAD BIKE 530。00 BIKE SPEC 54
10 TANDEM 1200。00 BIKE SPEC 54
BIKE SPEC 10
BIKE SPEC 23
BIKE SPEC 76
LE SHOPPE 76
LE SHOPPE 10
AAA BIKE 10
AAA BIKE 76
AAA BIKE 46
JACKS BIKE 76
分析
这是一种新型的查询 这里我们第一次使用了 RIGHT OUTER JOIN 它会令 SQL 返
回右边表集内的全部记录 如果当 ORDERS。PARTNUM54 则补以空值 下边是一个左
联合的例子
INPUT/OUTPUT:
SELECT P。PARTNUM P。DESCRIPTION P。PRICE O。NAME O。PARTNUM
FROM PART P LEFT OUTER JOIN ORDERS O ON ORDERS。PARTNUM = 54
PARTNUM DESCRIPTION PRICE NAME PARTNUM
54 PEDALS 54。25 BIKE SPEC 54
42 SEATS 24。50 BIKE SPEC 54
46 TIRES 15。25 BIKE SPEC 54
23 MOUNTAIN BIKE 350。45 BIKE SPEC 54
76 ROAD BIKE 530。00 BIKE SPEC 54
10 TANDEM 1200。00 BIKE SPEC 54
分析
133
…………………………………………………………Page 134……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
与内部联合的结果一样 都是六行 因为你使用的是左联合 PART 表决定返回的行
数 而 PART 表比 ORDERS 表小 所以 SQL 把其余的行数都扔掉了
不要对内部联合和外部联合操太多的心 大多数的 SQL 产品会判断应该在你的查询中
使用哪一种联合 事实上 如果你在过程中使用它 或在程序内使用这 包括存储过程和
将在第 13 天提到的 高级 SQL 使用 你无需指明联合类型 解释器会为你选择合适的
语法形式 如果你指明的联合类型 解释器会用你指明的类型来代替优化的类型
在一些解释器中使用+号来代替外部联合 +号的意思就是— — 显示我的全部内容包括
不匹配的内容 语法如下
SYNTAX
SQL》 select e。name e。employee_id ep。salary ep。marital_status from e;ployee_tbl e;
employee_pay_tbl ep
where e。employee_id = ep。employee_id(+) and e。name like '%MITH'
分析
这条语句将会联合两个表 标有+号的 employee_id 将会全部显示 包括不满足条件的
记录
表的自我联合
今天的最后一个内容是经常使用的自我联合 它的语法与联合两个表的语法相似 例
如 表 1 的自我联合可以写成如下格式
INPUT
SELECT * FROM TABLE1 TABLE1
OUTPUT
ROW REMARKS ROW