SQL學(xué)習(xí)筆記(一)—— join & union

序言

? ? ? MySQL中查詢功能是不可缺少的,而且在查詢過程中會使用各種join方式得到我們想要的數(shù)據(jù)饱亮,因此join的靈活應(yīng)用是不可或缺的瘩欺。當(dāng)然辰如,所有的連接都是忠實(shí)于我們的數(shù)據(jù)處理目的,SQL各種功能語句的應(yīng)用就是我們達(dá)成目的的工具责循,系統(tǒng)性雖不強(qiáng)糟港,但積累應(yīng)用是重中之重


JOIN 各種連接


join的各種連接方式

1.左連接 left (outer) join

關(guān)鍵字會從左表那里返回所有的行,即使在右表中沒有匹配的行


left join(1)

select?*?from?table A?left?join?table B on?table A.Key=table B.Key

left join(2)

select * from table A left join table B on table A.Key=table B.Key where table B.Key is null

??:

從不訂購的客戶題目分析

從不訂購的客戶

題目來源:https://leetcode-cn.com/problems/customers-who-never-order/

解題思路:

為了得到從不訂購的客戶院仿,說明Customers表中的客戶Id沒有出現(xiàn)在Orders表的CustomerId中

以Customers作為左表秸抚,Orders作為與之連接的表速和,Orders中的CustomersId對應(yīng)Customers表中的Id,且Orders中的CustomersId全部都在Customers表的Id中剥汤,且個數(shù)小于等于Customers表中的Id數(shù)颠放。通過左連接得到4個字段,分別對應(yīng)Customers表中的Id吭敢,Name 和Orders表中的Id碰凶,CustomersId。沒有訂購的客戶連接之后對應(yīng)Orders的字段列Id和CustomersId是查詢不到的鹿驼,因此會顯示 null欲低,完整的語句如下:

select?Name?Customers

from?Customers?c?left?outer?join?Orders?o

on?c.Id=o.CustomerId?

where?o.Id?is?null

2.右連接 right (outer) join

right join 關(guān)鍵字會從右表里返回所有的行,即使在左表中沒有對應(yīng)匹配的行


right join (1)

select * from table A right join table B on table A.Key=table B.Key


right join (2)

select * from table A right join table B on table A.Key=table B.Key where table A.Key is null

基于上面未訂購用戶的例子畜晰,使用右連接方式做題砾莱,稍微修改一下順序即可

select?Name?Customers? ? ? ? ? ? ? ? ? ? ? ? ? ? 不變??????????select?Name?Customers

from?Customers?c?left?outer?join?Orders?o 改成??? ??????from?Orders?o left?outer?join??Customers?c

on?c.Id=o.CustomerId?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?不變??????????on?c.Id=o.CustomerId?

where?o.Id?is?null? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不變??????????where?o.Id?is?null?

????????????左連接? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 右連接? ? ? ? ? ? ? ? ? ? ??


3. inner join 內(nèi)連接(兩個集合的交集)


inner join

select * from table A inner join table B on table A.Key=table B.Key

(類似Excel中的VLOOKUP函數(shù))

4.full join

SQL FULL JOIN結(jié)合的左,右外連接的結(jié)果舷蟀,連接表將包含的所有記錄來自兩個表恤磷,并使用NULL值作為兩側(cè)缺失匹配結(jié)果,MySQL中沒有此功能野宜,可以用union 代替


full join (1)

select * from table A full join table B where table A.Key=table B.Key

full join (2)

select *? from table A full join table B where table A.Key=table B.Key where table B.Key is null or table A.Key is null

MySQL union all替代方式

select?* col_name from?table A?left?join?table B on?table A.Key=table B.Key

union?

select *? from table A right join table B on table A.Key=table B.Key

ps: union 使用注意事項(xiàng)扫步,之前這塊寫錯了,使用了union all匈子,union all是不去重的河胎,但是采用左連接和右連接兩個集合整體交集部分多加了一次,需要去重所以應(yīng)使用union

5.cross join

CROSE JOIN返回兩張表的笛卡爾積虎敦,也就是不指定結(jié)合規(guī)則游岳,讓兩表中的元素直接兩兩組合

??:table A? ? ? ? ? ? ? ?table B? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?select * from table A cross join table B (cross join 可省略用“,”代替)

? ? ? ? c1? ? ? ? ? ? ? ? ? ? ? ? c2-----> c1? ? ? ? ? ? c2

? ? ? ? 1? ? ? ? ? ? ? ? ? ? ? ? ? ?4? ? ? ? ? ? 1? ? ? ? ? ? 4

? ? ? ? 2? ? ? ? ? ? ? ? ? ? ? ? ? ?5? ? ? ? ? ? 1? ? ? ? ? ? 5

? ? ? ? 3? ? ? ? ? ? ? ? ? ? ? ? ? ?6? ? ? ? ? ? 1? ? ? ? ? ? 6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2? ? ? ? ? ? 4

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2? ? ? ? ? ? 5

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2? ? ? ? ? ? 6

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3? ? ? ? ? ? 4

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3? ? ? ? ? ? 5

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3? ? ? ? ? ? 6



union?

union查詢必須滿足的條件

1)兩個查詢返回的數(shù)據(jù)列數(shù)必須相同

2)? 兩個select語句對應(yīng)列返回的數(shù)據(jù)類型必須相同(至少兼容)

union & union all 區(qū)別

union上下兩張表有重復(fù)的記錄時(shí),union會對整體結(jié)果進(jìn)行去重? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? union all則展示所有結(jié)果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末其徙,一起剝皮案震驚了整個濱河市胚迫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唾那,老刑警劉巖访锻,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異闹获,居然都是意外死亡期犬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門避诽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來龟虎,“玉大人,你說我怎么就攤上這事沙庐±鹜祝” “怎么了佳吞?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長旭斥。 經(jīng)常有香客問我容达,道長,這世上最難降的妖魔是什么垂券? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任花盐,我火速辦了婚禮,結(jié)果婚禮上菇爪,老公的妹妹穿的比我還像新娘算芯。我一直安慰自己,他們只是感情好凳宙,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布熙揍。 她就那樣靜靜地躺著,像睡著了一般氏涩。 火紅的嫁衣襯著肌膚如雪届囚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天是尖,我揣著相機(jī)與錄音意系,去河邊找鬼。 笑死饺汹,一個胖子當(dāng)著我的面吹牛蛔添,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兜辞,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼迎瞧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逸吵?” 一聲冷哼從身側(cè)響起凶硅,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扫皱,沒想到半個月后咏尝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啸罢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胎食。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扰才。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖厕怜,靈堂內(nèi)的尸體忽然破棺而出衩匣,到底是詐尸還是另有隱情蕾总,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布琅捏,位于F島的核電站生百,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏柄延。R本人自食惡果不足惜蚀浆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搜吧。 院中可真熱鬧市俊,春花似錦、人聲如沸滤奈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜒程。三九已至绅你,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昭躺,已是汗流浹背忌锯。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窍仰,地道東北人汉规。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像驹吮,于是被迫代替她去往敵國和親针史。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351