JOIN
連接組合兩個(gè)表中的字段記錄,包括三種:
?
INNER?JOIN
運(yùn)算式:連接組合兩個(gè)表中的字段記錄。
?
LEFT?JOIN
運(yùn)算式:連接組合兩個(gè)表中的字段記錄,并將包含了
LEFT?JOIN
左邊表中的全部記錄。
?
RIGHT?JOIN
運(yùn)算式:連接組合兩個(gè)表中的字段記錄,并將包含了
RIGHT?JOIN
右邊表中的全部記錄。
?
INNER?JOIN
設(shè)定兩個(gè)表相關(guān)聯(lián)的運(yùn)算式,以連接組合兩個(gè)表中的字段記錄。
?
INNER?JOIN
語法如下:
?
FROM?
表
1?INNER?JOIN?
表
2?ON?
表
1.
字段
1?
比較運(yùn)算子
?
表
2.
字段
2?
兩個(gè)表連接的字段,譬如
?[
表
1.
字段
1=
表
2.
字段
2]
,必須具有相同的字段類型,但是字段名稱不需要相同。
?
例如,自動(dòng)編號(hào)字段類型可以連接
Long?
的字段類型,但是單精整數(shù)字段類型不能連接雙精整數(shù)的字段類型。
?
比較運(yùn)算子可為
=
、
<
、
>
、
<=
、
>=
、或
<>
。
?
JOIN
連接的字段,不可以包含
MEMO
字段類型或
OLE
對(duì)象類型,否則會(huì)發(fā)生錯(cuò)誤。
?
在一個(gè)
JOIN
表達(dá)式中,可以連結(jié)多個(gè)
ON
子句:
?
SELECT?fields?
FROM?
表
1?INNER?JOIN?
表
2?
ON?
表
1.
字段
1?
比較運(yùn)算子
?
表
2.
字段
1?AND?
ON?
表
1.
字段
2?
比較運(yùn)算子
?
表
2.
字段
2)?OR?
ON?
表
1.
字段
3?
比較運(yùn)算子
?
表
2.
字段
3)?
JOIN
表達(dá)式中,可以為巢狀式:
?
SELECT?fields?
FROM?
表
1?INNER?JOIN?
(
表
2?INNER?JOIN?[(?]
表
3?
[INNER?JOIN?[(?]?
表
x?[INNER?JOIN?...)]?
ON?
表
3.
字段
3?
比較運(yùn)算子
?
表
x.
字段
x)]?
ON?
表
2.
字段
2?
比較運(yùn)算子
?
表
3.
字段
3)?
ON?
表
1.
字段
1?
比較運(yùn)算子
?
表
2.
字段
2?
在一個(gè)
INNER?JOIN
中,可以包括巢狀式的
LEFT?JOIN
或
RIGHT?JOIN
,但是在一個(gè)
LEFT?JOIN
或
RIGHT?JOIN
中不能包括巢狀式的
INNER?JOIN
。
?
==================================================
看一下一個(gè)查詢的問題 ?
我有兩張表 ?
tab1 ?
? ? ? ?字段 ?
? ? ? ?aID ?
? ? ? ?bID ?
?
tab2 ?
? ? ? ?字段 ?
? ? ? ?aID ?
? ? ? ?bID ?
tab1中有記錄: ?
aID ? ?bID ?
as1 ? ?19 ?
as2 ? ?19 ?
as3 ? ?23 ?
as4 ? ?45 ?
tab2中有記錄: ?
aID ? ?bID ?
as2 ? ?19 ?
as3 ? ?19 ?
as4 ? ?19 ?
現(xiàn)在需要查找出兩張表中bID相等的且bID=19的記錄,應(yīng)該是5條記錄 ?
我用的方法是: ?
方法1:select ?tab1.aID,tab2.aID ?from ?tab1,tab2 ?where ?tab1.bID=tab2.bID ?and ?tab2.bID=19 ?
方法2:select ?tab1.aID,tab2.aID ?from ?tab1 ?join ?tab2 ?on ?tab1.bID=tab2.bID ?where ?tab1.bID=19 ?
上面兩中方法選出的記錄都是6條,為什么出這樣的問題,應(yīng)該怎么做呢? ?
--------------------------------------------------------------- ?
?
select ?* ?form ?tab1 ?where ?bID=19 ?
union ?all ? ?
select ?* ?form ?tab2 ?where ?bID=19 ?
?
?
--------------------------------------------------------------- ?
?
create ?table ?tab1 ?
? ? ? ?(aID ?char(10), ?
? ? ? ?bID ?char(10)) ?
go ?
?
insert ?into ?tab1(aid,bid) ?values('as1','19') ?
insert ?tab1 ?values('as2','19') ?
insert ?tab1 ?values('as3','38') ?
insert ?tab1 ?values('as4','45') ?
go ?
create ?table ?tab2 ?
? ? ? ?(aID ?char(10), ?
? ? ? ?bID ?char(10)) ?
go ?
go ?
insert ?tab2 ?values('as2','19') ?
insert ?tab2 ?values('as3','19') ?
insert ?tab2 ?values('as4','19') ?
go ?
select ?* ?from ?tab1 ?
?
select ?* ?from ?tab1 ?where ?tab1.bid='19'union ?all ?select ?* ?from ?tab2 ? ?where ?tab2.bid='19' ?
?
?
斑竹加的話: ?
1、join ?產(chǎn)生的是笛卡爾積。 ?
2、union ?會(huì)排除重復(fù)的記錄 ?
3、union ?all ?不會(huì)排除重復(fù)的記錄??
?
?
union子句
union操作符將兩個(gè)查詢結(jié)果合并為一個(gè)結(jié)果集。為連接查詢合并兩個(gè)表時(shí):列的數(shù)日和順序在查中必須一致;數(shù)據(jù)類型兼容
語法:
select
?語句
union
?
[
all
]
select
?語句
注意:
1
.union運(yùn)算從最終結(jié)果集中刪除重復(fù)記錄,如想不刪除重復(fù)記錄使用all關(guān)鍵字
2
.第一個(gè)select語句中不能用order?by或compute子句,只能是最后一個(gè)select語名后用
例:查詢計(jì)算機(jī)系的學(xué)生式年齡不大于19歲的學(xué)習(xí),按年齡倒排序
select
?
*
?
from
?department?
where
?dept
=
'
computer
'
;
union
;
?select?
*
?
from
?student?
where
?age
<=
19
order
?
by
?age?
desc
posted on 2007-03-16 17:04
有貓相伴的日子 閱讀(1176)
評(píng)論(0) 編輯 收藏 所屬分類:
pl/sql