第2章結(jié)構(gòu)化查詢語(yǔ)言sql
《第2章結(jié)構(gòu)化查詢語(yǔ)言sql》由會(huì)員分享,可在線閱讀,更多相關(guān)《第2章結(jié)構(gòu)化查詢語(yǔ)言sql(16頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第2章 結(jié)構(gòu)化查詢語(yǔ)言SQL 2.1 概述 2.1.1 組成與功能 1 SQL是“Structured Query Language(結(jié)構(gòu)式查詢語(yǔ)言)”的縮寫(xiě),1986年SQL語(yǔ)言被批準(zhǔn)為關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言的美國(guó)標(biāo)準(zhǔn)化語(yǔ)言。 2.SQL語(yǔ)言分類 分為四大類:數(shù)據(jù)定義語(yǔ)言,數(shù)據(jù)查詢語(yǔ)言,數(shù)據(jù)操縱語(yǔ)言,數(shù)據(jù)控制語(yǔ)言。 (1)數(shù)據(jù)定義語(yǔ)言:主要用創(chuàng)建、修改或刪除數(shù)據(jù)庫(kù)中對(duì)象,如表、視圖、模式、觸發(fā)器和存儲(chǔ)過(guò)程等,與其相關(guān)的主要SQL語(yǔ)句包括CREAT(創(chuàng)建)、ALTER(修改)、DROP(刪除); (2)數(shù)據(jù)操縱語(yǔ)言:主要用于數(shù)據(jù)的增、刪、改操作,主要語(yǔ)句有INSERT(插
2、入)、DELETE(刪除)、UPDATE(修改); (3)數(shù)據(jù)查詢語(yǔ)言:主要用于數(shù)據(jù)的檢索查詢,與其相關(guān)的語(yǔ)句是SELECT(查詢); (4)數(shù)據(jù)控制語(yǔ)言:主要用于控制用戶對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限、完整性規(guī)則描述、事務(wù)控制等操作??刂朴脩魧?duì)數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限的主要語(yǔ)句有 GRANT(授予權(quán)利)和REVOKE(取消權(quán)利)等。事務(wù)控制的語(yǔ)句包括 COMMIT(事務(wù)提交)和ROLLBACK(事務(wù)撤消)等。 2.SQL語(yǔ)言的特點(diǎn) 1)非過(guò)程化語(yǔ)言: 非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操縱語(yǔ)言是面向過(guò)程的語(yǔ)言,用其完成某項(xiàng)請(qǐng)求,必須指定存取路徑。而用SQL語(yǔ)言進(jìn)行數(shù)據(jù)操作,用戶只需提出“做什么”,而不必指明“怎么做”
3、,因此用戶無(wú)需了解存取路徑,存取路徑的選擇以及SQL語(yǔ)句的操作過(guò)程由系統(tǒng)自動(dòng)完成。這不但大大減輕了用戶負(fù)擔(dān),而且有利于提高數(shù)據(jù)獨(dú)立性。 2)統(tǒng)一的語(yǔ)言: SQL語(yǔ)言集數(shù)據(jù)定義語(yǔ)言DDL、數(shù)據(jù)操縱語(yǔ)言DML、數(shù)據(jù)控制語(yǔ)言DCL的功能于一體,語(yǔ)言風(fēng)格統(tǒng)一,可以獨(dú)立完成數(shù)據(jù)庫(kù)生命周期中的全部活動(dòng),包括定義關(guān)系模式、錄入數(shù)據(jù)以建立數(shù)據(jù)庫(kù)、查詢、更新、維護(hù)、數(shù)據(jù)庫(kù)重構(gòu)、數(shù)據(jù)庫(kù)安全性控制等一系列操作要求,這就為數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)提供了良好的環(huán)境,例如用戶在數(shù)據(jù)庫(kù)投入運(yùn)行后,還可根據(jù)需要隨時(shí)地逐步地修改模式,并不影響數(shù)據(jù)庫(kù)的運(yùn)行,從而使系統(tǒng)具有良好的可擴(kuò)充性。 3).面向集合的操作方式 SQL語(yǔ)言采
4、用集合操作方式,不僅查找結(jié)果可以是元組的集合,而且一次插入、刪除、更新操作的對(duì)象也可以是元組的集合。 非關(guān)系數(shù)據(jù)模型采用的是面向記錄的操作方式,任何一個(gè)操作其對(duì)象都是一條記錄。例如查詢所有平均成績(jī)?cè)?0分以上的學(xué)生姓名,用戶必須說(shuō)明完成該請(qǐng)求的具體處理過(guò)程,即如何用循環(huán)結(jié)構(gòu)按照某條路徑一條一條地把滿足條件的學(xué)生記錄讀出來(lái)。 4)是所有關(guān)系數(shù)據(jù)庫(kù)的公共語(yǔ)言。 3.SQL語(yǔ)言的基本數(shù)據(jù)類型 SQL Server提供了數(shù)值型、字符型、日期型、二進(jìn)制型、位型、雙字節(jié)型等6大類數(shù)據(jù)類型。 1)數(shù)值數(shù)據(jù)類型 一般可以分為整數(shù)型、精確數(shù)值類型、浮點(diǎn)數(shù)值類型和貨幣類型等4類。 數(shù)字?jǐn)?shù)據(jù)只包含數(shù)
5、字。數(shù)字?jǐn)?shù)據(jù)類型包括正數(shù)和負(fù)數(shù)、小數(shù)(浮點(diǎn)數(shù))和整數(shù) 整數(shù)由正整數(shù)和負(fù)整數(shù)組成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整數(shù)存儲(chǔ)的數(shù)據(jù)類型是 Int,Smallint和 Tinyint。Int 數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍大于 Smallint 數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍,而 Smallint 據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍大于Tinyint 數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)的范圍。使用 Int 數(shù)據(jù)狗昔存儲(chǔ)數(shù)據(jù)的范圍是從 -2 147 483 648 到 2 147 483 647(每一個(gè)值要求4個(gè)字節(jié)存儲(chǔ)空間)。使用 Smallint 數(shù)據(jù)類型時(shí),存儲(chǔ)數(shù)據(jù)的范圍從
6、 -32 768 到 32 767(每一個(gè)值要求2個(gè)字節(jié)存儲(chǔ)空間)。使用Tinyint 數(shù)據(jù)類型時(shí),存儲(chǔ)數(shù)據(jù)的范圍是從0 到255(每一個(gè)值要求1個(gè)字節(jié)存儲(chǔ)空間)。 精確小婁數(shù)據(jù)在 SQL Server 中的數(shù)據(jù)類型是 Decimal 和 Numeric。這種數(shù)據(jù)所占的存儲(chǔ)空間根據(jù)該數(shù)據(jù)的位數(shù)后的位數(shù)來(lái)確定。 在SQL Server 中,近似小數(shù)數(shù)據(jù)的數(shù)據(jù)類型是 Float 和 Real。例如,三分之一這個(gè)分?jǐn)?shù)記作。3333333,當(dāng)使用近似數(shù)據(jù)類型時(shí)能準(zhǔn)確表示。因此,從系統(tǒng)中檢索到的數(shù)據(jù)可能與存儲(chǔ)在該列中數(shù)據(jù)不完全一樣。 2)字符型 常用的字符型有Char、Varchar和T
7、ext等3種。 (1)char類型。長(zhǎng)度固定。如果字段或變量被定義為char類型,而實(shí)際長(zhǎng)度沒(méi)有達(dá)到定義的長(zhǎng)度,則在字符串尾部添加空格以達(dá)到固定的字符數(shù)。 (2)varchar類型。長(zhǎng)度可變。如果字段或變量被定義為varchar類型,而實(shí)際長(zhǎng)度沒(méi)有達(dá)到定義的長(zhǎng)度,SQL Server會(huì)自動(dòng)丟掉尾部的空格以節(jié)省空間。 (3)text類型。 當(dāng)要存儲(chǔ)的字符型數(shù)據(jù)非常龐大,長(zhǎng)度超過(guò)了8000個(gè)字符時(shí),可選擇text數(shù)據(jù)類型。即文本型,最大可存儲(chǔ)約2G的數(shù)據(jù)。 3)日期時(shí)間型 主要用來(lái)存儲(chǔ)日期和時(shí)間的組合數(shù)據(jù),根據(jù)取值范圍的大小分為datetime和smalldatetime兩種。 日期
8、和時(shí)間數(shù)據(jù)類型由有效的日期和時(shí)間組成。例如,有效的日期和時(shí)間數(shù)據(jù)包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一個(gè)數(shù)據(jù)類型是日期在前,時(shí)間在后一個(gè)數(shù)據(jù)類型是霎時(shí)間在前,日期在后。在 Microsoft SQL Server中,日期和時(shí)間數(shù)據(jù)類型包括Datetime 和 Smalldatetime 兩種類型時(shí),所存儲(chǔ)的日期范圍是從 1753 年 1 月 1 日開(kāi)始,到9999 年12 月 31 日結(jié)束(每一個(gè)值要求 8 個(gè)存儲(chǔ)字節(jié))。使用 Smalldatetime 數(shù)據(jù)類型時(shí),所存儲(chǔ)的日期范圍是 1900年 1 月 1日 開(kāi)始
9、,到 2079 年 12 月 31 日結(jié)束(每一個(gè)值要求 4 個(gè)存儲(chǔ)字節(jié))。 日期的格式可以設(shè)定。設(shè)置日期格式的命令如下: Set DateFormat {format | @format _var| 其中,format | @format_var 是日期的順序。有效的參數(shù)包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默認(rèn)情況下,日期格式為MDY。 例如,當(dāng)執(zhí)行 Set DateFormat YMD 之后,日期的格式為年 月 日 形式;當(dāng)執(zhí)行 Set DateFormat DMY 之后,日期的格式為日 月有年 形式 4)二進(jìn)制數(shù)據(jù)類型 二進(jìn)制數(shù)據(jù)類型有
10、定長(zhǎng)和變長(zhǎng)之分,主要用來(lái)存儲(chǔ)二進(jìn)制數(shù)據(jù),如圖形圖像、Word文檔文件等。SQL Server提供了binary、varbinary和image等3種常用二進(jìn)制數(shù)據(jù)類型。 5)位型 bit(位型)是SQL Server提供的一種支持邏輯數(shù)據(jù)的類型,只用來(lái)存儲(chǔ)1或0兩種,只有一位字節(jié)長(zhǎng),在SQL Server中bit字段的用途很多,可以作為“真/假”、“男/女”、“開(kāi)/關(guān)”這類狀態(tài)信息的標(biāo)志,可以作為活動(dòng)賬號(hào)的指示器或項(xiàng)目的使用標(biāo)志等。 6)特殊數(shù)據(jù)類型 有兩類不常用的數(shù)據(jù)類型,即雙字節(jié)數(shù)據(jù)類型和時(shí)間戳數(shù)據(jù)(Timestamp)類型。它們主要是為了實(shí)現(xiàn)特殊的用途,稱為特殊數(shù)據(jù)類型。 時(shí)間
11、戳數(shù)據(jù)類型往往因?yàn)槠涿侄斐烧`解,實(shí)際上它既不是日期,也不是時(shí)間數(shù)據(jù),而是SQL Server根據(jù)事件的發(fā)生次序自動(dòng)生成的一種二制數(shù)據(jù)。這個(gè)數(shù)據(jù)有很多用途,其中之一是在SQL Server關(guān)閉重新啟動(dòng)時(shí),作為進(jìn)行恢復(fù)工作的重要部分。另外利用timestamp數(shù)據(jù)還可以替代傳統(tǒng)的數(shù)據(jù)庫(kù)加鎖技術(shù)。 2.3.?dāng)?shù)據(jù)定義語(yǔ)言 1)空值 空值也可稱為NULL值??罩挡皇恰翱崭瘛狈颉?”值,它表示的是沒(méi)有值,是不確定的值。 2)數(shù)據(jù)類型:確定后一般不改變 2.3.1 數(shù)據(jù)庫(kù) 在SQL中,數(shù)據(jù)庫(kù)被定義為對(duì)象的集合,這些對(duì)象主要有表、索引、視圖、存儲(chǔ)過(guò)程等。數(shù)據(jù)庫(kù)在磁盤(pán)上是以文件為單位存儲(chǔ)的,由
12、數(shù)據(jù)文件和日志文件組成。數(shù)據(jù)文件中實(shí)際存放數(shù)據(jù)庫(kù)的所有數(shù)據(jù)和對(duì)象,日志文件用來(lái)存放用戶對(duì)數(shù)據(jù)庫(kù)所進(jìn)行的所有操作,它是維護(hù)數(shù)據(jù)庫(kù)完整性的重要工具。 (1)創(chuàng)建數(shù)據(jù)庫(kù) 語(yǔ)句格式: CREATE DATABASE <數(shù)據(jù)庫(kù)名> 語(yǔ)句功能:創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),就是定義一個(gè)存儲(chǔ)空間。 應(yīng)用舉例:CREATE DATABASE 教學(xué)管理庫(kù) (2)刪除數(shù)據(jù)庫(kù) 語(yǔ)句格式:DROP DATABASE <數(shù)據(jù)庫(kù)名> 語(yǔ)句功能:從計(jì)算機(jī)系統(tǒng)中刪除(撤消)一個(gè)數(shù)據(jù)庫(kù)。當(dāng)然會(huì)同時(shí)把該庫(kù)中的所有信息一并刪除掉。 語(yǔ)句舉例:DROP DATABASE 教學(xué)管理 2.3.2.表 1)表的概念 關(guān)系數(shù)據(jù)庫(kù)的主
13、要特點(diǎn)之一就是用表的方式組織數(shù)據(jù)。表是SQL語(yǔ)言存放數(shù)據(jù)、查找數(shù)據(jù)以及更新數(shù)據(jù)的基本數(shù)據(jù)結(jié)構(gòu)。在SQL語(yǔ)言中,表有嚴(yán)格的定義,它是一個(gè)由行、列組成的二維結(jié)構(gòu),通常把行稱做記錄,把列稱為字段。 表2-1 學(xué)生基本情況登記表 學(xué)號(hào) 姓名 性別 出生日期 專業(yè) 年級(jí) 2008001 張紅 女 1988-3-6 計(jì)算機(jī)應(yīng)用 1 2008002 李勇 男 1988-10-11 信息管理 1 … … … … … … 從表2-1可以看出,數(shù)據(jù)表一般具有以下屬性: (1)表名:表的惟一標(biāo)識(shí)。比如學(xué)生基本情況登記表; (2)字段:一張表可以由若干列組成
14、,稱為字段。列名惟一,且同一列的數(shù)據(jù)必須具有相同的數(shù)據(jù)類型。 (3)記錄:表中的每一行稱為一條記錄,比如“2008001,張紅,女1988.3.6,計(jì)算機(jī)應(yīng)用,1”,它描述了一名學(xué)生的若干屬性; (4)主關(guān)鍵字:能夠惟一表示數(shù)據(jù)表中的每條記錄的字段或者字段的組合,也稱為主碼、主鍵,比如學(xué)號(hào)。在一個(gè)學(xué)校中,學(xué)生的姓名可能重復(fù),但學(xué)號(hào)必須是惟一的。 2)創(chuàng)建表結(jié)構(gòu) (1)語(yǔ)句格式: CREATE TABLE <表名> (<列名1><列的數(shù)據(jù)類型>,<列名2><列的數(shù)據(jù)類型>,...) (2)語(yǔ)句功能: 在當(dāng)前數(shù)據(jù)庫(kù)中定義一個(gè)表的結(jié)構(gòu)(即關(guān)系模式)。 (3)語(yǔ)句舉例: 如果希望在
15、“教學(xué)管理”數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為“學(xué)生表”的表結(jié)構(gòu),則可執(zhí)行下列語(yǔ)句: CREATE TABLE 學(xué)生表( 學(xué)號(hào) char(7) Primary Key, 姓名 char(6), 性別 char(2), 出生日期 datetime, 專業(yè) char(10), 年級(jí) int ) 在上述語(yǔ)句中,數(shù)據(jù)表的名稱為“學(xué)生表”,它包括學(xué)生號(hào)、姓名、性別、出生日期、專業(yè)、年級(jí)等6個(gè)字段(列)。學(xué)名的數(shù)據(jù)類型為Char型(字符型),長(zhǎng)度為7;出生日期
16、的數(shù)據(jù)類型為Datatime型(日期型);年級(jí)的數(shù)據(jù)類型為Int型(整數(shù)型)。 3)刪除表結(jié)構(gòu) (1)語(yǔ)句格式: DROP TABLE <表名> (2)語(yǔ)句功能: 從當(dāng)前數(shù)據(jù)庫(kù)中刪除一個(gè)表,當(dāng)然在刪除表結(jié)構(gòu)的同時(shí)也刪除了全部?jī)?nèi)容。 (3) 語(yǔ)句舉例: DROP TABLE 學(xué)生表 從當(dāng)前數(shù)據(jù)庫(kù)中刪除掉名稱為“學(xué)生表”的表,假定事先已經(jīng)在當(dāng)前庫(kù)建立過(guò)該表。 2.3.2.索引 1索引的概念 索引(Index)提供了一種快速訪問(wèn)數(shù)據(jù)的途徑。索引具有以下特點(diǎn)。 (1)索引是在基本表的列上建立的一種數(shù)據(jù)加對(duì)象,它和基本表分開(kāi)存儲(chǔ),它的建立或撤消對(duì)數(shù)據(jù)的內(nèi)容
17、毫無(wú)影響。 (2)索引一經(jīng)創(chuàng)建,就完全由系統(tǒng)自動(dòng)選擇和維護(hù),不需要用戶指定使用索引,也不需要用戶執(zhí)行打開(kāi)索引或進(jìn)行重新索引等操作,所有這些工作都是由SQL Server數(shù)據(jù)庫(kù)管理系統(tǒng)自動(dòng)完成。 (3)基本表的記錄數(shù)量越多,記錄越長(zhǎng),越有必要?jiǎng)?chuàng)建索引,這對(duì)加快查詢速度的效率十分明顯。相反,對(duì)于記錄比較少的基本表而言,創(chuàng)建索引的意義不大。 (4)索引是為了加速查詢速度而創(chuàng)建的,但同時(shí)會(huì)影響基本表的插入、刪除或修改等更新活動(dòng)的速度,當(dāng)對(duì)基本表的數(shù)據(jù)進(jìn)行增刪改操作時(shí),索引文件也要隨之變化,以保持與基本表的一致,因此只有對(duì)那些數(shù)據(jù)量大、查詢頻度較高、實(shí)時(shí)性要求強(qiáng)的基本表要?jiǎng)?chuàng)建索引,并且一張基本表上
18、不要?jiǎng)?chuàng)建過(guò)多的索引。 2創(chuàng)建索引的原則 索引是建立在基本表列上的對(duì)象,通??蓞⒖家韵略瓌t: (1)基本表的記錄數(shù)量越多,記錄越長(zhǎng),越有必要?jiǎng)?chuàng)建索引,這對(duì)加快查詢速度的效率十分明顯。相反,對(duì)于記錄比較少的基本表而言,創(chuàng)建索引的意義不大。 (2)索引是為了加速查詢速度而創(chuàng)建的,但同時(shí)會(huì)影響基本表的插入、刪除或修改等更新活動(dòng)的速度,當(dāng)對(duì)基本表的數(shù)據(jù)進(jìn)行增、刪、改操作時(shí),索引文件也要隨之變化,以保持與基本表的一致,因此只有對(duì)那些數(shù)據(jù)量大、查詢頻度較高、實(shí)時(shí)性要求強(qiáng)的基本表要?jiǎng)?chuàng)建索引,并且一張基本表上不要?jiǎng)?chuàng)建過(guò)多的索引。 (3)索引是建立在基本表列上的對(duì)象,到底在哪個(gè)列上創(chuàng)建索引,通常可改變列
19、在WHERE、ORDER BY、GROUP BY子句中出現(xiàn)的頻率。比如,如果某個(gè)或某些列經(jīng)常出現(xiàn)在ORDER BY子句中,那么就可考慮在之上建立索引。 3 不易創(chuàng)建索引的幾種情況 (1)包含太多重復(fù)值的列; (2)查詢中很少被引用的列; (3)值特別長(zhǎng)的列。 (4)具有很多NULL值的列 (5)需要經(jīng)常插入、刪除、修改的列。 (6)記錄較少的基本表 (7)需要進(jìn)行頻繁、大批量數(shù)據(jù)更新的基本表 4 索引的類型 索引是創(chuàng)建在基本表列上的一種數(shù)據(jù)對(duì)象,從使用角度可將索引分為以下單列索引、惟一索引、復(fù)合索引三類;從是否改變基本表記錄的物理位置角度可分為聚集索引和非聚集索引兩類。實(shí)際
20、的索引通常是這兩大類5種方式的組合。 5 聚集和非聚集索引的對(duì)比 聚集索引和非聚集索引是SQL Server中經(jīng)常用到的兩個(gè)概念,是非此即彼的關(guān)系。一個(gè)單列或復(fù)合索引即可以是聚集的也可以是非聚集的。在建立索引時(shí),是采用聚集方式還是非聚集方式主要應(yīng)從以下幾點(diǎn)考慮: (1)存取速度 從建立了聚集索引的表中取出數(shù)據(jù)要比建立了非聚集索引的表快。但相對(duì)而言,聚集索引會(huì)降低向表中插入、刪除和修改數(shù)據(jù)的速度。 (2)索引的數(shù)據(jù) 對(duì)聚集索引的主要限制是每個(gè)表只能建立一個(gè)聚集索引。但是一個(gè)表可以有不止一個(gè)非聚集索引。實(shí)際上,對(duì)每個(gè)表最多可以建立249個(gè)非聚集索引。也可以對(duì)一個(gè)表同時(shí)建立聚集和非聚集索
21、引。 (3)所需空間 非聚集索引需要較多的硬盤(pán)空間和內(nèi)存。 6 創(chuàng)建索引 (1)語(yǔ)句格式: CREATE [UNIQUE][CLUSTERED] INDEX <索引名> ON <表名>(<列名1>[次序][,<列名2>[次序]]…) (2)語(yǔ)句功能 主要參數(shù)的意義是: UNIQUE:為表或視圖創(chuàng)建惟一索引(不允許存在索引值相同的兩行)。 CLUSTERED:聚集索引 索引名:在實(shí)際使用時(shí),用戶并不需要知道索引名,但在創(chuàng)建階段,索引名應(yīng)符合SQL Server的命名規(guī)則。并且在整個(gè)數(shù)據(jù)庫(kù)中,索引名不能重復(fù)。 次序:每個(gè)“列名”后面可以用“次序”指定索引值的排列次序,ASC
22、表示升序,DESC表示降序,默認(rèn)值是ASC。 7 刪除索引 (1)語(yǔ)句格式: DROP INDEX <索引名>[,…n] (2)語(yǔ)句功能: 使用該語(yǔ)句一次可以撤消一個(gè)或多個(gè)指定的索引,索引名之間用逗號(hào)間隔。 2.3.4.視圖 1)視圖的概念 視圖看上去同表一模一樣,具有一組命名的字段和數(shù)據(jù)項(xiàng),但它其實(shí)是一個(gè)虛擬的表,在數(shù)據(jù)庫(kù)中并不實(shí)際存。在視圖是由查詢數(shù)據(jù)庫(kù)表產(chǎn)生的,它限制了用戶能看到和修改的數(shù)據(jù)。 2)視圖的作用 視圖是由一個(gè)或多個(gè)基本表導(dǎo)出的表,人們通常把它理解為一組存儲(chǔ)在SQL Server數(shù)據(jù)庫(kù)中,經(jīng)過(guò)預(yù)先編譯的SELECT語(yǔ)句。在SQL Server中可以基本表
23、一樣對(duì)視圖進(jìn)行查詢、刪除、更新操作,但在對(duì)視圖數(shù)據(jù)所進(jìn)行的增加、刪除、修改等更新操作最終都映射到相應(yīng)的基本表上,并有一定的限制,在實(shí)際應(yīng)用中,盡可能不要通過(guò)視圖對(duì)記錄進(jìn)行更新操作。 (1)視圖是經(jīng)過(guò)預(yù)編譯的SELECT語(yǔ)句,存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器端,因此執(zhí)行視圖比從客戶端直接執(zhí)行SELECT語(yǔ)句速度更快、效率更高一些。 (2)視圖屬于用戶模式范疇,在實(shí)際中,一般的用戶不一定具有SELECT語(yǔ)句方面的專門(mén)知識(shí),從戶友好性角度來(lái)說(shuō),視圖更便于用戶使用。 (3)利用視圖可以簡(jiǎn)化的形式表達(dá)復(fù)雜的SELECT語(yǔ)句組,如嵌套查詢等。 3)創(chuàng)建視圖 (1)語(yǔ)句格式: CREATE VIEW <視圖名
24、> (<列名>,...) AS
25、常以dt_xxxx做為名字。使用存儲(chǔ)過(guò)程的好處可歸納為以下幾點(diǎn):
(1)執(zhí)行速度快。
(2)模塊化的程序設(shè)計(jì)。
(3)減少網(wǎng)絡(luò)流量。
(4)保證系統(tǒng)的安全性。
2)創(chuàng)建存儲(chǔ)過(guò)程
(1)語(yǔ)句格式:
CREATE PROC[EDURE] <存儲(chǔ)過(guò)程名> AS
26、名。
(2)語(yǔ)句功能:
執(zhí)行當(dāng)前數(shù)據(jù)庫(kù)中事先定義好的一個(gè)存儲(chǔ)過(guò)程。
Exec dsh_proc1
4)修改存儲(chǔ)過(guò)程
(1)語(yǔ)句格式:
ALTER PROC <存儲(chǔ)過(guò)程名> AS
27、器是一種特殊的存儲(chǔ)過(guò)程,它基于一個(gè)表創(chuàng)建,但可以針對(duì)多個(gè)表進(jìn)行操作,與表緊密相連,可以看作是表定義的一部分,主要用來(lái)保證數(shù)據(jù)的完整性。 在SQL Server中一張表可以有多個(gè)觸發(fā)器,用戶可以針對(duì)UPDATE、DELETE、INSERT語(yǔ)句分別設(shè)置觸發(fā)器,那么當(dāng)用戶進(jìn)行UPDATE、INSER、DELETE等數(shù)據(jù)維護(hù)操作執(zhí)行后,這些事先定義好的觸發(fā)器對(duì)象就會(huì)被“觸發(fā)”,并按事先定義好的規(guī)則自動(dòng)執(zhí)行。觸發(fā)器如果使用不當(dāng),會(huì)影響數(shù)據(jù)庫(kù)的效果,因此初學(xué)者慎用。 2.4.?dāng)?shù)據(jù)操縱語(yǔ)言 SQL數(shù)據(jù)定義語(yǔ)言的主要作用是創(chuàng)建存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu),而數(shù)據(jù)操縱語(yǔ)言的主要作用則是向數(shù)據(jù)庫(kù)中填寫(xiě)數(shù)據(jù),具體包括增加、
28、刪除、修改等操作。 1)插入數(shù)據(jù) (1)語(yǔ)句格式 INSERT INTO <表名>(<列名>,… ) VALUES(<列值>,…) (2)語(yǔ)句功能 向一個(gè)表中所指定的若干列插入一行記錄。當(dāng)向表中插入一完整的記錄時(shí),可以省略列名表表。 (3)語(yǔ)句舉例 INSERT INTO 學(xué)生表 VALUES(’2007001’,’王麗’,’女’,’1987-10-31’,2) 在當(dāng)前數(shù)據(jù)庫(kù)中執(zhí)行上述語(yǔ)句后,將在名為“學(xué)生表”的數(shù)據(jù)表中插入一名新同學(xué)的完整信息。由于“學(xué)生表”的學(xué)號(hào)、姓名和性別字段被定義為了字符型(Char型),因此它們對(duì)應(yīng)的字段值必須用半角的單引號(hào)引起來(lái),在SQL Serve
29、r中日期型(Datetime)也需要用單引號(hào),而數(shù)值型(Int)則不需要這樣做。 2)刪除數(shù)據(jù) (1)語(yǔ)句格式 DELETE FROM <表名> WHERE <條件> (2)語(yǔ)句功能 刪除一個(gè)表中滿足條件的所有記錄。 (3)語(yǔ)句舉例 DELETE FROM 學(xué)生表 WHERE 性別=’男’ 在當(dāng)前數(shù)據(jù)庫(kù)中執(zhí)行上述語(yǔ)句后,將把“學(xué)生表”中所有性別等于“男”的記錄刪除。此處用到的“性別=’男’”是一種邏輯表達(dá)式,表示刪除的條件,我們將在下一節(jié)詳細(xì)介紹。如果要?jiǎng)h除所有記錄,則可以直接執(zhí)行“DELETE FROM 學(xué)生表”。 3)修改數(shù)據(jù) (1)語(yǔ)句格式 UPDATE <表名
30、> SET <列名>=<表達(dá)式>,… WHERE <條件> (2)語(yǔ)句功能 按條件修改一個(gè)表中的某些列的值。 (3)語(yǔ)句舉例 UPDATE 學(xué)生表 SET 姓名=’王莉’ WHERE 學(xué)號(hào)=’2007001’ 在當(dāng)前數(shù)據(jù)庫(kù)中執(zhí)行上述語(yǔ)句后,將把“學(xué)生表”中學(xué)號(hào)等于“2007001”的記錄的姓名字段的值修改為“王莉”。 2.5.?dāng)?shù)據(jù)查詢語(yǔ)言 1)基本語(yǔ)法格式 SQL數(shù)據(jù)查詢語(yǔ)言的主要作用是把數(shù)據(jù)從基本表中提取、展示出來(lái),它只對(duì)應(yīng)一條語(yǔ)句,即SELECT語(yǔ)句。SELECT的英文的選擇的意思,該語(yǔ)句帶有豐富的選項(xiàng)(稱為子句),每個(gè)選項(xiàng)都由一個(gè)關(guān)鍵字標(biāo)識(shí),其基本語(yǔ)法格式如下: SEL
31、ECT 字段列表 [ INTO 新表名 ] FROM 源表名 [ WHERE 查詢條件 ] [ GROUP BY 分組表達(dá)式 ] [ HAVING 查找條件 ] [ ORDER BY 排序表達(dá)式 [ ASC | DESC ] ] 2)最簡(jiǎn)單的格式 SELECT * FROM 表名 3)最常用的格式 SELECT * FROM 表名 WHERE 查詢條件 這條語(yǔ)句翻譯成中文就是:從(FROM)某張表中選擇(SELECT)出所有滿足條件(WHERE)的所有字段(*)。 。。。。 二、本章涉及的實(shí)際操作 以下內(nèi)容均可在SQL Server 的查詢分析器內(nèi)進(jìn)
32、行實(shí)驗(yàn)。 1.建立數(shù)據(jù)庫(kù) 建立名為“教學(xué)管理庫(kù)”的數(shù)據(jù)庫(kù) create database教學(xué)管理庫(kù) 2.建立表 建立名為“學(xué)生表”的表 create table 學(xué)生表 ( 學(xué)號(hào) char (8) primary Key, 姓名 char(8), 性別 bit, 出生日期 datetime, 專業(yè) char(10), 年齡 int) 3.?dāng)?shù)據(jù)的插入與查詢 1)給表中插入一個(gè)數(shù)據(jù) insert into 學(xué)生表 values (2007001,王麗,1,1982-8-5,計(jì)算機(jī)應(yīng)用,26) insert into 學(xué)生表 values (2007002,張
33、華,0,1982-9-5,計(jì)算機(jī)應(yīng)用,26) insert into 學(xué)生表 values (2007003,李敏,1,1982-3-15,計(jì)算機(jī)應(yīng)用,26) 2) 查詢剛才輸入的記錄 Select * from 學(xué)生表 3) 教材29頁(yè)的例子 學(xué)生表: create table 學(xué)生表 ( 學(xué)號(hào) char (8) primary Key, 姓名 char(8), 性別 bit, 出生日期 datetime, 專業(yè) char(10), 年齡 int) 課程表: create table 課程表 ( 課程號(hào) char (7) primary Key,
34、課程名 char(20), 任課教師 char (8)) 成績(jī)表: create table 成績(jī)表 ( 學(xué)號(hào) char (8), 課程號(hào) char (7), 成績(jī) Numeric (4,2)) 給學(xué)生表中添加的記錄: insert into 學(xué)生表 values (20030001,張青,1,1982-3-15,軟件,21) insert into 學(xué)生表 values (20030002,王麗,0,1984-6-29,軟件,19) insert into 學(xué)生表 values (20030003,趙紅,0,1985-7-21,軟件,18) insert int
35、o 學(xué)生表 values (20030004,李明,1,1981-9-21,應(yīng)用,22) insert into 學(xué)生表 values (20030005,趙東,1,1981-8-19,應(yīng)用,22) 查看其中的內(nèi)容: Select * from 學(xué)生表 給課程表中添加的記錄: insert into 課程表 values (1000044,計(jì)算機(jī)網(wǎng)絡(luò),張向東) insert into 課程表 values (1000045,程序設(shè)計(jì),王洪偉) insert into 課程表 values (1000046,有能力與應(yīng)用數(shù)據(jù)庫(kù),李利) 查看其中的內(nèi)容: Select * f
36、rom 課程表 給成績(jī)表中添加的記錄: insert into 成績(jī)表 values (20030001,1000044,80.5) insert into 成績(jī)表 values (20030002,1000044,78.5) insert into 成績(jī)表 values (20030001,1000045,81.5) insert into 成績(jī)表 values (20030003,1000045,83) insert into 成績(jī)表 values (20030001,1000046,0) insert into 成績(jī)表 values (20030003,1000046,
37、0) 查看其中的內(nèi)容: Select * from 成績(jī)表 4.查詢的實(shí)例 教材31頁(yè)開(kāi)始的各種涉及查詢的實(shí)例 例1:查詢學(xué)生表中的學(xué)號(hào)、姓名、年齡、專業(yè) Select 學(xué)號(hào),姓名,年齡,專業(yè) from 學(xué)生表 例2:通配符*的使用 Select * from 學(xué)生表 例3:基于字段的表達(dá)式,注意str、year、month、as的含義:按**年**月形式顯示出生年月 Select 學(xué)號(hào),姓名,str(year(出生日期),4)+’年’+str(month(出生日期),2)+’月’ as 年月 from 學(xué)生表 例4:distinct短語(yǔ)的使用:列出所
38、有的專業(yè)名 Select distinct 專業(yè) from 學(xué)生表 例5:使用where子句:查詢所有年齡在19-20的學(xué)生情況 Select * from 學(xué)生表 where 年齡 between 19 and 21 Select * from 學(xué)生表 where 年齡>=19 and 年齡<=21 例6:不顯示null值的記錄 Select * from 成績(jī)表 where not (成績(jī) is null) 例7:列出所有軟件專業(yè)女同學(xué)的記錄 Select * from 學(xué)生表 where 專業(yè)=’軟件’ and 性別=’0’ 例8:練習(xí)日期型字段的使用:
39、列出所有1985-1-1以后出生的學(xué)生信息 Select * from 學(xué)生表 where 出生日期>’1985-1-1’ 例9:練習(xí)使用in 短語(yǔ):列出所有年齡為19,21的學(xué)生記錄 Select * from 學(xué)生表 where 年齡 in (19,21) Select * from 學(xué)生表 where 年齡=19 or 年齡=21 例10:練習(xí)使用LIKE短語(yǔ):列出所有姓王的學(xué)生的信息 Select * from 學(xué)生表 where 姓名 like ‘王%’ 例11:練習(xí)使用order by 字句:顯示所有“軟件”專業(yè)學(xué)生記錄 Select * from 學(xué)生
40、表 where 專業(yè)=’軟件’ order by 年齡 例12:練習(xí)統(tǒng)計(jì)函數(shù)的使用:在學(xué)生表中列出專業(yè)個(gè)數(shù) Select count (distinct 專業(yè)) AS 專業(yè)數(shù) from 學(xué)生表 例13:練習(xí)統(tǒng)計(jì)函數(shù)的使用:統(tǒng)計(jì)“學(xué)生表中”軟件專業(yè)學(xué)生個(gè)數(shù) Select count (*) AS 專業(yè)人數(shù) from 學(xué)生表 where 專業(yè)=’應(yīng)用’ 例14:練習(xí)統(tǒng)計(jì)函數(shù)的使用:查詢學(xué)生表中應(yīng)用專業(yè)學(xué)生的最大年齡,最小年齡,平均年齡 Select max(年齡) as 最大, min(年齡) as 最小, avg(年齡) as 平均 from 學(xué)生表 where 專業(yè)=’
41、應(yīng)用’ Select max(年齡) as 最大, min(年齡) as 最小, avg(年齡) as 平均 from 學(xué)生表 where 專業(yè)=’應(yīng)用’ 例15:列出學(xué)生表中不同專業(yè)中,各專業(yè)的學(xué)生人數(shù) Select 專業(yè), count(*) as學(xué)生數(shù) from 學(xué)生表 group by 專業(yè) 例16:練習(xí)into字句的使用 Select * into 軟件專業(yè)學(xué)生表 from 學(xué)生表 order by 學(xué)號(hào) 復(fù)雜查詢(連接查詢) 例17: 列出所有學(xué)生的學(xué)號(hào),姓名,課程號(hào)和成績(jī) Select 學(xué)生表.學(xué)號(hào),姓名,課程號(hào),成績(jī) from 學(xué)生表,成績(jī)表 where
42、學(xué)生表.學(xué)號(hào)=成績(jī)表.學(xué)號(hào) 嵌套查詢 例18:列出所有學(xué)生的學(xué)號(hào),姓名,課程號(hào),課程名和成績(jī) Select 學(xué)生表.學(xué)號(hào),姓名,課程表.課程號(hào),課程名,成績(jī) from 學(xué)生表,課程表,成績(jī)表 where 學(xué)生表.學(xué)號(hào)=成績(jī)表.學(xué)號(hào) and 課程表.課程號(hào)=成績(jī)表.課程號(hào) 例19:查詢所有女同學(xué)選修的課程號(hào)和課程名。 Select課程號(hào),課程名 from 課程表 where 課程號(hào) in (select 課程號(hào) from 成績(jī)表 where 學(xué)號(hào) in (select 學(xué)號(hào) from 學(xué)生表 where 性別=0)) 例20:平均成績(jī)小于總平均成績(jī)的學(xué)生學(xué)號(hào)、姓名、專業(yè)。
43、Select 學(xué)號(hào),姓名,專業(yè) from 學(xué)生表 where 學(xué)號(hào) in (select distinct 學(xué)號(hào) from 成績(jī)表 where 成績(jī)<(select avg(成績(jī)) from 成績(jī)表)) 2.6.?dāng)?shù)據(jù)控制語(yǔ)言 數(shù)據(jù)控制語(yǔ)言的種類很多,其中事務(wù)控制是最常用、最重要的一種。 1)事務(wù)的概念 事務(wù)(Transaction)是并發(fā)控制的基本單位,它反映了現(xiàn)實(shí)世界中需要以一個(gè)完整的單位提交的一項(xiàng)工作。SQL Server通過(guò)事務(wù)機(jī)制,將邏輯相關(guān)的一組操作捆綁在一起,以便服務(wù)器保持?jǐn)?shù)據(jù)的完整性。它是SQL復(fù)雜程序設(shè)計(jì)必不可少的內(nèi)容。 在使用事務(wù)的情況下,SQL Server可
44、以保證,要么所有的記錄要么全部處理,要么一行也不處理。如果修改了全部記錄的一半時(shí)服務(wù)器出錯(cuò)了,SQL Server會(huì)返回到以前未執(zhí)行UPDATE操作前的位置,清除它已經(jīng)修改過(guò)的數(shù)據(jù),這就是事務(wù)處理的作用。 2)事務(wù)處理控制語(yǔ)句 SQL Server中可通過(guò)以下3個(gè)語(yǔ)句完成事務(wù)控制: (1)開(kāi)始一個(gè)事務(wù):BEGIN TRAN[SACTION] 事務(wù)名。 (2)提交一個(gè)事務(wù):COMMIT [TRAN[SACTION] 事務(wù)名。 (3)回滾一個(gè)事務(wù):ROLLBACK [TRAN[SACTION]] 事務(wù)名 在數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)中,事務(wù)控制語(yǔ)句的一般用法是: 第1步:BEGIN TRAN 事務(wù)名 第2步:對(duì)數(shù)據(jù)庫(kù)進(jìn)行增、刪、改等操作 第3步:提交事務(wù)或回滾:基本邏輯是,如果沒(méi)有發(fā)生異常情況,則通過(guò)COMMIT語(yǔ)句提交事務(wù),確認(rèn)第2步的操作;否則執(zhí)行ROLLBACK回滾命令,撤消第2步的所有操作。 16
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- (賽課課件)人教部編版四年級(jí)上冊(cè)語(yǔ)文-《盤(pán)古開(kāi)天地》課件
- (課標(biāo)通用)北京市2020版高考數(shù)學(xué)大一輪復(fù)習(xí)-第二章-2-第二節(jié)-函數(shù)的單調(diào)性與最值課件
- 高考語(yǔ)文一輪復(fù)習(xí)《古代詩(shī)歌鑒賞》課件
- 湘美版二年級(jí)下冊(cè)美術(shù)-《8彩點(diǎn)點(diǎn)-》-課件
- 湘教版數(shù)學(xué)七年級(jí)下冊(cè)第6章數(shù)據(jù)的分析復(fù)習(xí)課件
- M7U1外研社一起始第11冊(cè)自制課件(教育精品)
- lesson30課件(教育精品)
- 期貨白糖質(zhì)量標(biāo)準(zhǔn)與現(xiàn)行標(biāo)準(zhǔn)的區(qū)別
- 釣魚(yú)的啟示 (2)(精品)
- 紅色春節(jié)節(jié)日英語(yǔ)課件模板
- 紅色微粒體清新年終述職報(bào)告課件模板
- 紅旗飄飄校園教育通用課件
- 秋七年級(jí)語(yǔ)文上冊(cè) 第一單元 第2課 秋天的懷念課件 (新版)新人教版
- 最新數(shù)學(xué)中考《反比例函數(shù)》專題復(fù)習(xí)精講精練課件
- 2019年秋七年級(jí)數(shù)學(xué)上冊(cè)-小專題(十一)角的計(jì)算習(xí)題課件-(新版)新人教版