本文從實際具體的使用場景記錄在MySQL下SQL的使用。
一、基本功能
- 唯一清單關聯多清單展示(例子:有一張使用者表,一張使用者購買商品的訂單表;使用者表一列一個使用者不會重複,訂單表中同一個使用者可能有多個購買記錄;)問題是如何統計每個使用者購買的總金額,表結構如下: 實作:通過ID關聯兩張表,同時對訂單表的金額項求和,根據使用者ID分組。
資料庫:MySQL常用SQL查詢一、基本功能二、進階功能
SELECT a.ID,a.Name,a.Age,SUM(b.Amount) FROM tb_a AS a,tb_order As b WHERE a.ID = b.ID GROUP BY a.ID;![]()
資料庫:MySQL常用SQL查詢一、基本功能二、進階功能
-
不同資料庫之間的聯表查詢(例子:資料庫A中的a表與資料庫B中的b表關聯查詢)
實作:跟日常的聯表查詢其實差不多,唯一的差別是在表名前加上所屬資料庫。
最後聯表查詢的結果如下:資料庫:MySQL常用SQL查詢一、基本功能二、進階功能 資料庫:MySQL常用SQL查詢一、基本功能二、進階功能 - SELECT嵌套查詢;有兩種方式:
SELECT * FROM WHERE col IN (SELECT cols FROM tb);
SELECT t.* (SELECT * FROM tb) t;
資料庫:MySQL常用SQL查詢一、基本功能二、進階功能 - 使用CASE…WHEN…THEN…ELSE…END求和。
select sum(case when symbol=’-’ then -1*value else value end) AS sums from tb_d;
資料庫:MySQL常用SQL查詢一、基本功能二、進階功能 - JOIN…ON…、LEFT JOIN…ON…、RIGHT JOIN…ON…
SELECT * FROM tb_join_a JOIN tb_join_b ON tb_join_a.id = tb_join_b.id JOIN tb_join_c ON tb_join_a.id = tb_join_c.id;
SELECT * FROM tb_join_a LEFT JOIN tb_join_b ON tb_join_a.id = tb_join_b.id LEFT JOIN tb_join_c ON tb_join_b.id = tb_join_c.id;
SELECT * FROM tb_join_a RIGHT JOIN tb_join_b ON tb_join_a.id = tb_join_b.id RIGHT JOIN tb_join_c ON tb_join_b.id = tb_join_c.id;
資料庫:MySQL常用SQL查詢一、基本功能二、進階功能
二、進階功能
- 複制表結構和資料
CREATE TABLE tb_a_copy SELECT * FROM tb_a;
資料庫:MySQL常用SQL查詢一、基本功能二、進階功能 -
多表關聯合并(表中字段不完全相同)
實際工作中,我們經常遇到要把A表和B表相同字段合并,不同字段分開顯示,舉個例子如下,我們需要把這兩張表合并成一張表,合并後的表有三個字段(id, name, age)。
上面這個問題我們如何解決呢,思路應該是先分别對兩張表做LEFT JOIN和RIGHT JOIN,使其變成結構相同的兩張表,然後通過UNION把兩表合并去掉重複資料,最終的語句和效果如下:資料庫:MySQL常用SQL查詢一、基本功能二、進階功能 SELECT tb_join_a.id,tb_join_a.name,tb_join_b.age FROM tb_join_a LEFT JOIN tb_join_b ON tb_join_a.id=tb_join_b.id
UNION
SELECT tb_join_b.id,tb_join_a.name,tb_join_b.age FROM tb_join_b LEFT JOIN tb_join_a ON tb_join_a.id=tb_join_b.id;
資料庫:MySQL常用SQL查詢一、基本功能二、進階功能
【參考文獻】
1.MySQL用指令行複制表的方法