日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

SQL中的left outer join,inner join,right outer join用法

發(fā)布時(shí)間:2025/3/21 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL中的left outer join,inner join,right outer join用法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用關(guān)系代數(shù)合并數(shù)據(jù)
1 關(guān)系代數(shù)
合并數(shù)據(jù)集合的理論基礎(chǔ)是關(guān)系代數(shù),它是由E.F.Codd于1970年提出的。
在關(guān)系代數(shù)的形式化語(yǔ)言中:
?????????? 用表、或者數(shù)據(jù)集合表示關(guān)系或者實(shí)體。
?????????? 用行表示元組。
?????????? 用列表示屬性。
關(guān)系代數(shù)包含以下8個(gè)關(guān)系運(yùn)算符
?????????? 選取――返回滿足指定條件的行。
?????????? 投影――從數(shù)據(jù)集合中返回指定的列。
?????????? 笛卡爾積――是關(guān)系的乘法,它將分別來(lái)自兩個(gè)數(shù)據(jù)集合中的行以所有可能的方式進(jìn)行組合。
?????????? 并――關(guān)系的加法和減法,它可以在行的方向上合并兩個(gè)表中的數(shù)據(jù),就像把一個(gè)表壘在另一個(gè)表之上一樣。
?????????? 交――返回兩個(gè)數(shù)據(jù)集合所共有的行。
?????????? 差――返回只屬于一個(gè)數(shù)據(jù)集合的行。
?????????? 連接――在水平方向上合并兩個(gè)表,其方法是:將兩個(gè)表中在共同數(shù)據(jù)項(xiàng)上相互匹配的那些行合并起來(lái)。
?????????? 除――返回兩個(gè)數(shù)據(jù)集之間的精確匹配。
此外,作為一種實(shí)現(xiàn)現(xiàn)代關(guān)系代數(shù)運(yùn)算的方法,SQL還提供了:
?????????? 子查詢――類似于連接,但更靈活;在外部查詢中,方式可以使用表達(dá)式、列表或者數(shù)據(jù)集合的地方都可以使用子查詢的結(jié)果。
本章將主要講述多種類型的連接、簡(jiǎn)單的和相關(guān)的子查詢、幾種類型的并、關(guān)系除以及其他的內(nèi)容。
2 使用連接
2.1 連接類型
在關(guān)系代數(shù)中,連接運(yùn)算是由一個(gè)笛卡爾積運(yùn)算和一個(gè)選取運(yùn)算構(gòu)成的。首先用笛卡爾積完成對(duì)兩個(gè)數(shù)據(jù)集合的乘運(yùn)算,然后對(duì)生成的結(jié)果集合進(jìn)行選取運(yùn)算,確保只把分別來(lái)自兩個(gè)數(shù)據(jù)集合并且具有重疊部分的行合并在一起。連接的全部意義在于在水平方向上合并兩個(gè)數(shù)據(jù)集合(通常是表),并產(chǎn)生一個(gè)新的結(jié)果集合,其方法是將一個(gè)數(shù)據(jù)源中的行于另一個(gè)數(shù)據(jù)源中和它匹配的行組合成一個(gè)新元組。
SQL提供了多種類型的連接方式,它們之間的區(qū)別在于:從相互交疊的不同數(shù)據(jù)集合中選擇用于連接的行時(shí)所采用的方法不同。
連接類型????????? 定義
內(nèi)連接????????? 只連接匹配的行
左外連接????????? 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行
右外連接????????? 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行
全外連接????????? 包含左、右兩個(gè)表的全部行,不管另外一邊的表中是否存在與它們匹配的行。
(H)(theta)連接????????? 使用等值以外的條件來(lái)匹配左、右兩個(gè)表中的行
交叉連接????????? 生成笛卡爾積-它不使用任何匹配或者選取條件,而是直接將一個(gè)數(shù)據(jù)源中的每個(gè)行與另一個(gè)數(shù)據(jù)源的每個(gè)行都一一匹配
在INFORMIX中連接表的查詢
如果FROM子句指定了多于一個(gè)表引用,則查詢會(huì)連接來(lái)自多個(gè)表的行。連接條件指定各列之間(每個(gè)表至少一列)進(jìn)行連接的關(guān)系。因?yàn)檎诒容^連接條件中的列,所以它們必須具有一致的數(shù)據(jù)類型。
SELECT語(yǔ)句的FROM子句可以指定以下幾種類型的連接
FROM子句關(guān)鍵字????????? 相應(yīng)的結(jié)果集
CROSS JOIN????????? 笛卡爾乘積(所有可能的行對(duì))
INNER JOIN????????? 僅對(duì)滿足連接條件的CROSS中的列
LEFT OUTER JOIN????????? 一個(gè)表滿足條件的行,和另一個(gè)表的所有行
RIGHT OUTER JOIN????????? 與LEFT相同,但兩個(gè)表的角色互換
FULL OUTER JOIN??????? LEFT OUTER 和 RIGHT OUTER中所有行的超集

2.2 內(nèi)連接(Inner Join)
內(nèi)連接是最常見(jiàn)的一種連接,它頁(yè)被稱為普通連接,而E.FCodd最早稱之為自然連接。
下面是ANSI SQL-92標(biāo)準(zhǔn)
select *
from??? t_institution i
inner join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = "5801"
其中inner可以省略。
等價(jià)于早期的連接語(yǔ)法
select *
from t_institution i, t_teller t
where i.inst_no = t.inst_no
and i.inst_no = "5801"

2.3 外連接
2.3.1????????? 左外連接(Left Outer Jion)
select *
from??? t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
其中outer可以省略。
2.3.2????????? 右外連接(Rigt Outer Jion)
select *
from??? t_institution i
right outer join t_teller t
on i.inst_no = t.inst_no
2.3.3????????? 全外連接(Full Outer)
全外連接返回參與連接的兩個(gè)數(shù)據(jù)集合中的全部數(shù)據(jù),無(wú)論它們是否具有與之相匹配的行。在功能上,它等價(jià)于對(duì)這兩個(gè)數(shù)據(jù)集合分別進(jìn)行左外連接和右外連接,然后再使用消去重復(fù)行的并操作將上述兩個(gè)結(jié)果集合并為一個(gè)結(jié)果集。
在現(xiàn)實(shí)生活中,參照完整性約束可以減少對(duì)于全外連接的使用,一般情況下左外連接就足夠了。在數(shù)據(jù)庫(kù)中沒(méi)有利用清晰、規(guī)范的約束來(lái)防范錯(cuò)誤數(shù)據(jù)情況下,全外連接就變得非常有用了,你可以使用它來(lái)清理數(shù)據(jù)庫(kù)中的數(shù)據(jù)。
select *
from??? t_institution i
full outer join t_teller t
on i.inst_no = t.inst_no
2.3.4????????? 外連接與條件配合使用
當(dāng)在內(nèi)連接查詢中加入條件是,無(wú)論是將它加入到j(luò)oin子句,還是加入到where子句,其效果是完全一樣的,但對(duì)于外連接情況就不同了。當(dāng)把條件加入到j(luò)oin子句時(shí),SQL Server、Informix會(huì)返回外連接表的全部行,然后使用指定的條件返回第二個(gè)表的行。如果將條件放到where子句中,SQL Server將會(huì)首先進(jìn)行連接操作,然后使用where子句對(duì)連接后的行進(jìn)行篩選。下面的兩個(gè)查詢展示了條件放置位子對(duì)執(zhí)行結(jié)果的影響:
條件在join子句
select *
from??? t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
and i.inst_no = “5801”
結(jié)果是:
inst_no????? inst_name????????????? inst_no????? teller_no??? teller_name
5801???????? 天河區(qū)???????????????? 5801???????? 0001???????? tom
5801???????? 天河區(qū)???????????????? 5801???????? 0002???????? david
5802???????? 越秀區(qū)
5803???????? 白云區(qū)
條件在where子句
select *
from??? t_institution i
left outer join t_teller t
on i.inst_no = t.inst_no
where i.inst_no = “5801”
結(jié)果是:
inst_no????? inst_name????????????? inst_no????? teller_no??? teller_name
5801???????? 天河區(qū)???????????????? 5801???????? 0001???????? tom
5801???????? 天河區(qū)???????????????? 5801???????? 0002???????? david

2.4 自身連接
自身連接是指同一個(gè)表自己與自己進(jìn)行連接。這種一元連接通常用于從自反關(guān)系(也稱作遞歸關(guān)系)中抽取數(shù)據(jù)。例如人力資源數(shù)據(jù)庫(kù)中雇員與老板的關(guān)系。
下面例子是在機(jī)構(gòu)表中查找本機(jī)構(gòu)和上級(jí)機(jī)構(gòu)的信息。
select s.inst_no superior_inst, s.inst_name sup_inst_name, i.inst_no, i.inst_name
from t_institution i
join t_institution s
on i.superior_inst = s.inst_no

