搞數(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返回兩個(gè)表中聯(lián)結(jié)字段相等的所有記錄的組合。
- 它只顯示兩個(gè)表中具有匹配項(xiàng)的行。
- 如果左表中的某行在右表中找不到匹配項(xiàng),或者右表中的某行在左表中找不到匹配項(xiàng),那么這些行都不會(huì)出現(xiàn)在結(jié)果集中。
- LEFT JOIN返回左表(左邊的表)的所有記錄,以及右表中與左表相匹配的記錄。
- 如果左表中的某行在右表中沒(méi)有匹配項(xiàng),那么結(jié)果集中右表的部分將顯示為NULL。
- 左表的每一行至少會(huì)出現(xiàn)一次,即使它在右表中沒(méi)有匹配項(xiàng)。
- 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;
MySQL 直到 2024年還不直接支持 FULL OUTER JOIN 。為了達(dá)到類(lèi)似 FULL OUTER JOIN 的效果,通常需要使用 UNION 操作符來(lái)組合 LEFT JOIN 和 RIGHT 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)意圖。
|