1. 程式人生 > >第三章 關係資料庫標準語言SQL

第三章 關係資料庫標準語言SQL

SQL的特點:綜合統一 集資料定義語言(DDL),資料操縱語言(DML),資料控制語言(DCL)功能於一體。 可以獨立完成資料庫生命週期中的全部活動: 定義和修改、刪除關係模式,定義和刪除檢視,插入資料,建立資料庫;  對資料庫中的資料進行查詢和更新;  資料庫重構和維護 資料庫安全性、完整性控制,以及事務控制 嵌入式SQL和動態SQL定義 使用者資料庫投入執行後,可根據需要隨時逐步修改模式,不影響資料庫的執行。 資料操作符統一

高度非過程化:非關係資料模型的資料操縱語言“面向過程”,必須指定存取路徑。 SQL只要提出“做什麼”,無須瞭解存取路徑。  存取路徑的選擇以及SQL的操作過程由系統自動完成。

面向集合的操作方式:非關係資料模型採用面向記錄的操作方式,操作物件是一條記錄 SQL採用集合操作方式  操作物件、查詢結果可以是元組的集合  一次插入、刪除、更新操作的物件可以是元組的集合

以同一種語法結構提供多種使用方式:SQL是獨立的語言     能夠獨立地用於聯機互動的使用方式 SQL又是嵌入式語言     SQL能夠嵌入到高階語言(例如C,C++,Java)程式中,供程式設計師設計程式時使用

基本表的定義、刪除與修改:定義基本表         CREATE TABLE <表名>       (<列名> <資料型別>[ <列級完整性約束條件> ]       [,<列名> <資料型別>[ <列級完整性約束條件>] ]    …       [,<表級完整性約束條件> ] ); <表名>:所要定義的基本表的名字 <列名>:組成該表的各個屬性(列) <列級完整性約束條件>:涉及相應屬性列的完整性約束條件 <表級完整性約束條件>:涉及一個或多個屬性列的完整性約束條件 如果完整性約束條件涉及到該表的多個屬性列,則必須定義在表級上,否則既可以定義在列級也可以定義在表級。  

修改基本表:<表名>是要修改的基本表 ADD子句用於增加新列、新的列級完整性約束條件和新的表級完整性約束條件 DROP COLUMN子句用於刪除表中的列 如果指定了CASCADE短語,則自動刪除引用了該列的其他物件 如果指定了RESTRICT短語,則如果該列被其他物件引用,關係資料庫管理系統將拒絕刪除該列 DROP CONSTRAINT子句用於刪除指定的完整性約束條件 ALTER COLUMN子句用於修改原有的列定義,包括修改列名和資料型別

刪除基本表:DROP TABLE <表名>[RESTRICT| CASCADE]; RESTRICT:刪除表是有限制的。 欲刪除的基本表不能被其他表的約束所引用 如果存在依賴該表的物件,則此表不能被刪除 CASCADE:刪除該表沒有限制。 在刪除基本表的同時,相關的依賴物件一起刪除

 建立索引:語句格式 CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…); <表名>:要建索引的基本表的名字 索引:可以建立在該表的一列或多列上,各列名之間用逗號分隔 <次序>:指定索引值的排列次序,升序:ASC,降序:DESC。預設值:ASC UNIQUE:此索引的每一個索引值只對應唯一的資料記錄 CLUSTER:表示要建立的索引是聚簇索引

修改索引:ALTER INDEX <舊索引名> RENAME TO <新索引名> [例3.14] 將SC表的SCno索引名改為SCSno     ALTER INDEX SCno RENAME TO SCSno;

刪除索引:DROP INDEX <索引名>; 刪除索引時,系統會從資料字典中刪去有關該索引的 描述。

資料字典:資料字典是關係資料庫管理系統內部的一組系統表,它記錄了資料庫中所有定義資訊: 關係模式定義 檢視定義 索引定義 完整性約束定義 各類使用者對資料庫的操作許可權 統計資訊等 關係資料庫管理系統在執行SQL的資料定義語句時,實際上就是在更新資料字典表中的相應資訊。

資料查詢:語句格式        SELECT [ALL|DISTINCT] <目標列表達式>[,<目標列表達式>] …        FROM <表名或檢視名>[,<表名或檢視名> ]…|(SELECT 語句)                          [AS]<別名> [ WHERE <條件表示式> ] [ GROUP BY <列名1> [ HAVING <條件表示式> ] ] [ ORDER BY <列名2> [ ASC|DESC ] ];

SELECT子句:指定要顯示的屬性列 FROM子句:指定查詢物件(基本表或檢視) WHERE子句:指定查詢條件 GROUP BY子句:對查詢結果按指定列的值分組,該屬性列值相等的元組為一個組。通常會在每組中作用聚集函式。 HAVING短語:只有滿足指定條件的組才予以輸出 ORDER BY子句:對查詢結果表按指定列值的升序或降序排序

外連線:外連線與普通連線的區別 普通連線操作只輸出滿足連線條件的元組 外連線操作以指定表為連線主體,將主體表中不滿足連線條件的元組一併輸出  左外連線 列出左邊關係中所有的元組  右外連線 列出右邊關係中所有的元組

巢狀查詢:巢狀查詢概述 一個SELECT-FROM-WHERE語句稱為一個查詢塊 將一個查詢塊巢狀在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為巢狀查詢      SELECT Sname                               /*外層查詢/父查詢*/      FROM Student      WHERE Sno IN                         ( SELECT Sno        /*內層查詢/子查詢*/                           FROM SC                           WHERE Cno= ' 2 ');上層的查詢塊稱為外層查詢或父查詢 下層查詢塊稱為內層查詢或子查詢 SQL語言允許多層巢狀查詢 即一個子查詢中還可以巢狀其他子查詢 子查詢的限制 不能使用ORDER BY子句

插入元組:語句格式     INSERT     INTO <表名> [(<屬性列1>[,<屬性列2 >…)]     VALUES (<常量1> [,<常量2>]… ); 功能 將新元組插入指定表中  INTO子句 指定要插入資料的表名及屬性列 屬性列的順序可與表定義中的順序不一致 沒有指定屬性列:表示要插入的是一條完整的元組,且屬性列屬性與表定義中的順序一致 指定部分屬性列:插入的元組在其餘屬性列上取空值

 修改資料:語句格式    UPDATE  <表名>     SET  <列名>=<表示式>[,<列名>=<表示式>]…     [WHERE <條件>]; 功能 修改指定表中滿足WHERE子句條件的元組 SET子句給出<表示式>的值用於取代相應的屬性列 如果省略WHERE子句,表示要修改表中的所有元組

建立檢視:語句格式        CREATE  VIEW              <檢視名>  [(<列名>  [,<列名>]…)]        AS  <子查詢>        [WITH  CHECK  OPTION];

刪除檢視:語句的格式:         DROP  VIEW  <檢視名>[CASCADE]; 該語句從資料字典中刪除指定的檢視定義 如果該檢視上還匯出了其他檢視,使用CASCADE級聯刪除語句,把該檢視和由它匯出的所有檢視一起刪除 刪除基表時,由該基表匯出的所有檢視定義都必須顯式地使用DROP VIEW語句刪除