天天看點

資料庫:MySQL常用SQL查詢一、基本功能二、進階功能

本文從實際具體的使用場景記錄在MySQL下SQL的使用。

一、基本功能

  1. 唯一清單關聯多清單展示(例子:有一張使用者表,一張使用者購買商品的訂單表;使用者表一列一個使用者不會重複,訂單表中同一個使用者可能有多個購買記錄;)問題是如何統計每個使用者購買的總金額,表結構如下:
    資料庫:MySQL常用SQL查詢一、基本功能二、進階功能
    實作:通過ID關聯兩張表,同時對訂單表的金額項求和,根據使用者ID分組。
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查詢一、基本功能二、進階功能
  1. 不同資料庫之間的聯表查詢(例子:資料庫A中的a表與資料庫B中的b表關聯查詢)

    實作:跟日常的聯表查詢其實差不多,唯一的差別是在表名前加上所屬資料庫。

    資料庫:MySQL常用SQL查詢一、基本功能二、進階功能
    最後聯表查詢的結果如下:
    資料庫:MySQL常用SQL查詢一、基本功能二、進階功能
  2. SELECT嵌套查詢;有兩種方式:

    SELECT * FROM WHERE col IN (SELECT cols FROM tb);

    SELECT t.* (SELECT * FROM tb) t;

    資料庫:MySQL常用SQL查詢一、基本功能二、進階功能
  3. 使用CASE…WHEN…THEN…ELSE…END求和。
    select sum(case when symbol=’-’ then -1*value else value end) AS sums from tb_d;
    資料庫:MySQL常用SQL查詢一、基本功能二、進階功能
  4. 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查詢一、基本功能二、進階功能

二、進階功能

  1. 複制表結構和資料
    CREATE TABLE tb_a_copy SELECT * FROM tb_a;
    資料庫:MySQL常用SQL查詢一、基本功能二、進階功能
  2. 多表關聯合并(表中字段不完全相同)

    實際工作中,我們經常遇到要把A表和B表相同字段合并,不同字段分開顯示,舉個例子如下,我們需要把這兩張表合并成一張表,合并後的表有三個字段(id, name, age)。

    資料庫:MySQL常用SQL查詢一、基本功能二、進階功能
    上面這個問題我們如何解決呢,思路應該是先分别對兩張表做LEFT JOIN和RIGHT JOIN,使其變成結構相同的兩張表,然後通過UNION把兩表合并去掉重複資料,最終的語句和效果如下:

    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用指令行複制表的方法

繼續閱讀