| 課程106:MySQL:SQL 基本語法 |
摘要:
在這個課程中,我們將介紹基本的 SQL 語法。這些 SQL 語法包含了:SELECT、INSERT、UPDATE、DELETE等。我們使用這些語法對資料庫執行:查詢、新增、更新、以及刪除等工作。這些工作幾乎含括了資料庫大部分的資料查詢作業,所以,身為網站應用程式開發者,學會這些基本語法,是必備的技能。在這個課程中,我們專注於學習這些基本的
SQL 語法,在 mysql 的環境中,使用這些語法。在之後的課程,我們會將所學習到的 SQL 技能,整合在 PHP 的程式之中。 |
SELECT
|
說明:
SELECT 句型,是用來對資料庫作查詢之用。資料庫在執行 SELECT 命令之後,會傳回查詢的結果。以下分別介紹各種 SELECT
句型的用法:
- 基本句型
- 使用萬用字元
- 使用 WHERE 子句,作為過濾查詢的條件。
- 使用 ORDER BY 子句,來定義排序的欄位,以及排序的方式。
- 使用 LIMIT 子句,設定查詢結果的範圍。
|
| 一、基本句型 |
句型:
| SELECT 欄位 1, 欄位 2, ...,欄位N FROM 資料表 |
說明:
- 上面的句型,表示選取資料表中所有紀錄,並按照:欄位 1, 欄位 2, ...,欄位N的方式,分欄位排列查詢的資料。
- 每個欄位以逗號區隔。
- 句型中的 SELECT 和 FROM 都是 SQL 的保留字。
- SQL 語法,除了資料表名稱及欄位名稱之外,並不區隔字母的大小寫。所以,你也可以寫成:Select
欄位 1, 欄位 2, ...,欄位N from 資料表。
|
| 實作: |
- 使用 PUTTY 連線,進入資料庫伺服主機。
- 在主機系統的命令提示下,輸入:mysql -p。
- 輸入密碼。
- 在 mysql 提示下,輸入:use 你的資料庫名稱,如:use lib13; 再按 Enter 鍵。選用你的資料庫。
- 在 mysql 提示下,輸入:
SELECT id, name, email, post_time FROM Guestbook;
- 按 Enter 鍵,執行 SQL 命令。觀察查詢所得的結果。
- 練習:試著更改 SELECT 命令句中欄位的部分,執行 SQL 命令,再觀察查詢所得的結果。如果,不知道 Guestbook
資料表中有哪些欄位的話,可以使用 describe Guestbook; 或 show columns from Guestbook;
的命令句,顯示 Guestbook資料表各欄位的定義。
|
| 二、萬用字元 |
句型:
說明:
- 星號 * ,代表所有欄位。
- 如果需要顯示所有欄位時,一一輸入欄位名稱的方式,不但麻煩,而且容易因為輸入錯誤,而產生問題。所以,使用星號可以簡化我們撰寫
SELECT 命令的工作。
|
| 實作: |
- 在 mysql 提示下輸入:
SELECT * FROM Guestbook;
- 按 Enter 鍵,執行 SQL 命令。
|
| 三、WHERE 子句 |
句型:
| SELECT 欄位 FROM 資料表 WHERE 條件 |
說明:
- WHERE子句,用來定義查詢所要過濾的條件。
- 只有符合 WHERE 子句條件的紀錄,才會被選取。
- 條件的內容,通常是以欄位來比對某特定的值。要特別注意的是,如果,被比對的值,其資料型態不是數值時,前後必須使用單引號框住。
- 以下是常用的比較運算子:
| 運算子 |
意義 |
| = |
等於 |
| != 或 <> |
不等於 |
| > |
大於 |
| >= |
大於等於 |
| < |
小於 |
| <= |
小於等於 |
| LIKE |
字串的樣式比對。可用%萬用字元。 |
- WHERE子句中的條件,可以用 AND、OR、NOT等邏輯運算子,來組合成更複雜的查詢條件。
- 條件中的欄位,不一定要出現在 SELECT 的欄位中。
|
| 實作: |
- 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id=3;
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id!=3;
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id>3;
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id>=3;
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id<3;
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id<=3;
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id>2 AND fk_icon=2;
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE id=1 OR id=4;
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT id, name FROM Guestbook WHERE email like 'au%';
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT id, name, email FROM Guestbook WHERE email like '%e%';
- 按 Enter 鍵,執行 SQL 命令。
|
| 四、ORDER BY 子句 |
句型:
| SELECT 欄位 FROM 資料表 [WHERE 子句] ORDER BY
欄位 [排序方式] |
說明:
- 上面的句型中,[] 表示選用,不可以打入在 SQL 命令中,只是用來在這裡,說明句型的結構之用而已。
- ORDER BY 後面必須接欄位,表示使用這個欄位來排序。
- 排序方式有兩種:昇冪 (ASC),和降冪(DESC)。
- 如果未指定排序方式時,預設是昇冪的排序。
- 欄位可以用資料表的欄位名稱,使用欄位名稱時,這個欄位不一定要出現在 SELECT 所列出來的欄位中。
- 欄位也可以用數字來表示。這個數字是 SELECT 所列出來的欄位順序,起始值為 1。
|
| 實作: |
- 在 mysql 提示下輸入:
SELECT id, name, email FROM Guestbook ORDER BY fk_icon DESC;
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT id, name, email FROM Guestbook ORDER BY 2 DESC;
- 按 Enter 鍵,執行 SQL 命令。
|
| 五、LIMIT 子句 |
句型:
| SELECT 欄位 FROM 資料表 [WHERE 子句] [ORDER BY
子句] LIMIT [起始值, ] 紀錄筆數 |
說明:
- LIMIT 是用來限定傳回的紀錄筆數。
- 可以選用起始值,來指定從哪一筆記錄開始啟算。
- 查詢結果中第一筆紀錄的起始值為 0,以下依此類推。
- 這個功能在需要分頁顯示查詢資料時,特別有用。
|
| 實作: |
- 在 mysql 提示下輸入:
SELECT id, name, email FROM Guestbook LIMIT 3;
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT id, name, email FROM Guestbook LIMIT 1, 3;
- 按 Enter 鍵,執行 SQL 命令。
|
INSERT
|
說明:
INSERT 句型,是用來新增資料到資料表的命令。以下分別說明 INSERT的各種用法:
- 新增單筆資料(不指定欄位)。
- 新增單筆資料(指定欄位)。
- 新增多筆資料。
|
| 一、新增單筆資料(不指定欄位) |
句型:
| INSERT INTO 資料表 VALUES(值1, 值2, ..., 值N) |
說明:
- 執行這個句型的命令,會新增一筆資料到資料表。
- VALUES 括號中所列示的值的數目,必須與資料表中的欄位數相同。每個值以逗號分開。
- VALUES 括號中的值,其順序與資料型態,必須與資料表欄位的順序與資料型態相符。
- 非數值的欄位,其新增的值,前後必須以單引號框住。
|
| 實作: |
- 在 mysql 提示下輸入:
INSERT INTO Guestbook VALUES(10, 'george', 'george@igt.com.tw',
'www.test.com', 'hello there', NOW(), 2);
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT * FROM Guestbook;
- 按 Enter 鍵,執行 SQL 命令。並觀察新增資料的結果。
|
| 二、新增單筆資料(指定欄位) |
句型:
| INSERT INTO 資料表(欄位1, 欄位2, ...,欄位N) VALUES(值1,
值2, ..., 值N) |
說明:
- 資料表後面的括弧中的欄位列表,必須與 VALUES裡面的值列表,數目、順序、與資料型態配合。
- 資料表後面的括弧,不需要列示資料表中的所有欄位,順序也不需要和資料表本身的欄位相同。
- 資料表欄位的定義中,如果是 NOT NULL,非自動增量,又沒有設定預設值,同時又沒有定義 Default預設值的話,在新增時,一定要把這個欄位列示出來。
|
| 實作: |
- 在 mysql 提示下輸入:
INSERT INTO Guestbook (name, fk_icon)VALUES('mary', 3);
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT * FROM Guestbook;
- 按 Enter 鍵,執行 SQL 命令。並觀察新增資料的結果。
|
| 三、新增多筆資料 |
句型:
| INSERT INTO 資料表[欄位列表] VALUES(值列表), (值列表)... |
說明:
- 要新增多筆欄位時,在VALUES之後,每筆資料的值列表,前後以括號框住,並以逗號作區隔。
|
| 實作: |
- 在 mysql 提示下輸入:
INSERT INTO Guestbook (name, fk_icon)VALUES('jay', 2), ('jolin',
1);
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT * FROM Guestbook;
- 按 Enter 鍵,執行 SQL 命令。並觀察新增資料的結果。
|
UPDATE
|
說明:
UPDATE 句型,是用來更新資料的命令。以下是 UPDATE的用法:
- 更新所有資料。
- 更新特定資料。
|
| 一、更新所有資料 |
句型:
| UPDATE 資料表 SET 欄位1= 值1, 欄位2=值2, 欄位3=值3 |
說明:
- 執行這個句型的命令,會更新資料表中所有的紀錄。
- 使用 UPDATE 更新資料時,一定要指定所要更新的欄位以及更新的值。
- 如果更新的欄位超過一個時,每組欄位=值,必須以逗號區隔。
|
| 實作: |
- 在 mysql 提示下輸入:
UPDATE Guestbook SET fk_icon=2, web='www.twisu.com.tw';
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT * FROM Guestbook;
- 按 Enter 鍵,執行 SQL 命令。並觀察新增資料的結果。
|
| 二、更新特定資料 |
句型:
| UPDATE 資料表 SET 欄位1= 值1, 欄位2=值2, 欄位3=值3
WHERE 條件 |
說明:
- 要更新特定資料時,可以在後面加上 WHERE條件子句,來限定要更改的紀錄。
|
| 實作: |
- 在 mysql 提示下輸入:
UPDATE Guestbook SET email=Concat(name, '@twisu.com.tw') WHERE
id > 9;
- 按 Enter 鍵,執行 SQL 命令。
- 在 mysql 提示下輸入:
SELECT * FROM Guestbook;
- 按 Enter 鍵,執行 SQL 命令。並觀察新增資料的結果。
|
DELETE
|
說明:
DELETE 句型,是用來刪除資料的命令。以下是 DELETE的用法:
- 刪除所有資料。
- 刪除特定資料。
|
| 一、刪除所有資料 |
句型:
說明:
- 執行這個句型的命令,會刪除資料表中所有的紀錄。
|
| 實作: |
| 我們的資料,以後還要用,所以,在這裡就不實作了。切記,除非你真的要刪除所有的紀錄,否則,除非有備份,不然要挽救這些資料,就很麻煩了。 |
| 二、刪除特定資料 |
句型:
說明:
- 要刪除特定資料時,可以在後面加上 WHERE條件子句,來限定要刪除的紀錄。
|
| 實作: |
- 在 mysql 提示下輸入:
DELETE FROM Guestbook WHERE id = 2;
- 按 Enter 鍵,執行 SQL 命令。
|