SQL語法(上)

什麼是 SQL 語法?

用來操作資料庫的語法,不管你是在 Web 應用程式的開發或是資料分析(Data Analytics)都有可能用得上。

關聯式資料庫 RDBMS

每個資料表間可以有關聯性。市面上常見的資料庫種類有:

  • Oracle
  • MSSQL
  • MySQL
  • PostgreSQL
  • SQLite

SQL(SQL92 標準) 語法

以下語法主要是以可以通用在各個資料庫使用。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");

本篇為基礎資料庫操作,下篇介紹如何更新資料、計算、排序與其他資料表進行關聯性。

SQL 語法(下)

comments powered by Disqus