數據庫工程師復習重點:關系數據庫操作語言SQL
8.1 SQL支持的數據類型
8.1.1 數值型
1、 準確型
2、 近似型
8.1.2 字符串型
1、 普通編碼字符串類型;
2、 統一編碼字符串類型—Unicode編碼;
3、 二進制字符串類型;
8.1.3 日期時間類型
8.1.4 貨幣類型
8.2 定義和維護關系表
8.2.1 關系表的定義與刪除
1、定義表
CREATE TABLE <表名> (<列名><數據類型>[列級完整性約束定義]{, <列名><數據類型>[列級完整性約束定義]…}[,表級完整性約束定義])
1、 列級完整性約束:
(1) NOT NULL:取值非空;
(2) DEFAULT:指定列的默認值,形式:DEFAULT 常量;
(3) UNIQUE:列取值不重復;
(4) CHECK:列的取值范圍,形式:CHECK(約束表達式);
(5) PRIMARY KEY:指定本列為主碼;
(6) FOREIGN KEY:定義本列為引用其他表的外碼;
2、 刪除表
DROP TABLE <表名>
8.2.2 修改表結構
ALTER TABLE <表名>
8.3 數據操作語言
8.3.1 數據查詢
1、查詢語句的基本結構:
SELECT <目標列名序列> FROM <數據源> {WHERE , GROUP BY , HAVING , ORGER BY}
(1) 比較:SELECT A,B,C FROM TABLE_A WHERE A>30;
(2) 確定范圍:WHERE A (NOT)BETWEEN 初始值 AND 結束值;
(3) 確定集合:WHERE A (NOT)IN (‘A1’,‘A2’….‘A3’);
(4) 字符串匹配:WHERE A LIKE <匹配符>;
(5) 四種<匹配符>:
(A)_(下劃線):匹配任意一個字符;
(B)%(百分號):匹配0個或多個字符;
(C)[ ]:匹配[ ]中的任意一個字符;
(D)[^]:不匹配[ ]中的任意一個字符;
(6) 涉及空值的查詢:WHERE A IS (NOT)NULL;
(7) 多重條件查詢:AND(條件必須全部為TRUE,結果才為TRUE),OR(任一條件為TRUE,結果即為TRUE);
(8) 對查詢結果進行排序:ORDER BY A [ASC(順序) | DESC(逆序)];
(9) 列別名:列名 AS 新列名;
(10) 消除取值相同的行:SELECT DISTINCT A FROM TABLE_A;
(11) 使用聚合函數統計數據:SQL的聚合函數:
(A) COUNT(*):統計表中元組的個數;
(B) COUNT([ALL (全部)| DISTINCT(無重復)] <列名>):統計本列非空列值的個數;
(C) SUM(列名):計算列值的總和(必須是數值型列);
(D) AVG(列名):計算列值平均值(必須是數值型列);
(E) MAX(列名):求列最大值;
(F) MIN(列名):求列最小值;
(12) 對查詢結果進行分組計算:
(A) 使用GROUP BY;
(B) 使用HAVING子句;
3、 連接查詢
(1) 內連接:FROM 表1 JOIN 表2 ON (連接條件);
(2) 自連接:一種特殊的內連接,相互連接的表在物理上是同一張表,但通過為表取別名的方法,在邏輯上分為兩張表;
(3) 外連接:輸出不滿足連接條件的元組,格式:
FROM 表1 LEFT|RIGHT OUTER JOIN 表2 ON (連接條件)
4、 查詢語句的擴展:
(1) 合并多個結果集:SELECT 語句1 UNION SELECT 語句2……,使用UNION的兩個基本規則:
(A) 所有查詢語句中列的個數和列的順序必須相同;
(B) 所有查詢語句中對應的數據類型必須兼容;
(2) 將查詢結果保存到新表中:SELECT 查詢列表序列 INTO 新表名 FROM 數據源;
(3) 使用TOP限制結果集行數:TOP n [percent] [WITH TIES]
(A) TOP n :表示取查詢結果的前n行;
(B) TOP n percent:表示取查詢結果的前n%行;
(C) WITH TIES:表示包括并列的結果;
(4) 使用CASE表達式:
(A) 簡單CASE表達式:
(B) 搜索CASE表達式;
5、子查詢:
如果一個SELECT語句是嵌套在一個SELECT、INSERT、UPDATE或DELETE語句中,則稱為子查詢或內層查詢,包含子查詢的語句稱為主查詢或外層查詢;(1) 使用子查詢進行基于集合的測試,形式:WHERE 表達式 [NOT] IN (子查詢);
(2) 使用子查詢進行比較測試,形式:WHERE 表達式 比較運算符 (子查詢);
(3) 使用子查詢進行存在性測試,形式:WHERE [NOT] EXISTS (子查詢);
8.3.2 數據修改
1、 添加數據:INSERT [INTO] 表名 VALUE 值列表;使用插入單行語句時要注意:
(1) 值列表中的值與列名表中的列按位置順序對應,要求它們的數據類型必須一致;
(2) 如果[表名]后邊沒有指明列名,則值列表中的值的順序必須與表中列的順序一致,且每一列均有值;
2、 更新數據:形式 UPDATE 表名 SET [列名=表達式] [WHERE 更新條件];
3、 刪除數據::形式DELETE [FROM] 表名 [WHERE 刪除條件];
8.4 索引
1、 創建索引:CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]
INDEX 索引名 ON 表名
(1) UNIQUE:表示要創建的索引是唯一索引;
(2) CLUSTERED:表示要創建的索引是聚集索引;
(3) NONCLUSTERED:表示要創建的索引是非聚集索引;
2、 刪除索引:DROP INDEX 索引名;
8.5 視圖
8.5.1 定義視圖
1、 語法格式:CREATE VIEW 視圖名 AS SELECT 語句 [WITH CHECK OPTION]
2、 需要注意下列幾點:
(1) 在定義視圖時要么指定全部視圖列,要么全部省略不寫。如果省略了視圖列名,則視圖的列名與查詢語句的列名相同。但如下情況則要明確指出組成視圖的所有列名:
A、 某個目標列不是單純的屬性名,而是計算函數或列的表達式;
B、 多表連接時選出了幾個同名列作為視圖的字段;
C、 需要在視圖中為某個列選用新的更合適的列名。
(2) WITH CHECK OPTION選項表示通過視圖對數據進行增加、刪除和更改操作時要保證對數據的操作結果要滿足定義視圖時指定的WHERE子句條件;
3、 視圖通常用于查詢數據,也可修改基本表中的數據,但不是所有的視力都可以這樣。
4、 定義單源表視圖—視圖數據可只取自一個基本表的部分行、列,這樣的視圖行列與基本表行列對應,這樣定義的視圖一般可以進行查詢和更改數據操作
5、 定義多源表視圖—視圖數據可以來自多個表中,這樣定義的視圖一般只用于查詢,不用于修改數據。
6、 在已有視圖上定義新視圖—可以在視圖上再建立視圖,這時作為數據源的視圖必須是已經建立好的。
7、 定義帶表達式的視圖—在定義基本表時,為減少數據庫中的冗余數據,表中只存放基本數據,由基本數據經過各種計算派生出的數據一般是不存儲的。所以定義視圖時可以根據需要設置一些派生屬性列,在這些派生屬性列中保存經過計算的值。這些派生屬性由于在基本表中并不實際存在,因此,也稱它們為虛擬列。包含虛擬列的視圖也稱為帶表達式的視圖。
8、 含分組統計信息的視圖—指定義視圖的查詢語句中含有GROUP BY 子句,這樣的視圖只能用于查詢,不能修改數據。
8.5.2 刪除視圖
1、 格式為:DROP VIEW <視圖名>
8.5.3 視圖的作用
1、 簡化數據查詢語句;
2、 使用戶能從多角度看到同一數據;
3、 提高了數據的安全性;
4、 提供了一定程度的邏輯獨立性