《第07章 基本SQL語句課件.ppt》由會員分享,可在線閱讀,更多相關《第07章 基本SQL語句課件.ppt(36頁珍藏版)》請在裝配圖網上搜索。
1、第 7章 基 本 SQL語 句Transact-SQL語言是Microsoft為SQL Server開發(fā)的一種標準化SQL語言的實現,也是SQL Server的核心。不過,Transact-SQL并非嚴格按照標準化SQL語言實現,而是對標準化SQL語言進行了一定程度上的裁剪和拓展。本章主要介紹Transact-SQL語言的基本語句。 7.1 Transact-SQL語 言Transact-SQL語言是對標準SQL語言的實現。不過,由于不同的數據庫系統(tǒng),廠商實現的SQL語言并不相同,這就導致了數據庫的具體SQL語言間存在一定程度上的差異。所以,用戶在使用SQL語言時,一定要明確特定SQL語言的特
2、殊性,而且應盡量使用標準化SQL語句,而不要去使用那些特殊性的SQL語句。 7.2 數 據 定 義 語 言Transact-SQL語言是一種數據定義語言。所謂數據定義語言,是指用于定義數據格式的語言。這里所說的數據格式是存儲數據的結構以及所存儲數據項之間的關系。數據格式定義包括創(chuàng)建格式、刪除格式、更改格式,而對應的語句分別為CEATE語句、DROP語句、ALTER語句。REVOKE語句是處理權限的主要語句。CEATE語句、DROP語句、ALTER語句和REVOKE等語句并不是一個語句,而是一組語句。 7.2.1 CREATE語 句 : 創(chuàng) 建 數 據 庫CREATE語句主要用于數據定義,包括定
3、義數據的格式,以及其他屬性。其中,數據定義的格式和屬性限制了插入數據庫中的數據的格式。所以,在數據庫設計時,數據定義階段的工作很重要。為了做好數據定義工作,在定義數據結構前,用戶需要對企業(yè)的常用數據的格式進行分析。 7.2.2 DROP語 句 : 刪 除 數 據 庫在SQL Server里,DROP語句和CREATE語句是對應的,二者甚至在形式和數目上都很相同。如CREATE DATABASE語句對應于DROP DATABASE語句。不過,DROP語句一般都是較為簡單的,不像CREATE語句那樣具有復雜的語法結構。一般情況下,DROP語句的格式如下。DROP 對象 對象名 7.2.3 ALTE
4、R語 句 : 修 改 數 據 庫從ALTER語句的含義來看,ALTER語句是很友好的。因為ALTER語句能夠在定義對象后,對對象進行修改。不過,實際的情況卻并不如想象中那么好。在對象設計階段,可以使用ALTER修改,但是在現實工作中,用戶最好不要使用ALTER語句。該語句可能造成數據的丟失或數據精度的降低。 7.2.4 REVOKE語 句 : 安 全 性 語 句上面介紹的語句都是關于數據庫對象的,這里的REVOKE語句則是關于安全性的。REVOKE語句、GRANT語句以及DENY等語句定義了對象的權限。關于權限,將在后文中敘述。這里只是強調說明權限也是數據定義的一部分。 7.3 數 據 操 縱
5、 語 言在使用數據定義語言(DDL)定義了數據存儲的格式和位置后,用戶就可以使用數據操縱語言(DML)來操作定義的對象。數據操縱語言主要包括數據查詢與數據更新,其中,數據查詢主要是SELECT,而數據更新則包括插入(INSERT語句)、更新(UPDATE語句)、刪除(DELETE語句)。這四類語句可以簡稱為“查增改刪”。 7.3.1 SELECT語 句 : 查 詢 數 據所有基于數據庫的應用系統(tǒng)都會使用SELECT語句從數據庫中提取數據,并將獲得的數據按用戶的要求輸出給用戶。根據用戶使用具體SELECT語句的不同,數據庫從不同角度向用戶展示數據庫中的數據。SELECT語句執(zhí)行后,將返回一組記錄
6、,而這組記錄就是記錄集(結果集)。不過,SELECT語句是很復雜的。 7.3.2 INSERT語 句 : 插 入 數 據在SQL Server中,INSERT語句負責向數據庫中插入記錄。在獲取一條新的記錄后,就需要使用INSERT語句向數據庫插入一個新行(記錄)。 7.3.3 UPDATE語 句 : 更 新 數 據在使用INSERT語句向數據庫中插入數據后,數據就保存到了數據庫中。不過,如果外界數據發(fā)生變化,就需要對數據庫中的數據進行更新。在SQL Server中,主要使用UPDATE語句更新數據庫中的數據,特別是更新部分字段。與INSERT不同,這里并不插入新行(記錄),而是修改原行(記錄)
7、。 7.3.4 Delete語 句 : 刪 除 數 據如果表中的數據不再使用或已經備份完畢,那么為了釋放服務器的資源,就需要及時刪除表中的數據。 7.4 其 他 常 用 語 句上面介紹了SELECT、INSERT、UPDATE、DELETE等語句的基本形式。下面將介紹一些常用的子句,這些子句在與上述4個語句配合使用時,可以實現更加強大的數據操作功能。1帶WHERE子句的SELECT語句2帶WHERE子句的UPDATE語句3帶WHERE子句的DELETE語句 7.4.1 WHERE子句:給出條件語句在SQL Server中,WHERE子句可以用于SELECT語句、DELETE語句、UPDATE語
8、句中。1帶WHERE子句的SELECT語句2帶WHERE子句的UPDATE語句3帶WHERE子句的DELETE語句 7.4.2 帶 AND關 鍵 字 的 WHERE子 句在介紹AND關鍵字之前,需要介紹一下布爾表達式。所謂布爾表達式是指表達式的各成分由關系連接符連接,而且表達式的值為TRUE或FALSE。其中,用于連接布爾表達式的連接詞有NOT(非)、AND(積)、OR(和)3個。這里將以AND為例,介紹這3個連接詞。 7.4.3 GROUP BY子 句 : 分 組 語 句GROUP BY子句具有符合ISO的語法和不符合ISO的語法兩種結構。在一條SELECT語句中只能使用一種語法樣式,在這里
9、,用戶使用符合ISO的語法,因為不符合ISO語法的目的是為了實現向后兼容。這里僅介紹符合ISO的語法,如下。 1不帶WHERE子句僅含GROUP BY子句的SELECT語句 2帶WHERE子句和GROUP BY子句的SELECT語句 7.4.4 HAVING子 句 : 分 組 條 件HAVING子句通常在GROUP BY子句中使用。如果不使用GROUP BY子句,那么HAVING的行為與WHERE子句一樣。不過,這種方式不推薦使用,因為有很多限制。HAVING子句的所有列都必須出現在SELECT語句的列表中。具體HAVING子句的用法大致分為以下幾種情況。1帶HAVING子句而不帶WHERE子
10、句的SELECT語句2帶HAVING子句和WHERE子句的SELECT語句 7.4.5 ORDER BY子 句 : 排 序 語 句ORDER BY子句用在指定SELECT語句返回的結果集后,主要用于對結果集進行排序。在默認情況下,由SELECT語句返回結果集中的記錄是按照表中記錄的物理順序排列的。 7.4.6 TOP子 句 : 查 看 前 幾 條 記 錄TOP表達式可用在SELECT、INSERT、UPDATE和DELETE語句中。不過,TOP表達式主要用于SELECT語句中,其表達式語法結構如下。TOP (Expression) PERCENT WITH TIES 7.4.7 DISTINC
11、T子 句 : 去 掉 重 復 記 錄提到關鍵字DISTINCT,就不得不提到關鍵字ALL。ALL是指結果集中可以包含重復行,而且它是默認值。而關鍵字DISTINCT可從SELECT語句的結果集中消除重復的行。不過,如果沒有指定DISTINCT,將返回所有行(包括重復的行)。 7.4.8 BETWEEN子 句 : 指 定 范 圍 條 件在SQL Server中,BETWEEN子句是較為重要的字句,用于指定一個范圍條件,其語法結構如下。test_Expression BETWEEN BEGIN_Expression AND END_Expression其實,該子句相當于數學中的兩個不等式:BEGI
12、N_Expression=test_Expression =END_Expression 7.4.9 模 糊 查 詢 LIKE子 句上面介紹WHERE子句時,說到了字符串比較的問題。不過,那種字符串比較主要是、=等關系運算符連接。在某種程度上,這些運算符都可以說是字符串的精確比較。在Transact-SQL中,還提供了LIKE子句用于字符串的模糊比較,即模糊匹配。 7.4.10 IN子 句 : 值 包 含 在 列 表 中在SQL Server中,IN語句主要用于確定指定列的值在子查詢或列表中。IN語句的語法結構如下。test_Expression IN ( subquery | Express
13、ion , n ) 7.4.11 NOT IN子 句 : 值 不 包 含 在 列 表 中當然,IN語句與LIKE語句一樣,也可以和NOT語句配合使用。NOT語句將IN語句的值取反,即如果IN語句為TRUE,那么NOT IN子句則為FALSE。這里之所以單獨列出NOT IN,是因為用戶經常用到NOT IN,便于用戶查詢本書。 7.4.12 COMPUTE子 句 : 用 于 生 成 統(tǒng) 計 信 息COMPUTE子句用于生成統(tǒng)計信息,并將統(tǒng)計信息顯示在結果集的后面。COMPUTE子句的語法結構如下。 COMPUTE AVG | COUNT | MAX | MIN | STDEV | STDEVP |
14、 VAR | VARP | SUM ( Expression ) , n BY Expression , n 7.4.13 COMPUTE BY子 句 : 計 算 統(tǒng) 計 信 息COMPUTE BY子句與COMPUTE子句類似,也可能在未來版本中刪除,所以不建議使用。如果使用COMPUTE BY,那么必須使用ORDER BY子句。表達式的列必須與在ORDER BY中的列相同或是其子集,并且順序相同。例如,如果ORDER BY子句為ORDER BY a,b,c,那么COMPUTE子句的可用形式如下。COMPUTE BY a,b,c。COMPUTE BY a,b。COMPUTE BY a。 7.4
15、.14 列 的 別 名前面的許多示例都用到了列的別名,而且在前面介紹其他類型時,筆者也介紹了列的別名類型。其實,列的別名在SELECT語句中經常用到。其中,列的別名類型主要由AS和=來命名?;谇懊娴慕榻B,下面將給出一個在查詢中使用列別名的示例。如下SQL語句將查詢數據庫database_demo的表,并使用別名顯示查詢到的字段。 7.5 關 系 連 接在SELECT語句涉及到多個表時,可以用子查詢解決。SQL Server還提供了一組關鍵字來處理多個表的查詢,這組關鍵字組成了關系連接的核心。所謂關系連接,就是連接查詢這是一種不同于子查詢使用多個表的查詢方式??梢哉f,前面介紹的SQL語句都是基
16、礎語句,在工作中較少用到那樣簡單的語句。連接查詢是最常用、最重要的查詢方式。 7.5.1 連 接 查 詢 介 紹既然兩個表可以用于連接查詢,那么兩個表必須要有聯(lián)系兩個表之間存在相同意義的列。 7.5.2 笛 卡 爾 乘 積上面介紹連接查詢時提到過,SQL Server將參與連接查詢的表的所有記錄進行組合并形成笛卡爾積(交叉連接) 。根據上面介紹的連接查詢的執(zhí)行步驟,用戶不難了解生成和實現笛卡爾積的方法:在連接查詢中,將WHERE子句、GROUP BY子句、ORDER BY子句以及SELECT語句中的聚合函數等都省略,直接使用表中的記錄組合形成笛卡爾積。 7.5.3 內 部 連 接內部連接( I
17、NNER JOIN)是相對于外部鏈接而言的,內部連接用來組合兩個或多個表的記錄。通常,內部連接按照連接條件,從生成的結果集中刪除在其他表中沒有被匹配的記錄。根據內部連接使用比較方式的不同,內部連接可以分為等值連接、自然連接、不等連接。 7.5.4 使 用 表 別 名表的別名是連接查詢中經常用到的處理表的方法。將表名定義為一個簡單的別名,解決了編寫SQL語句時語句過長的問題。其中,表別名的規(guī)則與前面介紹的列的別名相同。這里僅給出一個簡單的SQL示例。USE database_demoGOSELECT tb1.* FROM table_1 AS tb1 7.5.5 外 部 連 接前面介紹的連接查詢
18、都是返回滿足條件的記錄。在工作中,用戶可能遇到這種情況,即顯示某一個表的全部內容(包括不符合連接條件的記錄)。這個時候就需要用到外部連接,其可以使不符合條件的記錄也出現在結果中。 7.5.6 自 連 接這里介紹的自連接是連接查詢的一個特例。所謂自連接,就是表與自身的連接,是內部連接的一種。自連接可以使用戶同時操作同一個表的不同行。它使用較少,但是很重要。自連接適用于如下場景:某班級學生表student中包含了該班學生今年選修的課程以及課程分數?,F在,需要查看同一個學生的不同學科的成績。 7.5.7 聯(lián) 合 查 詢 在Transact-SQL中,還有一類查詢,叫聯(lián)合查詢。聯(lián)合查詢是以SELECT語句的結果集為基礎的。與其說聯(lián)合查詢是一個查詢,不如說聯(lián)合查詢是一個運算符。不過,這是一種使用起來不太靈活的查詢方式。除非用戶想將查詢結果一次性輸出,這時可以使用聯(lián)合查詢。許多聯(lián)合查詢都可以用連接查詢替代,不推薦使用聯(lián)合查詢。 7.6 小 結本章是本書最為關鍵的一章,SQL語句是在實際應用中使用最多的部分,每一個DBA都應該十分熟練地掌握各種SQL語句。在實際應用中,數據操縱語言最為關鍵,由其是SELECT語句,十分靈活,體現了第四代計算機語言的特點。與其配合的各種常見語句,為準確查詢到可用數據提供技術保障。