1.簡述SQL語言的特點
- 綜合統一。SQL語言集數據定義語句(DDL)、數據操縱語言(DML)和數據控制語言(DCL)的功能於一體。
- 高度非過程化。用SQL語言進行數據操作,只要提出“做什么”,而無須指明“怎么做”,因此無須了解存取路徑。存取路徑的選擇以及SQL語句的操作過程由系統自動完成。
- 面向集合的操作方式。SQL語言采用集合操作方式,不僅操作對象、查找結果可以是元組的集合,而且一次插入、刪除更新操作的對象也可以是元組的集合。
- 以同一種語法結構提供兩種使用方式。SQL語言既是自含式語言,又是嵌入式語言。作為自含式語言,它能夠獨立地用於聯機交互的使用方式,也能夠嵌入到高級語言程序中,供程序員設計程序時使用。
- 語言簡潔,易學易用。
SQL可以分為數據定義、數據查詢、數據更新、數據控制四大部分。有時把數據更新稱為數據操縱,或把數據查詢與數據更新合稱為數據操縱。
2.列出表級約束或行級約束的幾個關鍵字,並解釋其含義
-
用於定義表一級的完整性約束,一般包括:
- PRIMARY KEY約束(復合屬性構成的主關鍵字說明)
- FOREIGN KEY約束(外部關鍵字及參照關系說明)
- CHECK約束(同時涉及到多個屬性的域完整性約束)
-
用於定義列或字段一級的完整性約束,一般包括:
- NOT NULL和NULL約束
- PRIMARY KEY約束
- UNIQUE約束
- FOREIGN KEY約束
- DEFAULT定義
- CHECK約束
3.簡述索引的含義,並說明索引與ORDER BY的區別
- 索引:對表中的記錄進行邏輯排序,加快檢索的速度。
- ORDER BY:用來對查詢的結果進行排序。
- 區別:???
4.寫出完整的SELECT語句的格式(課本P114)
SELECT [ALL|DISTINCT] <目標列表達式> [別名] [,<目標列表達式> [別名]]⋯
FROM <表名或視圖名> [別名] [,<表名或視圖名> [別名]]⋯ | (<SELECT 語句>) [AS] <別名>
[WHERE <條件表達式>]
[GROUP BY <列名1>] [HAVING <條件表達式>]
[ORDER BY <列名2> [ASC|DESC]];
目標列表達式的可選格式:(1)*(2)<表名>.*(3)COUNT([DISTINCT|ALL] *)(4)[<表名>.]<屬性列名表達式> [,[<表名>.]<屬性列名表達式>]⋯
<屬性列名表達式>可以由屬性列、作用於屬性列的聚集函數和常量的容易算數運算組成的運算公式。
5.說明WHERE子句中的<條件表達式>,與HAVING子句中的<組過濾表達式>的區別
- WHERE用於在任何分組發生之前過濾記錄。
- HAVING用於在組成為組后過濾值。只有組中的列或表達式才能包含在HAVING子句的條件中。
where 不能放在GROUP BY 后面;
HAVING 是跟GROUP BY 連在一起用的,放在GROUP BY 后面,此時的作用相當於WHERE;
WHERE 后面的條件中不能有聚集函數,而HAVING 可以
6.給出組函數(聚集函數)與單值函數的區別
- 組函數作用於一組數據,並對一組數據返回一個值。
- 單值函數操作數據對象,只對一行進行變換,每行返回一個結果。
(亂寫的不知道對不對)
7.視圖的作用;視圖的更新問題
- 作用:
- 視圖能夠簡化用戶的操作。
- 視圖使用戶能以多種角度看待同一數據。
- 視圖對重構數據庫提供了一定程度的邏輯獨立性。
- 視圖能夠對機密數據提供安全保護。
- 更新問題:(具體見課本P126)
- 基本表的行列子集視圖一般是可更新的。
- 若視圖的屬性來自聚集函數、表達式,則該視圖肯定是不可以更新的。
不可更新的視圖與不允許更新的視圖是兩個概念。前者指理論上以證明其是不可更新的視圖,后者指實際系統中不支持其更新,但它本身有可能是可更新的視圖。