?? 67.txt
字號:
結構化查詢語言(SQL)詳解之一
一、SQL語句的分類
ANSI SQL語句分成以下六類(按使用頻率排列):
數據查詢語言(DQL):其語句,也稱為“數據檢索語句”,用以從表中獲得數據,確定數據怎樣在應用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其他類型的SQL語句一起使用。
數據操作語言(DML):其語句包括動詞INSERT,UPDATE和DELETE。它們分別用于添加,修改和刪除表中的行。也稱為動作查詢語言。
事務處理語言(TPL):它的語句能確保被DML語句影響的表的所有行及時得以更新。TPL語句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
數據控制語言(DCL):它的語句通過GRANT或REVOKE獲得許可,確定單個用戶和用戶組對數據庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對表單個列的訪問。
數據定義語言(DDL):其語句可在數據庫中創建新表(CREAT TABLE);為表加入索引等。DDL包括許多與人數據庫目錄中獲得數據有關的保留字。它也是動作查詢的一部分。
指針控制語言(CCL):它的語句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于對一個或多個表單獨行的操作。
目前還沒有一個商用的RDBMS支持全部的ANSI SQL-92中的所有保留字。例如Jet 3.5數據庫引擎不支持任何DCL保留字,而是用Data Accesss Object的計劃性安全對象和Visual Basic的保留字及關鍵字取代。同時Jet 3.5引擎不需支持CCL語句,因為Jet不處理SQL語句中的指針。
二、DQL語法詳解
SQL操作符和表達式
SQL提供基本的算術操作符:<,>,=,<=,>=,<>。SQL增加了一組操作符,用于與文本數據類型的字段值連接(LINK和IN)及處理字段中的NULL值(IS NULL和IS NOT NULL)。SQL語句中的大多數操作符都是雙值的。雙值函數需要兩個操作數,像LIKE,IN,IS NULL等則是單值的。
對于文本字段數據類型字段的WHERE標準,最有用的操作符是LIKE。在Jet SQL中稱為LIKE操作符。下表顯示了LIKE操作符的ANSI SQL語法和用于SQL語句WHERE子句中的Jet SQL Like操作符。
用途 ANSI SQL Jet SQL 返回
取包含字符的任何文本 LIKE '%am%' Like "*am*" ram,rams damsel,amnesty
取以字符打頭的任何文本 LIKE 'John%' Like "John*" Johnson,Johnsson
取以字符結尾的任何文本 LIKE '%son' Like "*son" Johnson,Anderson
取文本和任意單個后綴字符 LIKE 'Glen_' Like "Glen?" Glenn,Glens
取文本和任意單個前綴字符 LIKE '_am' Like "?am" dam,Pam,ram
取文本和一個前綴及任意個后綴字符 LIKE '_am%' Like "?am*" dams,Pam,Ramses
注意:為與ANSI SQL-92保持一致,本地OLE DB數據提供者(Microsoft.JET.OLEDB.3.51)使用%和_通配符而非Jet的?和*。這種不一致要求修改已存在的DAO代碼以適應ADO使用SQL通配符。
連接表
1。常規的內部連接或相等連接
最常見的連接類型是相等連接(或稱為INNER JOIN)。例如:
SELECT Publishers.Name,Titles.ISBN,Titles.Title FROM Publishers INNER JOIN Titles ON Publishers.PubID=Titles.PubID
也可以寫成:
SELECT Publishers.Name,Titles.ISBN,Titles.Title FROM Publishers,Titles WHERE Publishers.PubID=Titles.PubID
2。多重相等連接
例如:
SELECT Titles.Title,Publishers.Name,Titles.ISBN,Authors.Author FROM Publishers,Titles,Authors,[Title Author] WHERE Titles.ISBN=[Title Author].ISBN AND Authors.Au_ID=[Title Author].Au_ID AND Publishers.PubID=Tiltes.PubID
3。外部連接
INNER JOIN只返回與字段值相匹配的行,OUTER JOIN返回一個表的所有行和另一個表中有匹配值的行。有兩種類型的OUTER JOIN。
LEFT OUTER JOIN返回LEFT OUTER JOIN 語句左邊表或結果集的所有行和語句右邊表具有匹配值的行。WHERE子句中,*=操作符特指LEFT OUTER JOIN
RIGHT OUTER JOIN返回RIGHT OUTER JOIN 語句右邊表或結果集的所有行和語句左邊表具有匹配值的行。WHERE子句中,=*操作符表求RIGHT OUTER JOIN。
通常地,按一到多的形式創建。也就是說,代表關系中“一”方的主要表出現在JOIN表達式左邊或WHERE子句中操作符左邊,而關系中“多”方的相關表出現在表達式或操作符的右邊。LEFT OUTER JOIN可以顯示主表所有記錄,而不管相關表中的匹配記錄;RIGHT OUTER JOIN對尋找孤兒記錄很有用。所謂“孤兒記錄”就是那些在主表中沒有相關記錄的相關表中的記錄,孤兒記錄是違反引用一致性規則的結果。
注意:Jet SQL不支持WHERE子句中的*=和=*操作符。用Jet數據庫引擎時要用LEFT JOIN或RIGHT JOIN保留字來創建外部連接。
4。DISTINCTROW
限定詞DISTINCT告訴查詢只返回在SELECT語句指定字段中具有不同值的行,Jet SQL的限定詞DISTINCTROW使得返回集包括在兩個表任意字段中有異值的行(而不只是SELECT語句指定顯示的字段)
5。自連接和復合列
自連接是建立在同一表中具有相似字段數據類型兩個字段之間的一個連接。第一個字段常為主鍵字段,而第二個字段常為與主鍵字段相關的外部鍵字段,盡管這種結構并不是自連接必需的(為使自連接結果有意義,前一個要求也許是需要的)。
建立自連接時,RDBMS建立原表的一個副本,然后把副本連接到原表上。以VB自帶的Nwind.mdb為例。其中的Employees表包含ReportsTo字段來表示雇員主管的EmployeeID.在Employees表上建立自連接以顯示雇員主管名字的Jet SQL語句如下
SELECT Employees.EmployeeID AS EmpID,Employees.LastName & "," & Employees.FirstName AS Employee,Employees.ReportsTo AS SupId, EmpCopy.LastName & "," & EmpCopy.FirstName AS Supervisor FROM Employees, Employees AS EmpCopy,Employees INNER JOIN EmpCopy ON Employees.ReportsTo=EmpCopy.EmployeeID
SQL匯總函數和GROUP BY及HAVING子句
1。匯總函數
COUNT(field_name)返回field_name中包含NOT NULL值的行數,COUNT(*)返回表或查詢的行數,不考慮字段的NULL值。
MAX(field_name)返回集合中field_name的最大值
MIN(field_name)返回集合中field_name的最小值
SUM(field_name)返回集合中field_name值的和
AVG(field_name)返回集合中field_name值的算術平均值
下面是使用匯總函數的一個例子:
SELECT COUNT(*) AS Count,SUM(PubID) AS Total,AVG(PubID) AS Average,MIN(PubID) AS Minimum,MAX(PubID) AS Maximum FROM publishers
2。GROUP BY和HAVING
有重要內容的數據庫常常有包含代表分類的字段的表,例如Nwind.mdb中的Products表把一種外來食品的品種歸為8個類別。當要為一個對象的每個類獲得SQL匯總函數值時,可以使用GROUP BY子句,GROUP BY子句創建一個虛表稱為分組表。如果想用特殊標準來限制組(類)成員關系,WHERE子句可以建立標準,然而,WHERE作用于整個表。HAVING子句和WHERE子句一樣,但它作用于組,而且把SQL匯總函數的適用性限制在一個組的特定集合上。所以可以加上帶有IN操作符的HAVING子句。 例如:
SELECT CategoryID AS Categroy,COUNT(ProductID) AS Item, SUM(UnitsInStock) AS Sum_Stock FROM Products GROUP BY CategoryID HAVING CategoryID IN(1,2)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -