SQL | SQL 語法基礎篇 (1)

更新 發佈閱讀 10 分鐘

為了上次的 AWS 部署囫圇吞棗地把 MySQL 給裝到腦海裡,但總歸根基不穩,所以現在要來還債了,好好地再複習一下 SQL 語法並做紀錄。

在這裡先推兩個網站,非常適合練習 SQL 操作:

  1. MySQL Online
  2. SQLZoo



建立資料庫

CREATE DATABASE myDatabase
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

上述 SQL 程式碼的意義如下:

  1. 建立資料庫,關鍵字是 CREATE
  2. 設定字元集。
  3. 定序,即決定了字元該如何被排序。



建立資料表

CREATE TABLE [table_name](
[column1_name] [data_type] [not_null] [default],
[column2_name] [data_type] [not_null] [default],
[column3_name] [data_type] [not_null] [default],
PRIMARY KEY ([column_name])
);

簡單來說,建立一個資料表,必須要規範:

  1. 欄位名稱。
  2. 資料型態。
  3. 必填與否。
  4. 預設值。
  5. 哪個欄位要做為主鍵。

現在,讓我們在 MySQL Online 上建立一個飲料資料表 (可以偷偷用 Online SQL Generator 來產生 code~):

CREATE TABLE `drinks` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`price` int(11) unsigned NOT NULL,
`cost` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
);

解釋一下,int 指的是存入整數,varchar 是存入字母、數字、特殊符號等文本數據,unsigned 是指只能存入非負整數,NOT NULL 表示必填。



SQL 的 CRUD

有了資料庫和資料表,接下來該練練資料操作了,來看看 SQL 的 CRUD 怎麼運作。

新增資料

INSERT INTO `drinks` (`name`, `price`, `cost`)
VALUES ('阿華田', 65, 20),
('百香紅茶', 45, 10),
('四季春茶', 25, 5),
('愛玉冰茶', 50, 7),
('冰咖啡', 70, 30);

新增資料會用到INSERT INTO指定要新增資料的資料表及欄位,並透過VALUES賦值。

現在先新增五筆飲料資料,包含名稱、價格、成本到我們的飲料資料表中。

查詢資料

SELECT * FROM `drinks`;

查詢資料是用SELECT撈資料。現在可以看到如下圖,顯示出我們剛剛新增的飲料資料。

vocus|新世代的創作平台

修改資料

UPDATE `drinks`
SET `price` = 90
WHERE `name` = '冰咖啡';

假設今天我們要修改冰咖啡的價格,我們就會需要用到UPDATE來更新資料,並透過WHERE來限制指令的作用對象。

SELECT再查詢一次,現在我們看到冰咖啡價格從70變90了:

vocus|新世代的創作平台

刪除資料

DELETE FROM `drinks`
WHERE `name` = '阿華田';

使用DELETE的方法叫做硬刪除,是真的直接把資料從資料表中抹去,所以比較重要的資料會使用軟刪除,但軟刪除這裡就不介紹了。

現在可以看到阿華田已經從資料表上消失了:

vocus|新世代的創作平台

進入下一段前

先來建立更多資料表與資料吧!

客人資料:

CREATE TABLE `customers` (
`id` INT unsigned NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL,
`phone` VARCHAR(20) NOT NULL,
`birth` DATE NOT NULL,
PRIMARY KEY (`id`)
);

INSERT INTO `customers`(`name`, `phone`, `birth`)
VALUES ('Johny', '0980123123', '1997-04-22'),
('Wendy', '0919456456', '1999-07-07');

SELECT * FROM `customers`;

點單資料:

CREATE TABLE `orders` (
`id` INT unsigned NOT NULL AUTO_INCREMENT,
`drinks_id` INT(11) unsigned NOT NULL,
`customers_id` INT(11) unsigned NOT NULL,
`amounts` INT(11) unsigned NOT NULL,
`create_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);

INSERT INTO `orders`(`drinks_id`, `customers_id`, `amounts`)
VALUES (1, 2, 4),
(2, 2, 3),
(3, 2, 9),
(3, 1, 2);

SELECT * FROM `orders`;



SQL 運算子

運算子有哪些?

  1. 計算運算子:+, -, *, /, %
  2. 比較運算子:=, <> (不等於), >, <, >=, <=
  3. 邏輯運算子: AND, OR, BETWEEN, LIKE

運算子實戰

假設現在飲料店要因應活動,全體品項要打8折,第一個直覺應該是用UPDATE把價格全部改掉:

UPDATE `drinks`
SET `price` = `price` * 0.8;
vocus|新世代的創作平台

但是!周年慶後還要改回來很麻煩,所以最好的選擇是多創一個欄位來記錄折扣價格:

SELECT `name`, `price`, (`price` * 0.8) AS `discount_price`
FROM `drinks`;
vocus|新世代的創作平台

運算子實戰 - 條件限制

今天老闆說,只有單價30以上的才可以打8折,我們又該如何做呢?這時就要請出前面提過的WHERE配合運算子啦:

SELECT `name`, `price`, (`price` * 0.8) AS `discount_price`
FROM `drinks`
WHERE `price` >= 30;
vocus|新世代的創作平台

然後今天老闆很摳,他說50以上不打折,想多賺一點,那我們可以這樣寫:

// 寫法1
SELECT `name`, `price`, (`price` * 0.8) AS `discount_price`
FROM `drinks`
WHERE `price` >= 30 AND `price` <= 50;

// 寫法2
SELECT `name`, `price`, (`price` * 0.8) AS `discount_price`
FROM `drinks`
WHERE `price` BETWEEN 30 AND 50;
vocus|新世代的創作平台

運算子實戰 - 關鍵字搜尋

老闆很煩,他後來決定名字帶 "茶" 的飲料才打8折,這時我們就一樣請出WHERE來配合LIKE運算子來打組合技啦:

SELECT `name`, `price`, (`price` * 0.8) AS `discount_price`
FROM `drinks`
WHERE `name` LIKE '%茶%';
vocus|新世代的創作平台

%茶%表示要找前面有任意字元的茶和後面有任意字元的茶。同理,我們要找以茶開頭的飲料可以寫茶%



SQL 內建的函式

SQL 有一些內建的函式可以幫忙我們快速做資料處理。

SUM

回到剛剛創建的 orders 資料表,忙完一天的工作老闆問說:我們今天一共賣了幾杯飲料?這時聰明的我們可以立馬對資料表做下列操作:

SELECT SUM(`amounts`) AS `total_sold`
FROM `orders`;

你很快地得到今天賣了18杯:

vocus|新世代的創作平台

AVG

當我們正得意洋洋地報告給老闆我們的結果後,老闆幽幽地說:所以一單平均賣幾杯?還是一樣從明的我們想到用AVG來解決老闆的問題:

SELECT AVG(`amounts`) AS `average_sold`
FROM `orders`;

很快,我們知道一單平均賣4.5杯:

vocus|新世代的創作平台

GROUP BY

現在我們大概知道老闆接下來要問:每個飲料品項總共賣多少杯?所以我們乾脆先算好給他:

SELECT `drinks_id`, SUM(`amounts`) as total_sold
FROM `orders`
GROUP BY `drinks_id`;
vocus|新世代的創作平台

COUNT

老闆很讚嘆,我們竟然會搶答了!但是他說他要問的不是這個,他想問的是今天各種飲料項目的熱門程度,這時我們默默掏出COUNT來幫忙統計資料的出現次數:

SELECT `drinks_id`, COUNT(`amounts`) as num_of_orders
FROM `orders`
GROUP BY `drinks_id`;

現在我們知道 drinks_id = 3 的飲料最熱門,有兩單的資料都有它:

vocus|新世代的創作平台

HAVING

最後老闆說,他想知道銷售量超過10的的飲料項目,聰明的我們直覺要用WHERE,可是突然靈光一閃,儲存總量的 total_sold 欄位是用函式建的,WHERE無法篩選誒...還好我們有HAVING

SELECT `drinks_id`, SUM(`amounts`) as total_sold
FROM `orders`
GROUP BY `drinks_id`
HAVING `total_sold` > 10;

然後我們愉快地跟老闆說:超過10的只有 drinks_id = 3 的飲料喔!然後帥氣下班,留下呆滯的老闆:

vocus|新世代的創作平台



好了,夜已深,退朝!明天來寫 SQL JOIN~

留言
avatar-img
Jeremy Ho的沙龍
20會員
37內容數
這個專題用來存放我在學習網頁開發時的心得及知識。
Jeremy Ho的沙龍的其他內容
2023/12/03
從 leetcode 學資料結構堆疊 (stack)
Thumbnail
2023/12/03
從 leetcode 學資料結構堆疊 (stack)
Thumbnail
2023/10/04
SQL語法:JOIN 與交易
Thumbnail
2023/10/04
SQL語法:JOIN 與交易
Thumbnail
2023/09/27
MySQL 應用到 URL Shortener 上
Thumbnail
2023/09/27
MySQL 應用到 URL Shortener 上
Thumbnail
看更多
你可能也想看
Thumbnail
我自己是使用微軟的SQLIT軟體 這個軟體的操作上 沒有辦法直接用滑鼠點選或是拖拉的方式來看到你想看到的表格 都是要下指令的像是要看data.sqlite中的user這個table我就必須下 才能把table調閱出來看 那做為一個python三年工作經驗的工程師通常我不會直接在SQLIT軟體 裡面下
Thumbnail
我自己是使用微軟的SQLIT軟體 這個軟體的操作上 沒有辦法直接用滑鼠點選或是拖拉的方式來看到你想看到的表格 都是要下指令的像是要看data.sqlite中的user這個table我就必須下 才能把table調閱出來看 那做為一個python三年工作經驗的工程師通常我不會直接在SQLIT軟體 裡面下
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
Thumbnail
在這一課中,我們將學習如何在Python中使用sqlite3模塊進行基本的資料庫操作。 創建資料庫和表 首先,我們需要創建一個資料庫和一個表。
Thumbnail
在這一課中,我們將學習如何在Python中使用sqlite3模塊進行基本的資料庫操作。 創建資料庫和表 首先,我們需要創建一個資料庫和一個表。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
在SQL Server中,暫存表(Temporary Table)是一種在連線會話期間存在的臨時表格,它可以用來暫存中間結果或臨時資料。本文將介紹如何使用T-SQL語法在SQL Server中建立暫存表。
Thumbnail
在SQL Server中,暫存表(Temporary Table)是一種在連線會話期間存在的臨時表格,它可以用來暫存中間結果或臨時資料。本文將介紹如何使用T-SQL語法在SQL Server中建立暫存表。
Thumbnail
步驟三:公文類別設定 接下來,我們需要建立一個可參照的公文類別資料表,作為選擇公文類別的來源,具體的SQL如下...
Thumbnail
步驟三:公文類別設定 接下來,我們需要建立一個可參照的公文類別資料表,作為選擇公文類別的來源,具體的SQL如下...
Thumbnail
SQL 基本篇 - CRUD、運算子、內建函式
Thumbnail
SQL 基本篇 - CRUD、運算子、內建函式
Thumbnail
種類 SQL指令分三大部分: 資料定義語言(Data Definition Language,DDL):建立資料表、索引和檢視表等,和定義資料表的欄位。 資料操作語言(Data Manipulation Language,DML):資料表紀錄查詢、插入、刪除和更新指令。 資料控制語言(Dat
Thumbnail
種類 SQL指令分三大部分: 資料定義語言(Data Definition Language,DDL):建立資料表、索引和檢視表等,和定義資料表的欄位。 資料操作語言(Data Manipulation Language,DML):資料表紀錄查詢、插入、刪除和更新指令。 資料控制語言(Dat
Thumbnail
在Visual Studio裡有內建的SQL幫助我們存資料,SQL指的是資料庫,那麼我們就用註冊會員這個例子來看一下怎麼使用內建的SQL吧~ 最後面有寫非常基本的SQL相關語法可以做參考 Step 1:建立資料庫
Thumbnail
在Visual Studio裡有內建的SQL幫助我們存資料,SQL指的是資料庫,那麼我們就用註冊會員這個例子來看一下怎麼使用內建的SQL吧~ 最後面有寫非常基本的SQL相關語法可以做參考 Step 1:建立資料庫
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News