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