結(jié)果是:
superior_inst sup_inst_name????????? inst_no????? inst_name
800???????????? 廣州市???????????????? 5801???????? 天河區(qū)
800???????????? 廣州市???????????????? 5802???????? 越秀區(qū)
800???????????? 廣州市???????????????? 5803???????? 白云區(qū)

2.5 交叉(無(wú)限制) 連接
交叉連接用于對(duì)兩個(gè)源表進(jìn)行純關(guān)系代數(shù)的乘運(yùn)算。它不使用連接條件來(lái)限制結(jié)果集合,而是將分別來(lái)自兩個(gè)數(shù)據(jù)源中的行以所有可能的方式進(jìn)行組合。數(shù)據(jù)集合中一的每個(gè)行都要與數(shù)據(jù)集合二中的每一個(gè)行分別組成一個(gè)新的行。例如,如果第一個(gè)數(shù)據(jù)源中有5個(gè)行,而第二個(gè)數(shù)據(jù)源中有4個(gè)行,那么在它們之間進(jìn)行交叉連接就會(huì)產(chǎn)生20個(gè)行。人們將這種類型的結(jié)果集稱為笛卡爾乘積。
大多數(shù)交叉連接都是由于錯(cuò)誤操作而造成的;但是它們卻非常適合向數(shù)據(jù)庫(kù)中填充例子數(shù)據(jù),或者預(yù)先創(chuàng)建一些空行以便為程序執(zhí)行期間所要填充的數(shù)據(jù)保留空間。
select *
from??? t_institution i
cross join t_teller t
在交叉連接中沒(méi)有on條件子句

總結(jié)

以上是生活随笔為你收集整理的SQL中的left outer join,inner join,right outer join用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 18我禁在线观看 | 老汉av在线| 好色婷婷| 男人爆操女人 | 成人在线免费播放 | 久艹在线观看 | 蜜桃av中文字幕 | 日韩爽片| 精品无码久久久久久国产 | 黄色av高清| 国产在线免费av | 自拍偷在线精品自拍偷无码专区 | a级片在线 | 欧美黄色大片网站 | 特种兵之深入敌后高清全集免费观看 | 人人人爽| 亚洲欧美日韩专区 | 夜色一区二区 | 欧美一级夜夜爽 | 久久精品超碰 | 国产免费久久精品国产传媒 | 中文字幕欧美另类精品亚洲 | 福利片一区二区 | 天天天天 | 在线不卡日韩 | 黄色三级免费网站 | aaa国产视频| 国语对白一区二区三区 | 成人国产欧美 | 40一50一60老女人毛片 | 精品三级 | 999xxxx| 成人a视频 | 青青国产在线观看 | 免费一区二区三区 | 91桃色免费视频 | 天天操中文字幕 | 久久永久免费视频 | 在线免费不卡视频 | 人人干人人模 | 在线视频网站 | 荒岛淫众女h文小说 | 欧洲一级黄色片 | 亚州综合 | 日韩一区二区免费视频 | 在线视频你懂得 | 岛国大片在线免费观看 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 91视频毛片 | 亚洲天堂av一区二区三区 | 调教亲女小嫩苞h文小说 | 国产精品久久久久久久av | 带aaa级的网名 | wwwxxxx国产 | 日本免费一区二区在线 | av中文网站| 激情xxx| 中文字幕免费高 | 嘿咻视频在线观看 | 伊人动漫| 精品国产高清在线观看 | 亚洲a v网站 | 中文字幕免 | 人妻少妇被粗大爽9797pw | 日韩黄色网址 | 久久视奸 | 久久潮 | 亚洲天堂男人 | 国产成人一区二区三区免费看 | 伊人久久精品一区二区三区 | 国产情侣呻吟对白高潮 | 国产高清亚洲 | 精品一区二区国产 | 蜜桃传媒一区二区亚洲 | 亚洲一区电影 | 午夜大片在线观看 | 亚洲国产精品一 | 熟女俱乐部一区二区视频在线 | 91视频播放 | 国产免费又爽又色又粗视频 | 国产女女 | 欧美三级三级三级爽爽爽 | 亚洲av中文无码乱人伦在线观看 | 肥臀浪妇太爽了快点再快点 | 老司机在线精品视频 | 色性网| av新天堂| 欧美在线视频二区 | 国产精品秘入口18禁麻豆免会员 | 青青草视频偷拍 | 翔田千里88av中文字幕 | 五月天视频 | 人妻无码中文字幕 | 午夜视频国产 | 国产真人做爰毛片视频直播 | 农村妇女毛片精品久久久 | 欧美人与性动交xxⅹxx | 99久久精品日本一区二区免费 | 日产久久久久久 |