更新於 2024/12/09閱讀時間約 12 分鐘

完整的 SQL 教學與練習(從創建資料表到進階查詢)

SQL(Structured Query Language,結構化查詢語言)是與資料庫互動的基礎語言,廣泛應用於各種資料庫管理系統,如 MySQL、PostgreSQL 和 SQL Server。在本篇文章中,將介紹 SQL 的基本語法,並通過多個實際練習案例,學習掌握從資料表創建到高階查詢的技能喔。


一、SQL 基本語法

1. 創建資料表

資料表是資料庫的基本結構,透過 SQL 可以輕鬆創建資料表。以下是創建一個學校資料表的 SQL 範例:

CREATE TABLE schools (
id INT AUTO_INCREMENT, -- 自動增長的 id 字段,作為主鍵
name VARCHAR(100), -- 學校名稱
address VARCHAR(100), -- 學校地址
PRIMARY KEY (id) -- 設置 id 為主鍵
);

2. 新增資料

當資料表創建完成後,可以使用 INSERT INTO 語句將資料新增到資料表中:

-- 新增一筆學校資料
INSERT INTO schools (name, address) VALUES ('大學一', '一市一區');
-- 新增另一筆學校資料
INSERT INTO schools (name, address) VALUES ('大學二', '二市二區');

3. 查詢資料

要查看資料表中的資料,可以使用 SELECT 語句:

-- 查詢所有學校的資料
SELECT * FROM schools;


二、SQL 練習範例:學生資料管理

假設你正在為一所學校設計資料庫,以下將展示如何管理學生資料。

1. 創建學生資料表

學生資料表需要儲存學生的姓名、電話、年級、班級、地址等信息,SQL 如下:

CREATE TABLE students (
id INT AUTO_INCREMENT, -- 自動增長的 id 字段
name VARCHAR(50) NOT NULL, -- 學生姓名,必填
phone VARCHAR(20) DEFAULT '沒有電話' NOT NULL, -- 電話欄位,若沒有電話則預設為 '沒有電話'
grade VARCHAR(5), -- 年級
class VARCHAR(5), -- 班級
address VARCHAR(100), -- 地址
id_number VARCHAR(10), -- 身分證字號
PRIMARY KEY (id) -- 設置 id 為主鍵
);

2. 新增學生資料

我們可以透過 INSERT INTO 將學生資料加入資料表中:

-- 新增學生資料
INSERT INTO students(name, grade, class, address, id_number) VALUES ('學生一', '三', '一班', '一市', 'A122222222');
INSERT INTO students(name, phone, grade, class, address, id_number) VALUES ('學生二', '0921111111', '一', '二班', '二縣', 'B222222222');
INSERT INTO students(name, phone, grade, class, address, id_number) VALUES ('學生三', '0931111111', '二', '三班', '三市', 'C132222222');

3. 查詢學生資料

要查詢資料表中的所有學生資料,可以使用以下語句:

-- 查詢所有學生資料
SELECT * FROM students;

4. 精準搜尋

如果你只想查詢 id 等於 2 的學生資料,可以使用 WHERE 子句:

-- 查詢 id 為 2 的學生資料
SELECT * FROM students WHERE id = 2;

5. 模糊搜尋

假設你想查找地址中包含「一」字的學生資料,可以使用 LIKE 進行模糊查詢:

-- 查詢地址中有「一」字的學生資料
SELECT * FROM students WHERE address LIKE '%一%';

6. 排序資料

你可以使用 ORDER BY 來對查詢結果進行排序,ASC 表示升序,DESC 表示降序:

-- 依照學生的 id 降序排序
SELECT * FROM students ORDER BY id DESC;

7. 更新資料

如果你需要修改某筆資料,可以使用 UPDATE 語句:

-- 更新 id 為 1 的學生的名字為 David
UPDATE students SET name = '學生四' WHERE id = 1;

8. 刪除資料

若某筆資料不再需要,可以使用 DELETE 刪除它:

-- 刪除 id 為 3 的學生資料
DELETE FROM students WHERE id = 3;


三、SQL 練習:書店資料管理

接下來,我們將進行一個書店資料庫管理的練習喔。

1. 創建書籍資料表

書店資料表需要記錄書籍的書名、作者、出版社、價格等信息:

CREATE TABLE books (
id INT AUTO_INCREMENT,
name VARCHAR(50), -- 書名
author VARCHAR(50), -- 作者
company VARCHAR(50), -- 出版社
address VARCHAR(50), -- 出版社地址
price SMALLINT, -- 價格
publication DATE, -- 出版日期
PRIMARY KEY(id) -- 設置 id 為主鍵
);

2. 新增書籍資料

我們可以使用 INSERT INTO 將書籍資料新增到資料表中:

-- 新增三本書籍
INSERT INTO books(name, author, company, price, publication) VALUES ('書本一', '作者一', '出版社一', 150, '2024-01-01');
INSERT INTO books(name, author, company, price, publication) VALUES ('書本二', '作者二', '出版社二', 450, '2023-01-02');
INSERT INTO books(name, author, company, price, publication) VALUES ('書本三', '作者三', '出版社三', 310, '2022-01-03');

3. 查詢價格小於 300 的書籍

假設你要查詢所有價格低於 300 的書籍,可以使用 WHERE 子句:

-- 查詢價格小於 300 的書籍
SELECT * FROM books WHERE price < 300;

4. 刪除書籍資料

如果有書籍賣出後不再販售,可以刪除資料:

-- 刪除 id 為 1 的書籍
DELETE FROM books WHERE id = 1;

5. 更新書籍資料

如果書籍的資料需要更正,可以使用 UPDATE

-- 更新 id 為 3 的書籍的書名與出版日期
UPDATE books SET name = '書本四', publication = '2024-01-04' WHERE id = 3;

6. 查詢作者名中包含「一」字的書籍

假設某客戶記得書名的作者中包含「一」字,可以使用 LIKE 進行查詢:

-- 查詢作者名中包含「一」字的書籍
SELECT * FROM books WHERE author LIKE '%一%';

7. 依價格排序書籍

你可以使用 ORDER BY 來將書籍按價格排序:

-- 按價格從高到低排序
SELECT * FROM books ORDER BY price DESC;


四、進階 SQL:使用 JOIN 結合多表查詢

如果你有多個資料表,並且需要從中查詢相關資料,可以使用 JOIN 來結合資料表。例如,我們可以創建兩個資料表:books(書籍)和 companys(出版社)。

1. 創建兩個資料表並插入資料

CREATE TABLE companys (
id INT AUTO_INCREMENT,
name VARCHAR(50),
address VARCHAR(50),
PRIMARY KEY(id)
);

INSERT INTO companys(name, address) VALUES ('出版社四', '四市');
INSERT INTO companys(name, address) VALUES ('出版社五', '五市');

2. 使用 JOIN 查詢書籍和出版社的資料

你可以使用 JOIN 將兩個資料表結合,並查詢書籍和出版社的信息:

-- 使用 JOIN 查詢書籍與出版社的資料
SELECT books.*, companys.name AS company_name, companys.address
FROM books
JOIN companys
ON books.company_id = companys.id;


結語

掌握 SQL 語法是資料庫管理的基礎,無論是進行資料表的創建、資料的新增、查詢還是更新,都能透過 SQL 精準高效地完成。隨著你深入學習,還可以進行更複雜的查詢和操作,例如多表查詢、資料聚合和索引優化等。接下來會介紹Laravel和PHP。


對於這類的撰寫方式習慣嗎?歡迎多多進行良性的知識交流喔!目前是在學習階段,大家有不同看法的話歡迎進行良性的知識交流!

 

大家可以考慮多多分享文章和考慮訂閱沙龍方案或贊助等喔!不過請注意不要違反著作權等行為。當然決定權都在於您,不會干涉您的任何決定。

 

提醒,文章僅供正當的知識參考,文章不負任何責任。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.