2015年9月5日 星期六

結構化查詢語言 SQL 簡介

 

小小實習生似乎會常用到資料庫相關的知識,把以前的離線筆記整理上來做一個預習^^

結構化查詢語言 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即為
  1. Create 建⽴資料
  2. Read 讀取資料
  3. Update 更新資料
  4. Delete 刪除資料



SQL語言包含四個部分:

資料定義語言 (DDL-Data Definition Language):用來定義資料庫、資料表、檢視表、索引、預存程序、觸發程序、函數等資料庫物件。常見的指令有
  • 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/






技術提供:Blogger.