SQLite語句(三):JOIN和UNION

一、JOIN

SQLite 的 Joins 子句用于結(jié)合兩個(gè)或多個(gè)數(shù)據(jù)庫中表的記錄谷誓。JOIN 是一種通過共同值來結(jié)合兩個(gè)表中字段的手段。
SQL 定義了三種主要類型的連接:

  • 交叉連接 - CROSS JOIN
  • 內(nèi)連接 - INNER JOIN
  • 外連接 - OUTER JOIN

假設(shè)有兩張表吨凑,用于后面的示例扩所。

COMPANY:


COMPANY表

DEPARTMENT:


DEPARTMENT表
交叉連接 - CROSS JOIN

交叉連接(CROSS JOIN)把第一個(gè)表的每一行與第二個(gè)表的每一行進(jìn)行匹配窝稿。如果兩個(gè)輸入表分別有 x 和 y 列,則結(jié)果表有 x+y 列。由于交叉連接(CROSS JOIN)有可能產(chǎn)生非常大的表遵绰,使用時(shí)必須謹(jǐn)慎较曼,只在適當(dāng)?shù)臅r(shí)候使用它們倾鲫。
交叉連接的含義可以用下圖表示:


CROSS JOIN

語法:

SELECT ... FROM table1 CROSS JOIN table2 ...

針對(duì)COMPANY和DEPARTMENT兩張表贝搁,執(zhí)行:

SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;

結(jié)果為:


RESULT
內(nèi)連接 - INNER JOIN

內(nèi)連接(INNER JOIN)根據(jù)連接謂詞結(jié)合兩個(gè)表(table1 和 table2)的列值來創(chuàng)建一個(gè)新的結(jié)果表。查詢會(huì)把 table1 中的每一行與 table2 中的每一行進(jìn)行比較怠堪,找到所有滿足連接謂詞的行的匹配對(duì)揽乱。當(dāng)滿足連接謂詞時(shí),A 和 B 行的每個(gè)匹配對(duì)的列值會(huì)合并成一個(gè)結(jié)果行粟矿。
內(nèi)連接如下圖所示凰棉,藍(lán)色部分表示內(nèi)連接的交集。


INNER JOIN

內(nèi)連接(INNER JOIN)是最常見的連接類型陌粹,是默認(rèn)的連接類型撒犀。INNER 關(guān)鍵字是可選的。

下面是內(nèi)連接(INNER JOIN)的語法:

SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...

為了避免冗余,并保持較短的措辭或舞,可以使用 USING 表達(dá)式聲明內(nèi)連接(INNER JOIN)條件荆姆。這個(gè)表達(dá)式指定一個(gè)或多個(gè)列的列表:

SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...

自然連接(NATURAL JOIN)類似于 JOIN...USING,只是它會(huì)自動(dòng)測試存在兩個(gè)表中的每一列的值之間相等值:

SELECT ... FROM table1 NATURAL JOIN table2...

基于上面的表映凳,我們可以寫一個(gè)內(nèi)連接(INNER JOIN)胆筒,如下所示:

SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
    ON COMPANY.ID = DEPARTMENT.EMP_ID;

結(jié)果為:


RESULT
外連接 - OUTER JOIN

外連接(OUTER JOIN)是內(nèi)連接(INNER JOIN)的擴(kuò)展。雖然 SQL 標(biāo)準(zhǔn)定義了三種類型的外連接:LEFT魏宽、RIGHT腐泻、FULL决乎,但 SQLite 只支持左外連接(LEFT OUTER JOIN)队询。

外連接(OUTER JOIN)聲明條件的方法與內(nèi)連接(INNER JOIN)是相同的,使用 ON构诚、USING 或 NATURAL 關(guān)鍵字來表達(dá)蚌斩。最初的結(jié)果表以相同的方式進(jìn)行計(jì)算。一旦主連接計(jì)算完成范嘱,外連接(OUTER JOIN)將從一個(gè)或兩個(gè)表中任何未連接的行合并進(jìn)來送膳,外連接的列使用 NULL 值,將它們附加到結(jié)果表中丑蛤。
以下圖說明了LEFT JOIN執(zhí)行后的結(jié)果集(黃色部分)叠聋。


LEFT JOIN

下面是左外連接(LEFT OUTER JOIN)的語法:

SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...

為了避免冗余,并保持較短的措辭受裹,可以使用 USING 表達(dá)式聲明外連接(OUTER JOIN)條件碌补。這個(gè)表達(dá)式指定一個(gè)或多個(gè)列的列表:

SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ...

寫一個(gè)外連接(OUTER JOIN),如下所示:

SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;

上面的查詢會(huì)產(chǎn)生以下結(jié)果:


RESULT

二棉饶、UNION

UNION 子句/運(yùn)算符用于將兩個(gè)或者更多的 SELECT 語句的運(yùn)算結(jié)果組合起來厦章。

在使用 UNION 的時(shí)候,每個(gè) SELECT 語句必須有相同數(shù)量的選中列照藻、相同數(shù)量的列表達(dá)式袜啃、相同的數(shù)據(jù)類型,并且它們出現(xiàn)的次序要一致幸缕,不過長度不一定要相同群发。
語法:

SELECT column1 [, column2 ]
    FROM table1 [, table2 ]
    [WHERE condition]

    UNION

    SELECT column1 [, column2 ]
    FROM table1 [, table2 ]
    [WHERE condition]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市发乔,隨后出現(xiàn)的幾起案子熟妓,更是在濱河造成了極大的恐慌,老刑警劉巖列疗,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滑蚯,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)告材,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門坤次,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斥赋,你說我怎么就攤上這事缰猴。” “怎么了疤剑?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵滑绒,是天一觀的道長。 經(jīng)常有香客問我隘膘,道長疑故,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任弯菊,我火速辦了婚禮纵势,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘管钳。我一直安慰自己钦铁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布才漆。 她就那樣靜靜地躺著牛曹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪醇滥。 梳的紋絲不亂的頭發(fā)上黎比,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音腺办,去河邊找鬼焰手。 笑死,一個(gè)胖子當(dāng)著我的面吹牛怀喉,可吹牛的內(nèi)容都是我干的书妻。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼躬拢,長吁一口氣:“原來是場噩夢啊……” “哼躲履!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起聊闯,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤工猜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后菱蔬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篷帅,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡史侣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了魏身。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惊橱。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖箭昵,靈堂內(nèi)的尸體忽然破棺而出税朴,到底是詐尸還是另有隱情,我是刑警寧澤家制,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布正林,位于F島的核電站,受9級(jí)特大地震影響颤殴,放射性物質(zhì)發(fā)生泄漏觅廓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一诅病、第九天 我趴在偏房一處隱蔽的房頂上張望哪亿。 院中可真熱鬧,春花似錦贤笆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钝吮,卻和暖如春埋涧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奇瘦。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工棘催, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耳标。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓醇坝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親次坡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呼猪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容