2016年6月18日 星期六

Session 2:從Table擷取資料 (1)

SELECT陳述式被使用來從資料表中擷取資料



SELECT columns
  FROM tables
  [JOIN joins]
  [WHERE search_condition]
  [GROUP BY grouping_columns]
  [HAVING search_condition]
  [ORDER BY sort_columns];

SQL執行順序

查詢工具

  • 在還沒有自己的測試資料庫的情況下,可以在這裡進行練習SQL語法
  • 如果已經有可以測試的資料庫,可以使用DB對應的工具查詢,
    • 像是Oracle的sqlPlus、mysql的command line,這些工具只能使用在該資料庫。
    • 也可以用第三方廠商開發的套裝軟體,比較知名的有Toad,針對不同種類的資料庫推出IDE工具,功能相當強悍,只是有的要$$。
    • 如果要一套工具通吃各種DB,這邊推薦可以使用dbeaver,跨平台跟資料庫,重點還免費。

SELECT ... FROM ...

  • 在SQL Statment中SELECT與FROM是必要的組合,其他的子句則視需要來添加組合。
  • 當要查詢所有的欄位時,可以使用*來表示,如下所示
SELECT * FROM tables
  • 只要查詢某些特定欄位時,則需指定欄位名稱,如下所示
SELECT column_name1, column_name2 FROM tables

使用AS來建立欄位別名

  • 當原本的欄位名稱太長、太短、覺得礙眼不喜歡或是任何原因想要在查詢中變更名稱時,可以使用AS關鍵字來為欄位取別名
  • 別名的制訂沒有強硬的規定,只是當別名包含了空白、特殊字元、標點符號或等於關鍵字時,需要用單引號或是雙引號將別名括起來。如果沒有上述的情況時,則可以不用特別使用單/雙引號。
  • 在SQL中宣告別名AS並不是必要的,而是可以使用空白來代替,但是為了讓SQL更好閱讀,還是建議養成加上AS的好習慣。
SELECT CustomerName AS "Customer Name",
       City AS city,
       Address,
       PostalCode postal_code
  FROM Customers;


使用DISTINCT來消除重複的資料

  • 欄位中有重複的資料是很常見的情況,這時可以使用DISTINCT來消除重複的資料。
SELECT country FROM Customers;

SELECT DISTINCT country FROM Customers;

  • 這裡要注意的是,DISTINCT只能消除所有查詢欄位的值都是相同的情況,當有任一個欄位不同時,是無法生效的。
SELECT DISTINCT Country, City, Address FROM customers

使用ORDER BY來做排序

  • 可以使用ORDER BY來為查詢結果作順序的排列。
SELECT columns
  FROM table
ORDER BY sort_column1 [ASC|DESC] [,sort_column2 [ASC|DESC]]
  • sort_column不一定要出現在columns中。
  • ASC為遞增排序,DESC為遞減排序,若沒有特別指定時,則預設為ASC
  • 可以同時以多個欄位來進行排序,排序的方法會以欄位的順序來決定,如範例會先以sort_column1進行排序後,接著在根據sort_column2排序。

SELECT City, Address 
  FROM customers
 WHERE CITY IN ('Buenos Aires','London')
ORDER BY City, Address



沒有留言: