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

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

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。


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

 

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

 

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

avatar-img
0會員
14內容數
有軟體開發相關文章。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿棋的沙龍 的其他內容
在當今的軟體開發與資料管理中,資料庫是不可或缺的一部分。無論是 MySQL、PostgreSQL、Oracle 還是 SQL Server,這些都是常見的關聯式資料庫系統,幫助我們管理結構化資料。今天,我們將深入探討 資料庫正規化 的概念,並了解如何利用它來提升資料庫的效能與可維護性。
在當今的軟體開發與資料管理中,資料庫是不可或缺的一部分。無論是 MySQL、PostgreSQL、Oracle 還是 SQL Server,這些都是常見的關聯式資料庫系統,幫助我們管理結構化資料。今天,我們將深入探討 資料庫正規化 的概念,並了解如何利用它來提升資料庫的效能與可維護性。
你可能也想看
Google News 追蹤
Thumbnail
投資新手大多從身邊市場開始著手,選擇台股市場入門,單筆投資或台股定期定額投資,隨著經驗累積,進入美股市場也是好選擇,這篇文章帶你前進美股投資,證券開戶選擇國內券商複委託,使用美股定期定額投資,並以國泰 CUBE App為例說明。 內容目錄: 1.一站式開戶:以國泰世華 CUBE App 為例
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
Thumbnail
※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
Thumbnail
※ 何時該使用 JOIN? JOIN 使用的時機是:當你需要同時查詢一張以上的資料表的時候。 ※ SQL有哪些TABLE JOIN的方式? INNER JOIN LEFT JOIN RIGHT JOIN SELF JOIN ※ 使用 JOIN 的時候,我們需要考慮到: 我要使用哪一種
Thumbnail
※ GROUP BY 用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。 ※ 語法 SELECT column1, column2, ..., aggregate_function(column) FROM
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
※ 關聯式資料庫(RDBMS)是什麼? 關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。這些表格包括行和列,彼此之間存在明確的關聯性。 ※ 關聯式資料庫(RDBMS)有兩個重要元素: 關聯(Relational): 關聯式資料庫
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
這邊統整了所有過去發表過關於 QUERY 函式的教學分享,希望可以方便你按照順序閱讀和練習。 QUERY 可以用來查詢、篩選、聚集、排序資料,還可以做張簡易的資料透視表,是我在 Google 試算表上做數據分析、製作報告、製作儀表板時最常用的函式之一,既方便又好用,誠心推薦!
Thumbnail
※ 資料庫與 SQL ※ 題目: 請寫出 SQL 讀取 people table 中所有 gender 是 M 而且 age 大於 18 的資料。 ※ 解答: SELECT * FROM people WHERE gender = 'M' AND a
Thumbnail
投資新手大多從身邊市場開始著手,選擇台股市場入門,單筆投資或台股定期定額投資,隨著經驗累積,進入美股市場也是好選擇,這篇文章帶你前進美股投資,證券開戶選擇國內券商複委託,使用美股定期定額投資,並以國泰 CUBE App為例說明。 內容目錄: 1.一站式開戶:以國泰世華 CUBE App 為例
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
Thumbnail
※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
Thumbnail
※ 何時該使用 JOIN? JOIN 使用的時機是:當你需要同時查詢一張以上的資料表的時候。 ※ SQL有哪些TABLE JOIN的方式? INNER JOIN LEFT JOIN RIGHT JOIN SELF JOIN ※ 使用 JOIN 的時候,我們需要考慮到: 我要使用哪一種
Thumbnail
※ GROUP BY 用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。 ※ 語法 SELECT column1, column2, ..., aggregate_function(column) FROM
Thumbnail
※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
Thumbnail
※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
Thumbnail
※ 關聯式資料庫(RDBMS)是什麼? 關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。這些表格包括行和列,彼此之間存在明確的關聯性。 ※ 關聯式資料庫(RDBMS)有兩個重要元素: 關聯(Relational): 關聯式資料庫
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
這邊統整了所有過去發表過關於 QUERY 函式的教學分享,希望可以方便你按照順序閱讀和練習。 QUERY 可以用來查詢、篩選、聚集、排序資料,還可以做張簡易的資料透視表,是我在 Google 試算表上做數據分析、製作報告、製作儀表板時最常用的函式之一,既方便又好用,誠心推薦!
Thumbnail
※ 資料庫與 SQL ※ 題目: 請寫出 SQL 讀取 people table 中所有 gender 是 M 而且 age 大於 18 的資料。 ※ 解答: SELECT * FROM people WHERE gender = 'M' AND a