午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

MySQL05: 表合并

 生信探索 2024-08-16 發(fā)布于云南

搞數(shù)據(jù)分析肯定是要學(xué)習(xí)下數(shù)據(jù)庫(kù)的;

縱向表合并

UNION ALL 在合并表的時(shí)候不做任何附加動(dòng)作,只是將多個(gè)表格簡(jiǎn)單的首尾相連;

UNION 合并表格的時(shí)候,除了拼接之外還會(huì)多一個(gè)附加動(dòng)作——去重(以前舊版本還有排序功能,新版本舍棄了排序功能) 去重復(fù)就會(huì)在數(shù)據(jù)量大的時(shí)候相比UNION ALL慢

注意:表的列名順序要一致

SELECT * FROM table1
UNION ALL
SELECT * FROM table2;

表連接操作

NNER JOIN、LEFT JOIN、RIGHT JOIN 類(lèi)似 tidyverse 或者 pandas

  • INNER JOIN(內(nèi)連接):
    • INNER JOIN返回兩個(gè)表中聯(lián)結(jié)字段相等的所有記錄的組合。
    • 它只顯示兩個(gè)表中具有匹配項(xiàng)的行。
    • 如果左表中的某行在右表中找不到匹配項(xiàng),或者右表中的某行在左表中找不到匹配項(xiàng),那么這些行都不會(huì)出現(xiàn)在結(jié)果集中。
  • LEFT JOIN(左連接):
    • LEFT JOIN返回左表(左邊的表)的所有記錄,以及右表中與左表相匹配的記錄。
    • 如果左表中的某行在右表中沒(méi)有匹配項(xiàng),那么結(jié)果集中右表的部分將顯示為NULL。
    • 左表的每一行至少會(huì)出現(xiàn)一次,即使它在右表中沒(méi)有匹配項(xiàng)。
  • RIGHT JOIN(右連接):
    • RIGHT JOIN與LEFT JOIN相反,它返回右表(右邊的表)的所有記錄,以及左表中與右表相匹配的記錄。
    • 如果右表中的某行在左表中沒(méi)有匹配項(xiàng),那么結(jié)果集中左表的部分將顯示為NULL。
    • 右表的每一行至少會(huì)出現(xiàn)一次,即使它在左表中沒(méi)有匹配項(xiàng)。
SELECT *
FROM table1
INNER JOIN table2
ON table1.id=table2.id;
  • FULL OUTER JOIN

MySQL 直到 2024年還不直接支持 FULL OUTER JOIN。為了達(dá)到類(lèi)似 FULL OUTER JOIN 的效果,通常需要使用 UNION 操作符來(lái)組合 LEFT JOINRIGHT JOIN 的結(jié)果

SELECT a.product_id, a.price, b.units
FROM Prices a
LEFT JOIN UnitsSold b ON a.product_id = b.product_id
UNION
SELECT a.product_id, a.price, b.units
FROM Prices a
RIGHT JOIN UnitsSold b ON a.product_id = b.product_id
WHERE a.product_id IS NULL;

在這個(gè)示例中,首先通過(guò) LEFT JOIN 獲取左表(Prices)的所有記錄,包括與右表(UnitsSold)匹配的記錄以及左表獨(dú)有的記錄(右表部分為 NULL)。

然后通過(guò) RIGHT JOIN 獲取右表的所有記錄,以及右表獨(dú)有的記錄(此時(shí)左表部分為 NULL),最后通過(guò) UNION 將兩部分結(jié)果合并,并且在第二次查詢(xún)中使用 WHERE a.product_id IS NULL 來(lái)確保只選擇那些在左表中沒(méi)有匹配項(xiàng)的行,從而模擬實(shí)現(xiàn)了 FULL OUTER JOIN 的功能 縱向表合并

ON后篩選

在使用 INNER JOIN 等進(jìn)行表關(guān)聯(lián)時(shí),可以在 ON 子句后面直接添加篩選條件,這樣做會(huì)先完成表的連接操作,然后基于指定的條件過(guò)濾出結(jié)果。這種方式能夠提高查詢(xún)效率,因?yàn)樗瓤s小了需要關(guān)聯(lián)的數(shù)據(jù)集。

下面是一個(gè)示例:

SELECT a.product_id, a.price, b.units
FROM 
Prices a
INNER JOIN UnitsSold b 
ON a.product_id = b.product_id AND b.units > 100

在這個(gè)例子中,Prices 表和 UnitsSold 表通過(guò) product_id 字段進(jìn)行內(nèi)連接。但是,除了基本的連接條件 a.product_id = b.product_id 外,還添加了一個(gè)額外的篩選條件 b.units > 100。

這意味著只有當(dāng) UnitsSold 表中的 units 值大于100時(shí),相應(yīng)的記錄才會(huì)被包含在最終結(jié)果集中。

這種方式的優(yōu)點(diǎn)是,它能夠更精確地控制哪些記錄參與連接,有助于減少不必要的數(shù)據(jù)處理,提高查詢(xún)性能。

不過(guò),需要注意的是,這樣的條件會(huì)直接影響到連接操作,確保它符合你的查詢(xún)意圖。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多