CodeGym /課程 /SQL SELF /SELECT 基本語法:查詢結構與組件

SELECT 基本語法:查詢結構與組件

SQL SELF
等級 1 , 課堂 4
開放

好啦,我們已經開始搞懂 SELECT 這個 SQL 指令了,它就是用來從資料表(或多個表)裡面撈資料的。你可以把它想像成資料庫的 F5 鍵:「給我看看你有什麼」。最簡單的查詢長這樣:


        SELECT 欄位1, 欄位2, … 欄位N
        FROM 資料表
        

這裡:

  • SELECT — 查詢一定要從這個關鍵字開始。
  • 欄位1, 欄位2, ... — 這是你想要拿到的欄位清單。
  • FROM 資料表 — 指定你要從哪個表拿資料。

我們馬上來拆解一下,順便舉例!

SELECT 指令的基本結構

全部欄位都選出來。如果你想看 所有資料,可以用 星號 *。比如我們有個 students 資料表:

id name age grade
1 Alex 17 A
2 Maria 19 B
3 Otto 21 C

要把這個表的所有資料撈出來,就寫:


        SELECT * FROM students
        

結果就會是這樣的欄位跟資料:

id name age grade
1 Alex 17 A
2 Maria 19 B
3 Otto 21 C

也就是說——整個表都給你看啦。

只選特定欄位

當然啦,通常你只想要你需要的欄位,不然資料太多很煩。比如你只想知道學生的 名字年齡,那查詢就要這樣寫:


        SELECT name, age FROM students
        

查詢結果會是這樣:

name age
Alex 17
Maria 19
Otto 21

有沒有發現差別?只選你要的欄位,查詢又快又乾淨。

查詢執行順序

SQL 查詢有點陰險:雖然我們寫 SELECT 在最前面,其實資料庫會先處理 FROM,然後才回傳結果。底層流程大概是這樣:

  1. 先處理 FROM 的資料表:server 會找到你指定的表。
  2. 有條件的話先篩選資料列:只留下符合條件的資料。
  3. 選出你指定的欄位:從剩下的資料列撈出你要的資料。

所以像這個指令:


        SELECT name FROM students
        

server 會先找到 students 這個表,再讀 name 欄位,最後才把結果丟給你。

實戰範例

範例 1:學生清單。

假設你是大學管理員,要拿到所有學生的名字。查詢:

SELECT name
FROM students;

結果:

name
Alex
Maria
Otto

範例 2:加上年齡和 id。

現在你要 id、名字和年齡。只要多加幾個欄位:

SELECT name, age, id
FROM students;

結果:

name age id
Alex 17 1
Maria 19 2
Otto 21 3

範例 3:加上運算式。

假設你想知道學生距離成年還差幾歲。

那你就把 age 換成 21-age。這裡我們假設 21 歲才算成年:

SELECT name, 21-age
FROM students;

結果會是這樣:

name 21-age
Alex 4
Maria 2
Otto 0

更多運算式的用法之後還會講。現在來看看你可能遇到的錯誤。

SELECT 常見的錯誤

表名或欄位拼錯。

最常見的錯誤之一,就是表名或欄位名打錯。

如果資料庫裡沒有 studentsz 這個表,你會看到錯誤:

SELECT name
FROM studentsz; -- 錯誤:沒有這個表!

或是欄位叫 name,你卻寫 student_name,一樣錯:

SELECT student_name -- 錯誤:沒有這個欄位!
FROM students;

解法很簡單:一定要檢查表名跟欄位名。

查詢語法錯誤。

還有一個常見錯誤——忘記欄位之間要加逗號:

SELECT name age id -- 錯誤:少了逗號!
FROM students; 

但不用太緊張。SELECT 查詢只會撈資料,不會動到你的資料庫。這種錯誤 不會害你的資料壞掉。不過等我們學到會改資料的指令時,錯誤就會比較嚴重了。

* 取代指定欄位。

你用 * 就是把所有資料都撈出來,連你不需要的也會有。這樣查詢會慢,資料表很大時更麻煩。記得只選你真的要的欄位就好。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION