一、SQL概述
1.特點
結構化查詢語言(Structured Query Language,SQL)是關係數據庫的標準語言,也是一個通用的、功能極強的關係數據庫語言。其功能不僅僅是查詢,而是包括數據庫模式創建、數據庫數據的插入與修改、數據庫安全性完整性定義與控制等一系列功能。
SQL集數據查詢(data query)、數據操縱(data manipulation)、數據定義(data definition)和數據控制(data control)功能於一體,其主要特點:
1)綜合統一:數據庫系統的主要功能是通過數據庫支持的數據語言來實現的。語言風格統一。
2)高度非過程化:用SQL進行數據操作時, 只要提出“做什麼” , 而無須指明“怎麼做” , 因此無須瞭解存取路徑。
存取路徑的選擇以及SQL的操作過程由系統自動完成。大大減輕了用戶負擔,且有利於提高數據獨立性。
3)面向集合的操作方式:都是針對集合操作。
4)以同一種語法結構提供多種使用方式:SQL既是獨立的語言, 又是嵌入式語言。
5)語言簡潔,易學易用。
2.模式結構
支持SQL的關係數據庫管理系統同樣支持關係數據庫三級模式結構。其中外模式包括若干視圖(view)和部分基本表(base table),模式包括若干基本表,內模式包括若干存儲文件(stored file)。
用戶可以用SQL對基本表和視圖進行查詢或其他操作, 基本表和視圖一樣, 都是關係。
基本表是本身獨立存在的表, 在關係數據庫管理系統中一個關係就對應一個基本表。一個或多個基本表對應一個存儲文件, 一個表可以帶若干索引, 索引也存放在存儲文件中。
存儲文件的邏輯結構組成了關係數據庫的內模式。 存儲文件的物理結構對最終用戶是隱蔽的。
視圖是從一個或幾個基本表導出的表。 它本身不獨立存儲在數據庫中, 即數據庫中只存放視圖的定義而不存放視圖對應的數據。 這些數據仍存放在導出視圖的基本表中, 因此視圖是一個虛表。 視圖在概念上與基本表等同, 用戶可以在視圖上再定義視圖。
二、學生—課程數據庫
以學生-課程數據庫爲例來學習SQL的數據定義、 數據操縱、 數據查詢和數據控制語句。
1.數據庫
首先要定義一個學生-課程模式S-T。
學生-課程數據庫中包括以下三個表:
學生表: Student(Sno,Sname,Ssex,Sage,Sdept)
課程表: Course(Cno,Cname,Cpno,Ccredit)
學生選課表: SC(Sno,Cno.Grade)
2.數據定義
SQL的數據定義功能包括模式定義、 表定義、 視圖和索引的定義:
模式定義:CREATE SCHEMA<模式名> AUTHORIZATION <用戶名〉;
模式刪除:DROP SCHEMA 模式名xCASCADE | RESTRICT>; 其中CASCADE和RESTRICT兩者必選其一。選擇了 CASCADE (級聯),表示在刪除模 式的同時把該模式中所有的數據庫對象全部刪除;選擇了 RESTRICT (限制),表示如果該模式中已經定義了下屬的數據庫對象(如表、視圖等),則拒絕該刪除語句的執行。
基本表定義:建立一個“課程”表Course
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY, /*列級完整性約束條件,Cno是主碼*/
Cname CHAR(40) NOT NULL, /*列級完整性約束條件,Cname不能取空值*/
Cpno CHAR(4), /* Cpno的含義是先修課*/
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES SC(Cno) /*表級完整性約束條件,Cpno是外碼,被參照表是SC,被參照列是Cno */
);
涉及的數據類型:
每一個基本表都屬於某一個模式,一個模式包含多個基本表。
數據字典是關係數據庫管理系統內部的一組系統表。關係數據庫管理系統在執行SQL的數據定義語句時, 實際上就是在更新數據字典表中的相應信息。 在進行查詢優化和查詢處理時, 數據字典中的信息是其重要依據。
3.數據查詢
1)基本使用
數據查詢是數據庫的核心操作。 SQL提供了 SELECT語句進行數據查詢, 該語句具有靈活的使用方式和豐富的功能。
如查詢計算機科學系全體學生的名單: SELECT Sname FROM Student WHERE Sdept=‘CS’;
根據WHERE子句的條件表達式,從FROM子句指定的基本表、 視圖或派生表中,找出滿足條件的元組。
2)聚集函數
如果指定DISTINCT短語,則表示在計算時要取消指定列中的重複值。 如果不指定DISTINCT短語或指定ALL短語(ALL爲默認值) , 則表示不取消重複值。
如查詢學生總人數:SELECT COUNT(*) FROM Student;
4.數據更新
數據更新操作有三種: 向表中添加若干行數據、 修改表中的數據和刪除表中的若干行數據。
1)INSERT:如將學生張成民的信息插入到Student表中:INSERT into Student VALUES('201215126','張成民','男',18, 'CS');
2)UPDATE:如將學生201215121的年齡改爲22歲:UPDATE Student SET Sage=22 WHERE Sno='201215121'
3)DELETE:如刪除學號爲201215128的學生記錄:DELETE FROM Student WHERE Sno='201215128';
三、視圖
視圖是從一個或幾個基本表(或視圖) 導出的表。 它與基本表不同, 是一個虛表。 數據庫中只存放視圖的定義, 而不存放視圖對應的數據, 這些數據仍存放在原來的基本表中。所以一旦基本表中的數據發生變化, 從視圖中查詢出的數據也就隨之改變了。 從這個意義上講, 視圖就像一個窗口, 透過它可以看到數據庫中自己感興趣的數據及其變化。
視圖一經定義, 就可以和基本表一樣被查詢、 被刪除。 也可以在一個視圖之上再定義新的視圖, 但對視圖的更新(增、 刪、 改) 操作則有一定的限制。
作用:
1)視圖能夠簡化用戶的操作:簡單清晰看數據,不用管具體的語句、存儲結構等
2)視圖使用戶能以多種角度看待同一數據
3)視圖對重構數據庫提供了一定程度的邏輯獨立性:數據庫重造,用戶程序不受影響。
4)視圖能夠對機密數據提供安全保護:重要的數據不用出現在視圖上。