SELECT 是最常用的入門 SQL 語法,顧名思義,他是用來從資料庫選取資料,我們通常將這個選取的行為稱之為查詢 (query)。資料庫依 SELECT 查詢的要求會返回一個 結果資料表 (result table),我們通常稱之為 資料集 (result-set)

SELECT 語法

SELECT $欄位 FROM $表格;

例如

SELECT column1, column2, ...
FROM table_name;

若需要一次選取全部欄位,可以用 * 字號

SELECT * FROM table_name;

可參考 w3schools 網站

若目前 DB 有個表格叫做 Customers ,其欄位、資料如下圖

想取出如圖中 Customers 表格全部資料可以這樣下

SELECT * FROM Customers;

想要只取出 CustomerName 和 City 資料,我們可以這樣下:

SELECT CustomerName, City FROM Customers;

不同的欄位,如 CustomerName 與 City 在語法用逗號 , 分隔即可。

DISTINCT 語法

但想要取出不重複資料,該怎麼做呢?例如取出 City

SELECT City FROM Customers;

結果是拉到 90 筆資料,其中不少城市都是重複的。

若想要取出資料不重複,則可以加上 DISTINCT

SELECT DISTINCT City FROM Customers;

可以看到資料集被濾掉不少,每個城市都不重複,數量就降到 68 個囉。

WHERE 語法

WHERE 還可以讓 SELECT 做更細的條件篩選。其語法接續在 FROM 表格 後面,例如想要選 column 欄位是 City,但 City 的 value 是 "Berlin"

那 SQL 可以這樣下

SELECT * FROM Customers
WHERE City = "Berlin";

NOT

想要選 column 欄位是 City,但 City 的 value 不是
"Berlin",可以搭配 NOT

SELECT * FROM Customers
WHERE NOT City = "Berlin";

AND

想要選 column 欄位是 City,但 City 的 value 是 "Berlin",且該資料的 PostalCode 必須是 12209。

那多重條件可以用 AND 來搭配,SQL 可以這樣下

SELECT * FROM Customers
WHERE City = 'Berlin'
AND PostalCode = 12209;

OR

想要選 column 欄位是 City,而 City 的 value 可以是 "Berlin",也可以是 "London",那麼就可以用 OR 來搭配,SQL 可以這樣下

SELECT * FROM Customers
WHERE City = 'Berlin'
OR City = 'London';

AND 和 OR 差異

AND 是從拿到的資料集再去做其他更細的條件判斷,用 AND 拿到的資料集會越篩越少。
OR 和 AND 相反,OR 是放寬 SELECT 條件(拿某屬性是 A「或」某屬性是 B),用 OR 拿到的資料集會多。

COUNT

COUNT 語法可以算出目前的 count 數量,在使用上要用到括號把後面的條件包起來。
例如:

SELECT COUNT($欄名稱)
FROM $表明撐 
WHERE 查詢條件

當然也可以不用 WHERE 改用 DISTINCT 來濾掉重複內容。

例如我們可以在 w3schools 上寫

SELECT COUNT (DISTINCT City) 
FROM Customers;

就可以直接取得對應值

當然也可以一次算出表的總數量,選取全部要用 * 符號,當然括號還是少不了。

SELECT COUNT (*) FROM Customers;

有的情境是需要篩選出

SELECT FROM 我們另一個 SELECT 查詢,例如

SELECT COUNT(*) AS DistinctCountries
FROM (SELECT DISTINCT Country FROM Customers); 

LIMIT

實務上,在資料庫中經常會有成千上萬筆資料,當我們使用某一個篩選條件,且已知這個條件會挑出大量資料時,可以使用這個單元的語法 LIMIT,先選出前幾筆選項,讓運轉時間降低,快速確定語法的正確性。

LIMIT 的使用很簡單,只要在我們想限制查詢的 SQL 語法尾端加上 LIMIT $查詢數 即可。

例如:

SELECT ProductID, ProductName, Price 
  FROM Products
 LIMIT 5;

假如 table OrderDetails 有好幾千幾萬筆 row 資料,這時 SELECT * 會跑很久,我們可以用 LIMIT 限制只查詢 return 5 筆結果如下

SELECT * FROM OrderDetails
LIMIT 5;

當然也可以和 WHERE 一起用

SELECT * 
  FROM OrderDetails
 WHERE ProductID = 11
 LIMIT 5;