前言
在上回我們手動對資料庫填充了一些基礎資料:[Day8] SQL server手動寫入資料 - SQL Server資料庫入門
在這回中我們要利用建立好的資料庫來練習查詢語法。
目前表中資料
先看一下資料庫中的資料:
customers 顧客

products 產品

orders 出貨單

order_details 出貨單明細

SQL SELECT 語法實踐
select為資料庫查詢的語法,被用來選取資料表中的資料。
當語法執行後,資料會被儲存在一個結果表(result table),即結果集(result-set)。
1.選擇表中的部分欄位
1 | SELECT column1, column2, ... |
實作:查詢orders中的編號、寄送日、寄送地址
1 | Select number,shipping_date,shipping_address from orders |
結果:

2.選擇表中的全部欄位
1 | SELECT * FROM table_name; |
實作:查詢orders中所有欄位
1 | Select * from orders |
結果:

SQL SELECT DISTINCT 語法實踐
被用來取得非重複列的集合。
1 | SELECT DISTINCT column1, column2, ... |
實作:查詢order_details的order_number,並回傳非重複的列
1 | Select DISTINCT order_number from order_details |
結果:
實作:查詢order_details的order_number、id,並回傳非重複的列
1 | Select DISTINCT id,order_number from order_details |
結果:
會發現跟上面的只搜尋order_number多增加一列,因為id與order_number這樣視為一列
SQL WHERE 語法
用可來限制Select的條件、過濾資料。
可使用的限制條件:
Operator | Description |
---|---|
= | Equal |
> | Greater than |
< | Less than |
>= | Greater than or equal |
<= | Less than or equal |
<> | Not equal. Note: In some versions of SQL this operator may be written as != |
BETWEEN | Between a certain range |
LIKE | Search for a pattern |
IN | To specify multiple possible values for a column |
語法:
1 | SELECT column1, column2, ... |
實作:查詢order_details,並且限制單價為10000的資料
1 | Select * from order_details where price = '10000' |
結果:
實作:查詢order_details,並且限制產品編號為P001、P002的結果
1 | Select * from order_details where product_number IN ('P001','P002') |
結果:
SQL AND, OR and NOT 語法
在使用where時,我們可以用AND、 OR、 NOT去組合我們理想的條件。
AND:組合多個條件,全為TURE回傳
1 | SELECT column1, column2, ... |
OR:組合多個條件,符合其中一個條件都算在資料集中,最後回傳。
1 | SELECT column1, column2, ... |
NOT:想排除某條件
1 | SELECT column1, column2, ... |
實作:查詢order_details,並且限制amount為2或total為30000的結果
1 | Select * from order_details where amount = '2' or total = '30000' |
結果:
實作:查詢order_details,並且限制amount為2或total為30000,且id不為2的結果
1 | Select * from order_details where amount = '2' or total = '30000' and NOT id = '2' |
結果:
SQL ORDER BY 語法
可用來排序Select結果表的結果集合,透過欄位可以遞增、遞減。
1 | SELECT column1, column2, ... |
實作:查詢order_details,並把id遞減排序
1 | Select * from order_details order by id desc |
結果:
SQL TOP 語法
取得前幾筆資料,在MSSQL中則是用TOP;MYSQL用LIMIT,似乎每個DB都有不同的標準。
1 | SELECT TOP number|percent column_name(s) |
實作:查詢order_details,前一筆資料
1 | Select TOP 1 * from order_details |
結果:
SQL NULL Values 語法
可以用來篩選欄位是否為空值(未填充)。
為空:
1 | SELECT column_names |
不為空:
1 | SELECT column_names |
實作:查詢order_details,remarks不為空的結果
1 | Select * from order_details where remark IS NOT NULL |
結果:
小結
在這回中大量練習了表單的查詢,發現其實還蠻單純的,並不會特別難或什麼。
在下回中會開始練習跨表的搜尋JOIN。
參考資料
https://ithelp.ithome.com.tw/articles/10214938
https://www.w3schools.com/sql/sql_select.asp
https://www.w3schools.com/sql/sql_where.asp