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;