關係數據庫SQL語言簡介

    SQL(structrued query language)是1974年由Boyce和Chamberlin提出的,主要包括:數據查詢(query)、數據操縱(manipulation)、數據定義(definition)和數據控制(control)功能,是一種通用的、功能強大的關係數據庫的標準語言。


SQL的特點

  • 綜合統一:SQL是集數據定義、數據操縱和數據控制功能於一體,語言風格統一,可獨立完成數據庫生命週期的所有活動。

  • 高度非過程化:SQL語言是高度非過程化的,當進行數據操作時,存儲路徑對用戶來說是透明的,提高了數據的獨立性。

  • 面向集合的操作方式:操作對象、查找結果可以是記錄的集合。

  • 兩種使用方式:既可以在終端鍵盤上輸入SQL命令,對數據庫進行操作,也可以將SQL語言嵌入到高級語言程序中。

  • 語言簡潔,易學易用:SQL語言功能極強,完成核心功能只用了9個動詞,包括以下4類。

    數據查詢:SELECT

    數據定義:CREATE    DROP    ALTER

    數據操縱:INSERT    UPDATE    DELETE

    數據控制:GRANT    REVOKE


SQL數據定義

1.創建表(CREATE TABLE)

    語句格式:

CREATE TABLE <表名>(<列名><數據類型>[列級完整性約束條件]
                   [,<列名><數據類型>[列級完整性約束條件]]...
                   [,<表級完整性約束條件>]);

    列級完整性約束條件有:NULL(空)、UNIQUE(取值唯一)等。

2.修改表(ALTER TABLE)

    語句格式:

ALTER TABLE <表名>[ADD<新列名><數據結構>[完整性約束條件]]
                  [DROP<完整性約束名>]
                  [MODIFY<列名><數據類型>];

3.刪除表(DROP TABLE)

    語句格式:

DROP TABLE <表名>;

4.建立索引

    語句格式:

CREATE [UNIQUE][CLUSTER] INDEX <索引名>
                         ON <表名>(<列名>[<次序>][,<列名>[<次序>]]...);

參數說明:

    次序。可選ASC(升序)或者DSC(降序),默認值爲ASC。

    UNIQUE。表明此索引的每一個索引值只對應唯一的數據記錄。

    CLUSTER。表明要建立的索引是聚集索引,意爲索引項的順序是與表中記錄的物理順序一致的索引組織。

5.刪除索引

    語句格式:

DROP INDEX <索引名>;

6.定義視圖

    視圖是從一個或者多個表或視圖中導出的表,其結構和數據是建立在對錶的查詢基礎上的。視圖不是真實存在的基礎表而是一個虛擬表,視圖所對應的數據並不真實存在以視圖結構存儲的數據庫中,而是存儲在視圖所引用的表中。

    語句格式:

CREATE VIEW 視圖名 [(列名)[,<列名>]]
       AS <子查詢>
       [WITH CHECK OPTION];

    注意

    a.子查詢可以是任意複雜的SELECT語句,但通常不允許含有ORDER BY 子句和 DISTINCT 短語。

    b.WITH CHECK OPTION 表示對 UPDATE, INSERT, DELETE 操作時保證更新、插入或刪除的行滿足視圖定義中的謂語條件(即子查詢中的條件表達式)。

    c.組成視圖的屬性列名或者全部省略或者全部指定。如果省略屬性列名,則隱含該視圖由 SELECT 子查詢目標列的諸屬性組成。

7.刪除視圖

    語句格式:

DROP VIEW <視圖名>;


SQL數據查詢

    SQL的數據操縱功能包括SELECT(查詢)、INSERT(插入)、DELETE(刪除)和UPDATE(修改)4條語句。SQL語言對數據庫的操作十分靈活方便,原因在於SELECT語句中的成分豐富多樣的元組,有許多可選形式,尤其是目標列和條件表達式。


1.SELECT基本結構

    語句格式

SELECT [ALL | DISTINCT] <目標列表達式> [,<目標列表達式>]...
    FROM <表名或視圖名>[,<表名或視圖名>]
    [WHERE <條件表達式>]
    [GROUP BY <列名1>[HAVING<條件表達式>]]
    [ORDER BY <列名2>[ASC | DESC]...];

    SQL查詢中的字句順序:SELECT、FROM、WHERE、GROUP BY、HAVING 和 ORDER BY。但是 SELECT、FROM 是必須的,而且,HAVING 子句只能與 GROUP BY 搭配起來使用。

    SELECT 子句對應的是關係代數中的投影運算,用來列出查詢結果中的屬性。其輸出可以是:列名、表達式、集函數(AVG、COUNT、MAX、MIN、SUM),DISTINCT 選項可以保證查詢的結果集中不存在重複元組。

    FROM 子句對應的是關係代數中的笛卡爾積,它列出的是表達式求值過程中需掃描的關係,即在FROM 子句中出現多個基本表或視圖時,系統首先執行笛卡爾積操作。

    WHERE 子句對應的是關係代數中的選擇謂詞。WHERE 子句的條件表達式中可以使用的運算符如表1所示。

表1 WHERE 子句的條件表達式中可以使用的運算符

運算符含義運算符含義
集合成員運算符IN在集合中算術運算符>大於
NOT IN不在集合中>=大於等於
<小於
字符串匹配運算符LIKE與_和%進行單個多個字符匹配
<=小於等於
=等於
!=不等於
空值比較運算符IS NULL爲空邏輯運算符AND
IS NOT NULL不能爲空OR
NOT

2.簡單查詢

    簡單查詢只需要使用3個保留字 SELECT、FROM 和 WHERE。

3.連接查詢

    若查詢涉及兩個以上的表,則成爲連接查詢。

4.子查詢

    子查詢也稱嵌套查詢。嵌套查詢是指一個SELECT-FROM-WHERE 查詢塊可以嵌入另一個查詢塊之中。在SQL中允許多重嵌套。

5.聚集函數

    聚集函數是一個值得集合爲輸入,返回單個值的函數。SQL提供了5個預定義集函數:平均值 AVG、最小值 MIN、最大值 MAX、求和 SUM 以及計數 COUNT。如表2所示。

表2 集函數的功能

集函數名功能
COUNT ([DISTINCT|ALL]*)統計元組個數
COUNT ([DISTINCT|ALL]<列名>)統計一列中值得個數
SUM ([DISTINCT|ALL]<列名>)計算一列(該列應爲數值型)中值得總和
AVG ([DISTINCT|ALL]<列名>)計算一列(該列應爲數值型)中值的平均值
MAX ([DISTINCT|ALL]<列名>)求一列值的最大值
MIN ([DISTINCT|ALL]<列名>)求一列值的最小值

    使用 ANY 和 ALL 謂詞必須同時使用比較運算符,其含義及等價的轉換關係見表3.用集函數實現子查詢通常要比直接用ALL 或 ANY 查詢效率要高。

表3 ANY、ALL 謂詞含義及等價的轉換關係

謂詞語義等價轉換關係
>ANY大於子查詢結果中的某個值>MIN
>ALL大於子查詢結果中的所有值>MAX
<ANY小於子查詢結果中的某個值<MAX
<ALL小於子查詢結果中的所有值<MIN
>=ANY大於等於子查詢結果中的某個值>=MIN
>=ALL大於等於子查詢結果中的所有值>=MAX
<=ANY小於等於子查詢結果中的某個值<=MAX
<=ALL小於等於子查詢結果中的所有值<=MIN

<>ANY

不等於子查詢結果中的某個值

-

<>ALL不等於子查詢結果中的任何一個值NOT IN
=ANY等於子查詢結果中的某個值IN
=ALL等於子查詢結果中的所有值-

6.分組查詢

    1)GROUP BY 子句

    在 WHERE 子句後面加上 GROUP BY 子句可以對元組進行分組,保留字 GROUP BY 後面跟着一個分組屬性的列表。最簡單的情況是,FROM 子句後面只有一個關係,根據分組屬性對它的元組進行分組。SELECT 子句中使用的聚集操作符僅用在每個分組上。

    2)HAVING 子句

    假如元組在分組前按照某種方式加上限制,使得不需要的分組爲空,可以在GROUP BY子句後面跟一個HAVING 子句即可。

    注意,當元組含有空值時,需要注意:

    第一,空值在任何聚集操作中被忽視。它對求和、求平均值和計數都沒有影響。它也不能是某列的最大值或最小值。

    第二,NULL值又可以在分組屬性中看做是一個一般的值。

7.更名運算

    SQL 提供可爲關係和屬性重新命名的機制,這是通過使用具有如下形式的 AS 子句來實現的

Old-name AS new-name

    AS 子句即可出現在SELECT 子句,也可出現在 FROM 子句中。

8.字符串操作

    對於字符串進行的最通常的操作是使用操作符 LIKE 的模式匹配。使用兩個特殊的字符來描述模式:“%”匹配任意字符串;“_”匹配任意一個字符。模式是大小寫敏感的。

    “__”匹配只含兩個字符的字符串;“_%”匹配至少包含兩個字符的字符串。

    爲了使模式中包含特殊模式字符(即%和_),在SQL中允許使用 ESCAPE 關鍵詞來定義轉義符。轉義字符緊靠着特殊字符,並放在它的前面,表示該特殊字符被當成普通字符。例如使用反斜槓“\”作爲轉義符。

LIKE 'ab\%cd%' ESCAPE '\'            //匹配所有以ab%cd開頭的字符串
LIKE 'ab\\cd%' ESCAPE '\'            //匹配所有以ab\cd開頭的字符串

9.視圖的查詢

    系統執行視圖查詢語句時,通常先將其轉換成等價的對基本表的查詢,然後執行查詢語句。即當查詢視圖時,系統先從數據字典中取出該視圖的定義,然後將定義中的查詢語句和對該視圖的查詢語句結合起來,形成一個修正的查詢語句。


SQL數據更新

1.插入語句

    要在關係數據庫中插入數據,可以指定被插入的元組,或者用查詢語句選出一批待插入的元組。語句格式:

INSERT INTO <基本表名> [(字段名[,字段名]...)]
       VALUES (常量[,常量]...);

INSERT INTO <基本表名> (字段名[,字段名]...)
       SELECT 查詢語句;

2.刪除語句

    語句格式:

DELETE FROM <基本表名>
    [WHERE 條件表達式];

3.修改語句

    語句格式:

UPDATE <基本表名>
    SET <列名>=<值表達式>[,<列名>=<值表達式>...]
    [WHERE <條件表達式>];


SQL的訪問控制

    訪問控制是指對數據訪問數據的控制,有授權語句和收回權限語句。

1.授權的語句格式

GRANT <權限> [,<權限>]...
    [ON <對象類型><對象名>]
    TO <用戶> [,<用戶>]...
    [WITH GRANT OPTION];

    注意:不同類型的操作對象有不同的操作權限,常見的操作權限見表4。

表4 常見的操作權限

對象對象類型操作權限
屬性列TABLESELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES(四種權限的總和)
視圖TABLESELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES(四種權限的總和)
基本表TABLE

SELECT, INSERT, UPDATE, DELETE, ALTER, INDEX,

ALL PRIVILEGES(六種權限的總和)

數據庫DATABASECREATEAB 建立表的權限,可由 DBA 授予普通用戶

說明:

  • 接受權限的用戶可以是單個或者多個具體的用戶,也可以是 PUBLIC, 即全體用戶。

  • 若指定了 WITH GRANT OPTION 子句,則獲得了某種權限的用戶還可以將此權限賦給其他用戶。


2.收回權限語句格式

REVOKE <權限> [,<權限>]...
    [ON <對象類型> <對象名>]
    FROM <用戶> [,<用戶>]...;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章