結構化查詢語言 SQL 簡介
SQL全稱是結構化查詢語言(SQL,Structured Query Language,一般唸作sequel),用於資料庫中的標準資料查詢語言,最早的是IBM公司的聖約瑟研究實驗室為其關係數據庫管理系統SYSTEM R開發的一種查詢語言,它的前身是SQUARE語言。對於SQL的標準化作業,主要是由 ANSI 與 ISO 這兩個組織所推動。
SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應用。如今無論是像Oracle、Sybase、Informix、SQL server這些大型的數據庫管理系統,還是像Visual Foxporo、PowerBuilder這些微機上常用的數據庫開發系統,都支持SQL語言作為查詢語言。
SQL 語言特點
SQL是高階的非過程化編程語言,它允許使用者在高層資料結構上工作。它不要求使用者指定對資料的存放方法,也不需要使用者了解其具體的資料存放方式。而它的介面,能使具有底層結構完全不同的資料庫系統和不同資料庫之間,使用相同的SQL作為資料的輸入與管理。
它以記錄專案〔records〕的合集(set)〔項集,record set〕作為操縱物件,所有SQL語句接受項集作為輸入,回送出的項集作為輸出,這種項集特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語句可以巢狀,這使它擁有極大的靈活性和強大的功能。
SQL語法概述
在SQL資料庫中,資料儲存於資料表 (Table) 中。資料表由行 (Column) 或稱欄位 (Field) 組成,而每個欄位有各自的資料型態。資料表中的每一列代表一筆資料,一筆資料由所有欄位值組成。
[補充] 最基本的資料庫操作 - CRUD
許多開發人員以"CRUD"作為四個資料庫標準操作的稱呼,所謂的CRUD即為
- Create 建⽴資料
- Read 讀取資料
- Update 更新資料
- Delete 刪除資料
- CREATE 建立資料庫的物件
- ALTER 變更資料庫的物件
- DROP 刪除資料庫的物件
資料操縱語言 (DML-Data Manipulation Language):用來處理資料表裡的資料,常見的指令有
- INSERT 新增資料到資料表中
- UPDATE 更改資料表中的資料
- DELETE 刪除資料表中的資料
資料查詢語言 (DQL-Data Query Language):用來查詢資料表裡的資料,指令只有一個
- SELECT 選取資料庫中的資料
資料控制語言 (DCL-Data Control Language):用來控制資料表、檢視表之存取權限,常見的指令有
- GRANT 賦予使用者使用權限
- REVOKE 取消使用者的使用權限
- COMMIT 完成交易作業
- ROLLBACK 交易作業異常,將已變動的資料回復到交易開始的狀態
References
互動百科 - SQL
http://www.baike.com/wiki/SQL
SQL教學
http://webdesign.kerthis.com/sql/
本節的 SQL 查詢語法以快速概覽的方式提供複習查找,SQL算是一個很實用且易學的語言:)
SQL查詢語法形式概覽
SELECT [* | DISTINCT | Top n] <欄位串列>
FROM (資料表名稱{<別名>} | JOIN資料表名稱)
[WHERE <條件式>]
[GROUP BY <群組欄位> ] [HAVING <群組條件>]
[ORDER BY <欄位> [ASC | DESC]]
最基礎的SQL : Select-From-Where
Select : 所要列出的欄位名稱。
- * : 表示列印出所有的欄位(欄位1,欄位2,......,欄位n)
- Distinct : 代表從資料表中選擇不重複的資料。它是利用先排序來檢查是否有重複。
- Top n : 在資料表中取出名次排序在前的n筆記錄。
From : 資料表名稱,可以接一個以上的資料表。
Where : 後面要接條件式
- 比較運算子 : = (等於)、<> (不等於)、 < (小於)、<= (小於等於)、> (大於)、>= (大於等於)
- 邏輯運算子 : And(且)、Or(或)、Not(反)
- 空值 : IS NULL(空值)、 IS NOT NULL
模糊條件與範圍
在Where條件式中除了可以設定「比較運算子」與「邏輯運算子」之外,還可以設定「模糊或範圍條件」來查詢。
1. Like 模糊相似條件 : 例如, Where 系所 LIKE '資管%'
- 萬用字元(%)百分比符號代表零個或一個以上的任意字元;
- 萬用字元( _ )底線符號代表單一個數的任意字元。
2. IN 集合條件 : 例如,Where 課程代號 IN('C001','C002')
3. Between...And... 範圍條件 : 例如, Where 成績 Between 60 And 80
使用聚合函數
在SQL中提供聚合函數來讓使用者統計資料表中數值資料的最大值、最 小值、平均值及合計值等等。其常用的聚合函數的種類如表所示
- Count(*):計算個數函數
- Count(欄位名稱):計算該欄位名稱之不具NULL值列的總數
- Avg:計算平均函數
- Sum:計算總合函數
- Max:計算最大值函數
- Min:計算最小值函數
使用排序
依照某一個欄位來進行排序。
- ORDER BY成績 Asc :小到大
- ORDER BY成績 Desc :大到小
- Top N:前N個
- Top N Percent:前N%
使用群組化
可以將某些特定欄位的值相同的記錄全部組合起來進行群組化,接著在這個群組內求出各種統計分析。
- Group By 可單獨存在,它是將數個欄位組合起來, 以做為每次動作的依據。
- [Having 條件式]是將數個欄位中加以有條件的組合。 它不可以單獨存在。
一些SQL的簡單範例
SELECT 學號, 課號, 成績 FROM 選課資料表 WHERE 成績<60 SELECT * FROM 學生資料表 WHERE 姓名 Like '[李王]*' SELECT AVG(成績) AS 資料庫平均成績 FROM 選課資料表 WHERE 課號='C005' SELECT 學號, 課號, 成績 FROM 選課資料表 ORDER BY 學號,成績 SELECT 學號, AVG(成績) AS 平均成績 FROM 選課資料表 GROUP BY 學號 HAVING AVG(成績)>=70
最後,是一些非常實用的cheat sheet~
1. Database Data Type大全
2. SQL Joins
3. 壓軸的SQL查詢語法大全!
References
交大彭文志教授資料庫概論講義
互動百科 - SQL
http://www.baike.com/wiki/SQL
SQL教學
http://webdesign.kerthis.com/sql/