DISTINCT
DISTINCT常與SELECT連用,如:SELECT DISTINCT。用於返回唯一且不同的值。
語法:
SELECT DISTINCT 列名稱 FROM 表名稱
現有account表:
id | name | money |
---|---|---|
1 | aaa | 1000 |
2 | bbb | 1000 |
3 | ccc | 1000 |
4 | ccc | 1000 |
SELECT DISTINCT name FROM account
結果:
name |
---|
aaa |
bbb |
ccc |
ORDER BY
ORDER BY 語句用於對結果集進行排序。
語法:
SELECT 列1,列2 FROM 表 ORDER BY 列1
IN
IN 操作符允許我們在 WHERE 子句中規定多個值。
語法:
SELECT 列1,列2
FROM table_name
WHERE 列1 IN (value1,value2,…)
JOIN
JOIN等同於INNER JOIN,即內連接。用於根據兩個或多個表中的列之間的關係,從這些表中查詢數據。說白了就是拼接兩個表。
語法:
SELECT * FROM 表1 JOIN 表2 ON 表1的某個屬性 = 表2的某個屬性
student表:
id | name | class_id |
---|---|---|
1 | sam | 1 |
2 | jack | 1 |
3 | paul | 2 |
4 | louis | 2 |
5 | thomas | 4 |
6 | stevie | 3 |
class表:
id | name |
---|---|
1 | 一班 |
2 | 二班 |
3 | 三班 |
SELECT * FROM student JOIN class ON student.class_id = class.id
執行結果爲:
可以注意到只有5條記錄,不滿足ON條件的會直接過濾掉。相當於
SELECT * FROM student,class WHERE student.class_id = class.id
LEFT JOIN
左外連接,不滿足ON條件的會保留左邊那張表的數據,右邊表數據直接顯示NULL(左邊的數據會全盤保留)。
SELECT * FROM student LEFT JOIN class ON student.class_id = class.id
結果如下:
可以看到,Thomas的班級id和name爲空,因爲是左連接,即使不滿足ON條件,左表得以保留。
UNION
UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。
SELECT name FROM student
UNION
SELECT name FROM class;
結果爲:
GROUP BY
與一些統計函數結合對結果集進行分組
ORDER表如下:
id | customer | order_price |
---|---|---|
1 | sam | 1000 |
2 | bush | 700 |
3 | bush | 2700 |
4 | sam | 2100 |
5 | kat | 500 |
6 | sam | 1400 |
7 | kat | 1100 |
8 | bush | 200 |
執行如下SQL語句:
SELECT customer,SUM(order_price)
FROM order
GROUP BY customer;
結果爲:
HAVING
在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函數一起使用。現在,我們希望查找訂單總金額大於 2000 的客戶。
SQL 語句如下:
SELECT customer,SUM(order_price)
FROM order
GROUP BY customer
HAVING SUM(order_price)>2000;
注意GROUP BY要在HAVING前面,因爲HAVING是在最後結果集中處理。結果如下: