用來操作資料庫的語法,不管你是在 Web 應用程式的開發或是資料分析(Data Analytics)都有可能用得上。
每個資料表間可以有關聯性。市面上常見的資料庫種類有:
以下語法主要是以可以通用在各個資料庫使用。SQL 主要是以 keyword 關鍵字和資料表(table)名稱和欄位(column)名稱當作一段完整的語句。SQL 語法使用分號 ; 當作結尾,英文字母不區分大小寫,但關鍵字通常用大寫比較容易區分,單字間使用空白分隔。單行註解寫法 –,多行註解使用 /**/ 包裹。
像是 MySQL、PostgreSQL 本身是伺服器所以可以開很多個資料庫,每個資料庫裡又可以開很多個資料表,而 SQLite 本身是一個資料庫,故不能再新增資料庫。
新增資料庫:
CREATE DATABASE hello(資料庫名稱);
新增資料表語法:
從圖形化介面可對應下方 sql 語法
CREATE TABLE "資料表名稱" (
"id" INTEGER NOT NULL,
"Field2" TEXT,
"Field3" INTEGER
);
新增資料表內欄位:
ALTER TABLE 資料表名稱
ADD COLUMN super_power VARCHAR(10);
刪除資料庫語法:
DROP DATABASE hello(資料庫名稱);
刪除資料表語法:
DROP TABLE hello(資料表名稱) ;
刪除資料表內欄位:
ALTER TABLE 資料表名稱
DROP COLUMN super_power;
刪除資料表內的所有內容,資料表還在:
DELETE FROM heroes;
刪除資料表內特定資料:
DELETE FROM heroes
WHERE hero_level = "A";
等等會看到下方程式碼很多次,是查詢時必要的前綴。
SELECT 查詢欄位 FROM 資料表名稱 ;
下方這段的意思是我要 heroes 資料表的所有欄位*。
SELECT * FROM heroes ;
可配合挑件來篩選,意思是我只要 heroes 這個資料表, hero_level 這個欄位裡面的值等於 “S"的資料,並把所有的欄位顯示出來。
SELECT * FROM heroes
WHERE hero_level = "S";
可以用 AND 來新增條件
SELECT * FROM heroes
WHERE hero_level = "S"
AND gender = "F";
當我資料庫裡有大的檔案而又沒有要這個欄位時,如果全選就有可能會跑很慢,這時可以只顯示特定欄位更改如下:
SELECT name,age FROM heroes
WHERE hero_level = "S"
AND gender = "F";
當想要挑選空值時,可以用 NULL 來篩選:
SELECT name,age FROM heroes
WHERE age is NULL ;
當想要搜尋 name 欄位裡有出現背心的文字,前後方都可以有字,可以使用 like 關鍵字配合%來搜尋
SELECT * FROM heroes
WHERE name like "%背心%" ;
當要搜尋 age 欄位裡年齡範圍介在 10~25 可以使用 BETWEEN 和 AND:
SELECT * FROM heroes
WHERE age BETWEEN 10 AND 25
列出 hero_level 欄位內的值為"S"或"A”,使用 OR 與 in 的結果會一樣:
SELECT * FROM heroes
WHERE hero_level = "S" OR hero_level = "A";
SELECT * FROM heroes
WHERE hero_level in ("S","A");
不要 hero_level 欄位內的值為"S"的,可以使用!=、NOT、<>語法:
SELECT * FROM heroes
WHERE hero_level != "S";
SELECT * FROM heroes
WHERE NOT hero_level ="S";
SELECT * FROM heroes
WHERE hero_level<>"S";
挑選出 hero_level 欄位不包含"A"和"S"的資料,可將 in 與 NOT 結合:
SELECT * FROM heroes
WHERE hero_level NOT in ("S","A");
SELECT * FROM heroes
WHERE NOT hero_level in ("S","A");
本篇為基礎資料庫操作,下篇介紹如何更新資料、計算、排序與其他資料表進行關聯性。