




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、結構化查詢語言結構化查詢語言SQL2 SQL是結構化查詢語言是結構化查詢語言(Structured Query Language)的縮寫,其功能包括的縮寫,其功能包括數據查詢數據查詢DQL、數據操縱、數據操縱DML、數據定義數據定義DDL和數據控制和數據控制DCL四個部分。四個部分。 它是位于關系代數和關系演算基礎之上的數據庫操它是位于關系代數和關系演算基礎之上的數據庫操作語言。作語言。 SQL 語言語言簡潔、方便實用、功能齊全簡潔、方便實用、功能齊全,已,已成為目前應用最廣的關系數據庫語言。成為目前應用最廣的關系數據庫語言。3概概 述述SQL語言的發展語言的發展 SQL語言是當前最為成功、應
2、用最為廣泛的關系數據庫語言是當前最為成功、應用最為廣泛的關系數據庫語言,其發展主要經歷了以下幾個階段:語言,其發展主要經歷了以下幾個階段: 1974年由年由CHAMBERLIN和和BOYEE提出,當時稱為提出,當時稱為SEQUEL(STRUCTURED ENGLISH QUERY LANGUAGE); IBM公司對其進行了修改,并用于其公司對其進行了修改,并用于其SYSTEM R關關系數據庫系統中;系數據庫系統中; 1981年年 IBM推出其商用關系數據庫推出其商用關系數據庫SQL/DS,并將其,并將其名字改為名字改為SQL,由于,由于SQL語言功能強大,簡潔易用,語言功能強大,簡潔易用,因此
3、得到了廣泛的使用;因此得到了廣泛的使用; 1. 今天廣泛應用于各種大型數據庫,如今天廣泛應用于各種大型數據庫,如SYBASE、INFORMIX、 ORACLE、DB2、INGRES等,也用等,也用于各種小型數據庫,如于各種小型數據庫,如FOXPRO、ACCESS。4 SQL語言標準化語言標準化1. 1982年,美國國家標準化局年,美國國家標準化局(AMERICAN NATIONAL STANDARD INSTITUTE,簡稱,簡稱ANSI)開始制定開始制定SQL標準;標準;2. 1986年,美國國家標準化協會公布了年,美國國家標準化協會公布了SQL語言的第一個語言的第一個標準標準SQL86;3
4、. 1987年,國際標準化組織年,國際標準化組織(ISO)通過了通過了SQL86標準;標準;4. 1989年,國際標準化組織年,國際標準化組織(ISO)對對SQL86進行了補充,推進行了補充,推出了出了SQL89標準;標準;5. 1992年,年,ISO又推出了又推出了SQL92標準,也稱為標準,也稱為SQL2;6. 目前目前SQL99(也稱為也稱為SQL3)也被推出,并增加了面向對象也被推出,并增加了面向對象的功能。的功能。5SQL結構化查詢語言結構化查詢語言SQL語言的主要特點語言的主要特點 SQL語言類似于英語的自然語言,簡潔易用。語言類似于英語的自然語言,簡潔易用。 SQL語言是一種語言
5、是一種非過程語言非過程語言,即用戶只要提出,即用戶只要提出“干什么干什么”即可,不必管具體操作過程,也不必了解數據的存取路即可,不必管具體操作過程,也不必了解數據的存取路徑,只要指明所需的數據即可。徑,只要指明所需的數據即可。 SQL語言是一種語言是一種面向集合操作面向集合操作的語言,每個命令的操作的語言,每個命令的操作對象是一個或多個關系,結果也是一個關系。對象是一個或多個關系,結果也是一個關系。 SQL語言既是語言既是自含式語言自含式語言,又是,又是嵌入式語言嵌入式語言??瑟毩⑹埂?瑟毩⑹褂?,也可嵌入到宿主語言中。用,也可嵌入到宿主語言中。 自含式語言可以獨立使用交互命令,適用于終端用戶、
6、自含式語言可以獨立使用交互命令,適用于終端用戶、應用程序員和應用程序員和DBA;1. 嵌入式語言使其嵌入在高級語言中使用,供應用程序嵌入式語言使其嵌入在高級語言中使用,供應用程序員開發應用程序。員開發應用程序。6 SQL語言具有以下四類操作一體化的特點語言具有以下四類操作一體化的特點:數據查詢數據查詢(QUERY)數據定義數據定義(DEFINITION)u 表的定義表的定義u 視圖定義視圖定義u 索引定義索引定義 其他對象定義其他對象定義數據操縱數據操縱(MANIPULATION)u 增加數據增加數據u 刪除數據刪除數據u 修改數據修改數據數據控制數據控制(CONTROL)u 授予權限授予權限
7、u 收回權限收回權限7注意:注意:uSQL語言雖然是國際標準,不同的數據庫廠商提供的數語言雖然是國際標準,不同的數據庫廠商提供的數據庫產品都對據庫產品都對SQL部分或全部地支持;但為了商業競爭,部分或全部地支持;但為了商業競爭,大都對大都對SQL做了不同的擴充。做了不同的擴充。u為了便于講解,這里我們將以標準為了便于講解,這里我們將以標準SQL為基礎,并對其為基礎,并對其語法形式做適當簡化。語法形式做適當簡化。uSQL語言不區分大小寫。語言不區分大小寫。8介紹兩個基本概念:基本表和視圖。介紹兩個基本概念:基本表和視圖。 基本表基本表(BASE TABLE):是獨立存在的表,不是由其:是獨立存在
8、的表,不是由其它的表導出的表。一個關系對應一個基本表,一個或它的表導出的表。一個關系對應一個基本表,一個或多個基本表對應一個存儲文件。多個基本表對應一個存儲文件。 視圖視圖(VIEW):是虛擬的表,是從一個或幾個基本表導:是虛擬的表,是從一個或幾個基本表導出的表。它本身不獨立存在于數據庫中,數據庫中只出的表。它本身不獨立存在于數據庫中,數據庫中只存放視圖的定義,而不存放視圖對應的數據,這些數存放視圖的定義,而不存放視圖對應的數據,這些數據仍存放在導出視圖的基本表中。當基本表中的數據據仍存放在導出視圖的基本表中。當基本表中的數據發生變化時,從視圖中查詢出來的數據也隨之改變。發生變化時,從視圖中查
9、詢出來的數據也隨之改變。索引索引是數據庫中的一個特殊的文件,用于加快查詢的速是數據庫中的一個特殊的文件,用于加快查詢的速度。度。9SQL語言支持數據庫的三級模式結構,如下圖所示語言支持數據庫的三級模式結構,如下圖所示 外模式外模式對應于視圖和部分基本表對應于視圖和部分基本表 模式模式(概念模式概念模式)對應于基本表對應于基本表 內模式內模式對應于存儲文件。對應于存儲文件。SQL視圖視圖1視圖視圖2基本表基本表1基本表基本表2基本表基本表3基本表基本表4存儲文件存儲文件1存儲文件存儲文件2外模式外模式模式模式內模式內模式10SQL的數據描述與操作的數據描述與操作 常用常用SQL Server數據
10、類型數據類型1. 整型數據類型整型數據類型整型整型(integer)數據類型用來存儲整數。數據類型用來存儲整數。int:可以存放從可以存放從-231到到231-1范圍之間的所有正負整數。范圍之間的所有正負整數。每一個每一個int型數據需占用型數據需占用4個字節的存儲空間。個字節的存儲空間。 smallint:可以存放從可以存放從-215到到215-1之間的所有整數。之間的所有整數。tinyint:可以存放從可以存放從0到到255之間的所有整數。之間的所有整數。 bigint:可以存放從可以存放從-263到到263-1之間的所有整數。之間的所有整數。112. 非精確非精確浮點數據類型浮點數據類型
11、浮點數據類型用于存儲實數。浮點類型的數據可能會有舍入誤差。浮點數據類型用于存儲實數。浮點類型的數據可能會有舍入誤差。float:其表示范圍從其表示范圍從-1.79E+308到到1.79E+308。定義數據時,可以指定。定義數據時,可以指定存放數據的精度,精度取值范圍為存放數據的精度,精度取值范圍為1到到15 語法:語法:float(n)n:如果如果1-24則精度是則精度是7位數,位數,4字節;如果是字節;如果是25-53精度精度15位數,位數,8字字節。節。float相當于相當于float(53)real:表示范圍從表示范圍從-3.4E+38到到3.4E+38,最大可以有,最大可以有7位精確位
12、數。位精確位數。 real的同義詞是的同義詞是float(24)注意:在企業管理器中不能使用帶注意:在企業管理器中不能使用帶n的的float,float默認為默認為float(53),如果使,如果使用用7位精度的浮點數則用位精度的浮點數則用real定義。但可在查詢分析器中使用定義。但可在查詢分析器中使用float(n)12decimal和和numeric:類型功能相同,是類型功能相同,是不帶舍入不帶舍入的精確的精確的浮點數,其表示范圍最多可達的浮點數,其表示范圍最多可達38位數字,位數字,-10381038??梢灾付ň燃靶滴粩?,占用字節可以指定精度及小數位數,占用字節5-17例如例如:de
13、cimal(6,2)表示最多可存放表示最多可存放6位數字,并且小數位數字,并且小數點后有點后有2位,那么整數部分最多有位,那么整數部分最多有4位。如:位。如:3144.567,設為此類型后的值為設為此類型后的值為3144.56。Numeric等于等于decimal13 decimal和和numeric可存儲固定精度和小數位的數字數據,它可存儲固定精度和小數位的數字數據,它們的存儲長度隨精度變化而變化,最少為們的存儲長度隨精度變化而變化,最少為5字節,最多為字節,最多為17字節。字節。 l 精度為精度為19時,存儲字節長度為時,存儲字節長度為5; l 精度為精度為1019時,存儲字節長度為時,存
14、儲字節長度為9; l 精度為精度為2028時,存儲字節長度為時,存儲字節長度為13; l 精度為精度為2938時,存儲字節長度為時,存儲字節長度為17。 例如若有聲明例如若有聲明numeric(8,3),則存儲該類型數據需,則存儲該類型數據需5字節,而字節,而若有聲明若有聲明numeric(22,5),則存儲該類型數據需,則存儲該類型數據需13字節。字節。 注意:聲明精確整數型數據時,其小數位數必須小于精度;注意:聲明精確整數型數據時,其小數位數必須小于精度;在給精確整數型數據賦值時,必須使所賦數據的整數部分位在給精確整數型數據賦值時,必須使所賦數據的整數部分位數不大于列的整數部分的長度。數不
15、大于列的整數部分的長度。 14浮點型浮點型 浮點型也稱浮點型也稱近似數值型近似數值型。顧名思義,這種類型不能。顧名思義,這種類型不能提供精確表示數據的精度,使用這種類型來存儲某提供精確表示數據的精度,使用這種類型來存儲某些數值時,有可能會損失一些精度,所以它可用于些數值時,有可能會損失一些精度,所以它可用于處理取值范圍非常大且對精確度要求不是十分高的處理取值范圍非常大且對精確度要求不是十分高的數值量,如一些統計量。數值量,如一些統計量。 有兩種近似數值數據類型:有兩種近似數值數據類型:float(n)和和real,兩者,兩者通常都使用科學計數法表示數據,即形為:尾數通常都使用科學計數法表示數據
16、,即形為:尾數E階數,如階數,如5.6432E20,-2.98E10,1.287659E-9等。等。 15 real:使用:使用4字節存儲數據,表數范圍為字節存儲數據,表數范圍為-3.40E + 38 到到 3.40E + 38,數據精度為,數據精度為7位有效數字。位有效數字。 float:定義中的:定義中的n取值范圍是取值范圍是153,用于指示其精,用于指示其精度和存儲大小。當度和存儲大小。當n在在124之間時,實際上是定義之間時,實際上是定義了一個了一個real型數據,存儲長度為型數據,存儲長度為4字節,精度為字節,精度為7位位有效數字;當有效數字;當n在在2553之間時,存儲長度為之間時
17、,存儲長度為8字節,字節,精度為精度為15位有效數字。當缺省位有效數字。當缺省n時,代表時,代表n在在2553之間。之間。float型數據的數范圍為型數據的數范圍為- 1.79E+308 到到 1.79E+308。 注意:因為注意:因為float和和real不能表示精確數字故我們大不能表示精確數字故我們大多數采用多數采用numerac和和decimal數據類型數據類型163. 字符數據類型字符數據類型 char (n) :存放固定長度的非存放固定長度的非Unicode字符,每個字符占字符,每個字符占一個字節的存儲空間,一個字節的存儲空間,n值不能超過值不能超過8000。varchar (n)
18、:存放不固定長度的非存放不固定長度的非Unicode字符,字符,n值不值不能超過能超過8000。text:存放非存放非Unicode字符,其長度可自動改變,其能表字符,其長度可自動改變,其能表示的最大長度為示的最大長度為231-1個字符(個字符(2G)nchar(n):存放固定長度的存放固定長度的Unicode字符,其中字符,其中n值不能值不能超過超過4000。 nvarchar (n) :存放不固定長度的存放不固定長度的Unicode字符,其中字符,其中n值不能超過值不能超過4000。ntext:存放可多達存放可多達230-1個可變長個可變長Unicode字符(字符(1G)174. 日期和時
19、間數據類型日期和時間數據類型Datetime:用于存儲日期和時間。存儲用于存儲日期和時間。存儲從公元從公元1753年年1月月1日零時起到公元日零時起到公元9999年年12月月31日日23時時59分分59秒秒之間之間的所有日期和時間,精度為的所有日期和時間,精度為3.33毫秒。占用毫秒。占用8個字節的個字節的存儲空間。存儲空間。Smalldatetime:與與datetime數據類型類似,但其日期時數據類型類似,但其日期時間范圍較小,存儲間范圍較小,存儲從從1900年年1月月1日到日到2079年年6月月6日內日內的日期和時間,精度為的日期和時間,精度為1分鐘。占用分鐘。占用4個字節的存儲空個字節
20、的存儲空間。間。185. 貨幣數據類型貨幣數據類型這種類型的數據可以存放一個正或負的貨幣值,其存放這種類型的數據可以存放一個正或負的貨幣值,其存放的數據中小數點后總是的數據中小數點后總是4位。位。money:表示范圍為表示范圍為-922337203685477.5808到到922337203685477.5807,每個,每個money類型的數據占用類型的數據占用8個字節個字節的存儲空間。的存儲空間。smallmoney:與與money數據類型類似,但其存儲的貨幣數據類型類似,但其存儲的貨幣值范圍比值范圍比money數據類型小,為數據類型小,為-214748.3648到到214748.3647。
21、占用。占用4個字節個字節的存儲空間。的存儲空間。6. 位數據類型位數據類型 bit:這種類型的數據僅有兩種取值:這種類型的數據僅有兩種取值:0或或1,長度為,長度為1字字節。適用于存儲一個邏輯值。節。適用于存儲一個邏輯值。197. 二進制數據類型二進制數據類型這種數據類型用來存儲二進制位串。這種數據類型用來存儲二進制位串。binary (n) :n為為18000,數據的存儲長度是固定的,數據的存儲長度是固定的,存存儲儲n個字節的二進制位串占用個字節的二進制位串占用n+4個字節的存儲空間個字節的存儲空間。當輸入的二進制數據長度小于當輸入的二進制數據長度小于n字節時,余下部分填字節時,余下部分填0
22、。 varbinary(n) :數據的存儲長度是變化的,占用實際所數據的存儲長度是變化的,占用實際所輸入數據的長度加上輸入數據的長度加上4字節的存儲空間。字節的存儲空間。image:用于存儲照片或圖片等信息。最多可存儲長達用于存儲照片或圖片等信息。最多可存儲長達231-1個字節的數據個字節的數據2G.208. 特殊數據類型特殊數據類型 timestamp:亦稱時間戳數據類型,占亦稱時間戳數據類型,占8個字節個字節的空間,的空間,它提供數據庫范圍內的惟一值它提供數據庫范圍內的惟一值。任何一個表中只能有。任何一個表中只能有一個一個timestamp列,該列的值在該行數據修改時由列,該列的值在該行數
23、據修改時由SQL Server自動更新,自動更新,反應了數據庫中數據修改的相對順反應了數據庫中數據修改的相對順序,是一個二進制格式的遞增序列序,是一個二進制格式的遞增序列。 Uniqueidentifier:這種數據類型用于存儲一個這種數據類型用于存儲一個16字節字節長長的二進制數據,稱為的二進制數據,稱為全局惟一標識符代碼全局惟一標識符代碼(Globally Unique Identifier,簡寫為,簡寫為GUID)。在)。在SQL Server中,中,用用NEWID函數函數來生成來生成GUID。即使在不同的計算機及。即使在不同的計算機及不同的數據庫中,也不會有相同的不同的數據庫中,也不會
24、有相同的GUID。21 空值空值(NULL)空值不同于空白空值不同于空白(空字符串空字符串)或數值零,通常表示未填寫、未或數值零,通常表示未填寫、未知知(Unknown)、不可用或將在以后添加的數據。、不可用或將在以后添加的數據。22創建數據庫創建數據庫 例例1:創建一個數據庫名為:創建一個數據庫名為Student1,數據邏輯文件名數據邏輯文件名student1_data,物理文件,物理文件student1.mdf,初始大小,初始大小10MB,最最大尺寸無限制,增長速度大尺寸無限制,增長速度10%,日志文件邏輯名,日志文件邏輯名student1_log,物理文件名,物理文件名Student1.
25、ldf,初始大小,初始大小1MB,最,最大大5MB,增長速度,增長速度1MB 例例2:創建一個數據庫,名稱為:創建一個數據庫,名稱為students,有有10M,20M兩個數兩個數據文件,和兩個據文件,和兩個10M事務日志文件。數據文件邏輯名事務日志文件。數據文件邏輯名student1,student2,物理文件物理文件student1.mdf,student2.mdf,主,主文件文件 是是student1,由由primary指定,兩個數據文件最大分別為指定,兩個數據文件最大分別為無限制和無限制和100M,增長速度分別為,增長速度分別為10%和和1M,日志邏輯文件,日志邏輯文件studentl
26、og1和和studentlog2,物理文件,物理文件studentlog1.ldf和和studentlog2.ld最大尺寸分別是最大尺寸分別是50M,文件增長方式,文件增長方式1M23數據庫的修改數據庫的修改(注意文件組注意文件組) 把一個包含兩個數據文件的文件組和一個事務日志文件添加把一個包含兩個數據文件的文件組和一個事務日志文件添加到到students數據庫中數據庫中Alter database studentsAdd filegroup data1Alter database studentsAdd file( name=student3,filename=e:student3.ndf,
27、 size=1,maxsize=50,filegrowth=1),(name=student4,filename=“e:student4.ndf, size=2,maxsize=50,filegrowth=10%) to filegroup data1Alter database studentsAdd Log file(name=studentlog3,filename=e:studentlog3.ldfSize=1,maxsize=50,filegrowth=1)24 其他修改數據庫其他修改數據庫Alter database Add Log file filespec|Add FileGr
28、oup filegroup_name|Add File file filespec,.n to filegroup filegroup_name|Modify name=newDb_name |Remove file logic_name|Remove filegroup filegroup_name|Modify file filespec|Modify filegroup filegroup_name其他數據庫操作參看聯機幫助:其他數據庫操作參看聯機幫助:Alter database A. B. C. D. E. F.25 定義基表定義基表1. 建立基表建立基表 語法:語法:CREATE
29、TABLE ( 屬性約束屬性約束 , 屬性約束屬性約束 , 屬性約束屬性約束,表的約束表的約束);26例例1.建立建立student表表CREATE TABLE student(Sno CHAR(5),Sname VARCHAR (8) NOT NULL,Ssex CHAR(2) CHECK (Ssex IN (男男,女女),Sage SMALLINT CHECK(Sage BETWEEN 10 AND 50),Sdept VARCHAR(5),PRIMARY KEY (Sno);27完整性約束完整性約束 Primary Key 約束約束 Foreign key 約束約束 Unique 約束約
30、束 Check約束約束 Default約束約束 為空性約束為空性約束281、實體完整性約束、實體完整性約束 在上例中,如果定義關系在上例中,如果定義關系student的完整性約束:實體的完整性約束:實體完整性約束完整性約束(使用關鍵字使用關鍵字PRIMARY KEY)和用戶自定和用戶自定義的完整性約束義的完整性約束(使用關鍵字使用關鍵字CHECK)。CREATE TABLE student(Sno CHAR(5) PRIMARY KEY,Sname VARCHAR (8),Ssex CHAR(2) CHECK (Ssex IN (男男,女女),Sage SMALLINT CHECK(Sage
31、BETWEEN 10 AND 50),Sdept VARCHAR(5) );29 SQL中,當關系的主鍵只有一個屬性時,實體完整性約束中,當關系的主鍵只有一個屬性時,實體完整性約束既可以定義在既可以定義在屬性約束中,也可以定義在表的約束屬性約束中,也可以定義在表的約束中。中。 例例1還可以定義為:還可以定義為:CREATE TABLE student(Sno CHAR(5),Sname VARCHAR (8) NOT NULL,Ssex CHAR(2) CHECK(Ssex IN (男男,女女),Sage SMALLINT CHECK(Sage BETWEEN 10 AND 50),Sdept
32、 VARCHAR(5),PRIMARY KEY (Sno);30 一個表中只能定義一個表中只能定義一個主關鍵字一個主關鍵字,但當表中的鍵碼不止一,但當表中的鍵碼不止一個時,其他的鍵碼可以用關鍵字個時,其他的鍵碼可以用關鍵字UNIQUE說明,可以在屬說明,可以在屬性約束中說明,也可在表的約束中說明。例如學生表中性約束中說明,也可在表的約束中說明。例如學生表中sname也是鍵碼:也是鍵碼:CREATE TABLE student(Sno CHAR(5),Sname VARCHAR (8) UNIQUE,Ssex CHAR(2) CHECK (Ssex IN (男男,女女),Sage SMALLIN
33、T CHECK(Sage BETWEEN 10 AND 50),Sdept VARCHAR(5),PRIMARY KEY (Sno); 也可以在最后用也可以在最后用UNIQUE(Sname)定義。定義。31例:創建下表例:創建下表StuSno學號學號Char(8)主鍵主鍵Sname姓名姓名Varchar(10)不重復不重復Sage年齡年齡Smallint1050Sdept系系Varchar(50)不能為空不能為空32分析分析:實體完整性的檢查實際上作用于:實體完整性的檢查實際上作用于插入和修插入和修改記錄的操作改記錄的操作,對刪除記錄操作并沒有必要。另,對刪除記錄操作并沒有必要。另外,外,SQ
34、L要想有效的實施實體完整性約束,在鍵要想有效的實施實體完整性約束,在鍵碼上建立索引是非常有必要的碼上建立索引是非常有必要的!332、參照完整性約束、參照完整性約束SQL中,當關系的外鍵只有一個屬性時,參照完整性約中,當關系的外鍵只有一個屬性時,參照完整性約束既可以定義在屬性約束中束既可以定義在屬性約束中(用關鍵字用關鍵字REFERENCES),也可以定義在表的約束中也可以定義在表的約束中(用關鍵字用關鍵字FOREIGN KEY REFERENCES)。例例2.定義成績表定義成績表SCCREATE TABLE SC(Sno CHAR(5) REFERENCES student(Sno) ,Cno
35、 CHAR(5) REFERENCES course(Cno) ,Score FLOAT CHECK(Score BETWEEN 0.0 AND 100.0),PRIMARY KEY(Sno,Cno);34 例例2也可定義為:也可定義為:CREATE TABLE SC(Sno CHAR(5),Cno CHAR(5),Score FLOAT CHECK (Score BETWEEN 0.0 AND 100.0),PRIMARY KEY (Sno,Cno),FOREIGN KEY (Sno) REFERENCES student(Sno) ,FOREIGN KEY (Cno) REFERENCES
36、 course(Cno);353、用戶自定義完整性約束、用戶自定義完整性約束 第三類重要的約束是用戶自定義的約束,這類約束一第三類重要的約束是用戶自定義的約束,這類約束一般是用于限制某些屬性的取值范圍。般是用于限制某些屬性的取值范圍。這些約束可用如這些約束可用如下兩者之一來表示:下兩者之一來表示:1、對關系模式的定義中對屬性的約束、對關系模式的定義中對屬性的約束2、對域的約束,隨后把域的說明為上述的的域、對域的約束,隨后把域的說明為上述的的域 基于屬性的約束包括基于屬性的約束包括NOT NULL約束及約束及CHECK約束。約束。36 如例如例1:CREATE TABLE student(Sno
37、 CHAR(5),Sname VARCHAR (8) NOT NULL,Ssex CHAR(2) CHECK (Ssex IN (男男,女女),Sage SMALLINT CHECK(Sage BETWEEN 10 AND 50),Sdept VARCHAR(5),PRIMARY KEY (Sno); CHECK約束中還可以使用約束中還可以使用其他的算術比較運算符其他的算術比較運算符及及嵌套嵌套查詢查詢來對屬性進行約束。來對屬性進行約束。374、默認值、默認值 在定義表時可為某些字段設置一定的默認值。使用在定義表時可為某些字段設置一定的默認值。使用DEFAULT來進行定義。來進行定義。 我們可
38、對例我們可對例1進行修改,使學生年齡的默認值為進行修改,使學生年齡的默認值為19CREATE TABLE student(Sno CHAR(5) PRIMARY KEY,Sname VARCHAR (8) NOT NULL,Ssex CHAR(2) CHECK (Ssex IN (男男,女女),Sage smallint DEFAULT 19,Sdept VARCHAR(5);38語法格式:語法格式:CREATE TABLEdatabase_name.owner.|owner. table_name ( | column_name AS computed_column_expression |
39、:=CONSTRAINT constraint_name | PRIMARY KEY | UNIQUE , . n ) ON filegroup|DEFAULT 395.2 表的創建與維護(其他例)表的創建與維護(其他例)例例5-1 簡單的表定義。簡單的表定義。USE NewSalesGOCREATE TABLE employee ( employee_id char(4) NOT NULL,employee_name char(8) NOT NULL,sex char(2) NOT NULL,birth_date datetime NOT NULL,hire_date datetime NO
40、T NULL,address varchar(50),telephone char(8),wages money,department_id char(4) NOT NULL,resume text NOT NULL)40表的創建與維護表的創建與維護例例5-2 為表指定文件組。為表指定文件組。CREATE TABLE NewSales.dbo.supplier ( supplier_idchar(5)NOT NULL, supplier_name varchar(50) NOT NULL, linkman_name varchar(8), address varchar(50), teleph
41、onechar(12) NOT NULL)ON PRIMARY41例例5-3 對對計算列計算列使用表達式。使用表達式。CREATE TABLE salarys ( 姓名姓名 varchar(10), 基本工資基本工資 money, 獎金獎金 money, 總計總計 AS 基本工資基本工資+獎金獎金)425.2 表的創建與維護表的創建與維護例例5-4 定義表定義表autouser自動獲取用戶名稱。自動獲取用戶名稱。CREATE TABLE autouser ( 編號編號 int identity(1,1) NOT NULL, 用戶代碼用戶代碼 varchar(18), 登錄時間登錄時間 AS G
42、etdate(), 用戶名用戶名 AS User_name()435.2 表的創建與維護表的創建與維護例例5-5 創建臨時表。創建臨時表。CREATE TABLE #students ( 學號學號 varchar(8), 姓名姓名 varchar(10), 性別性別 varchar(2), 班級班級 varchar(10)44用企業管理器來進行表的創建用企業管理器來進行表的創建關系圖關系圖45 表的修改表的修改【查看【查看Alter Table幫助示例幫助示例A-G】修改表結構的修改表結構的語法為語法為:ALTER TABLE ADD 完整性約束完整性約束Alter DROP CONSTRAI
43、NT constraint_nameDROP COLUMN column_name;注意:刪除列受到諸多限制注意:刪除列受到諸多限制例:修改例:修改Student表,增加表,增加sclass屬性。屬性。ALTER TABLE studentADD sclass CHAR(5);46 表的刪除表的刪除刪除表的刪除表的語法形式為語法形式為:DROP TABLE ;例:刪除表例:刪除表studentDROP TABLE student;47CREATE TABLE student(Sno CHAR(5),Sname VARCHAR (8) NOT NULL,Ssex CHAR(2) CHECK (S
44、sex IN (男男,女女),Sage SMALLINT CHECK(Sage BETWEEN 10 AND 50),Sdept VARCHAR(5),PRIMARY KEY (Sno); 48 向表中增添記錄向表中增添記錄向表中增添記錄向表中增添記錄分為兩種:分為兩種:增添一條記錄增添一條記錄,增添多條記錄增添多條記錄。這里先講述前者,我們學習了選擇操作后再講述后一種。這里先講述前者,我們學習了選擇操作后再講述后一種。增添記錄的語法增添記錄的語法形式為:形式為:INSERT INTO 屬性列表屬性列表 VALUES(常量列表常量列表);例:向例:向student表增添記錄劉立,表增添記錄劉立
45、,20歲歲,IS系,男系,男 ,學號為學號為7INSERT INTO student VALUES(7,劉立劉立,Male,19,IS);注意:注意:SQL中,中,字符常量字符常量通常要用通常要用單引號單引號括起來,數括起來,數字常量直接書寫,日期常量多數情況用單引號括起字常量直接書寫,日期常量多數情況用單引號括起來,空值用來,空值用NULL,判斷是否為空值用判斷是否為空值用IS NOT NULL等。等。49 索索 引引 建立索引的語法形式為:建立索引的語法形式為:CREATE UNIQUE INDEX ON (屬性名及排列次屬性名及排列次序的列表序的列表);其中,排列次序為升序其中,排列次序
46、為升序(ASC)或降序或降序(DESC),默認情況下為升序。,默認情況下為升序。 例:在例:在student的的sno上建立唯一索引上建立唯一索引idx_snoCREATE UNIQUE INDEX idx_sno ON student(sno);說明說明 :聚集索引確定表中數據的物理順序。聚集索引類似于電:聚集索引確定表中數據的物理順序。聚集索引類似于電話簿,后者按姓氏排列數據。話簿,后者按姓氏排列數據。由于聚集索引規定數據在表中由于聚集索引規定數據在表中的物理存儲順序,因此一個表只能包含一個聚集索引的物理存儲順序,因此一個表只能包含一個聚集索引。但該。但該索引可以包含多個列(組合索引),就
47、像電話簿按姓氏和名索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。字進行組織一樣。 CREATE UNIQUE CLUSTERED INDEX Idx1 ON t1(c) 50 查看索引查看索引系統存儲過程系統存儲過程sp_helpindex可以返回表的所有索引信可以返回表的所有索引信息,其息,其語法形式如下:語法形式如下:sp_helpindex objname=nameobjname=name 指定當前數據庫中的表的名稱指定當前數據庫中的表的名稱例:例:sp_helpindex student 修改索引修改索引系統存儲過程系統存儲過程sp_rename可以用來更改索引的
48、名稱,可以用來更改索引的名稱,其語法形式如下:其語法形式如下: sp_renameobjname=object_name, n e w n a m e = n e w _ n a m e , objtype = object_type 51 舉例舉例更改更改student表中的索引表中的索引idx_sno名稱為名稱為idx_sno _end,其程序清單如下:其程序清單如下:sp_rename student.idx_sno, idx_sno _end, index 刪除索引的語法為:刪除索引的語法為:DROP INDEX ;例:刪除索引例:刪除索引idx_snoDROP INDEX stude
49、nt.idx_sno;52基本查詢基本查詢 SQL中數據查詢的語法形式為:中數據查詢的語法形式為:SELECT DISTINCT FROM WHERE 條件表達式條件表達式GROUP BY 屬性列表屬性列表 HAVING 條件表達式條件表達式ORDER BY 屬性列表屬性列表531、最簡單的查詢、最簡單的查詢(單個表上投影操作單個表上投影操作)例:查詢全體學生的詳細信息例:查詢全體學生的詳細信息SELECT *FROM student;注意注意:*號表示按表中屬性定義的順序從左到右號表示按表中屬性定義的順序從左到右顯示所有的屬性值。顯示所有的屬性值。例:查詢全體學生的姓名和年齡例:查詢全體學生
50、的姓名和年齡SELECT sname,sage FROM student;542、去掉查詢結果中的副本、去掉查詢結果中的副本那么那么SQL中使用中使用DISTINCT來去掉查詢結果中的副本。來去掉查詢結果中的副本。例:查詢選了例:查詢選了1號課或號課或2號課的學生的學號。號課的學生的學號。SELECT DISTINCT snoFROM scWHERE cno =1 OR cno =2;553、屬性的別名、屬性的別名有時我們希望由查詢操作生成的關系的屬性與該查詢有時我們希望由查詢操作生成的關系的屬性與該查詢FROM子句后的關系的屬性有所區別,那么可以在子句后的關系的屬性有所區別,那么可以在SEL
51、ECT子句中的屬性后面用關鍵字子句中的屬性后面用關鍵字AS加上別名來加上別名來實現。實現。 例:查詢所有學生的學號和姓名,新的關系中例:查詢所有學生的學號和姓名,新的關系中sname用用name表示表示SELECT sno, sname AS nameFROM student;564、在投影中進行計算、在投影中進行計算可以在可以在SELECT子句中同類型的屬性、屬性與同類子句中同類型的屬性、屬性與同類型的常量、同類型的常量之間進行型的常量、同類型的常量之間進行代數運算、字符代數運算、字符連接運算連接運算,還可以利用,還可以利用系統提供的函數系統提供的函數等。等。 例:例: 顯示學生的姓名及加一
52、歲后的年齡。顯示學生的姓名及加一歲后的年齡。SELECT sname, sage+1FROM student;例:例: 兩個特殊的查詢兩個特殊的查詢SELECT sname,是是 AS p1, sage+1 AS p2 ,歲歲 AS p3FROM student;SELECT sno, cno, garde*1.1 AS p1FROM SC;575、帶選擇操作的查詢、帶選擇操作的查詢SQL中通過中通過WHERE子句構造查詢操作的選擇條件,即子句構造查詢操作的選擇條件,即條條件表達式件表達式;可以使用;可以使用、=、=、=、BETWEENAND等算術比較運算符構造查詢條件;等算術比較運算符構造查
53、詢條件;運運算對象算對象可以是常量、可以是常量、FROM后的表的屬性后的表的屬性等。并且可以等。并且可以通過通過AND、OR等將各個選擇條件連接起來。等將各個選擇條件連接起來。條件表達式條件表達式對表中每一個元組進行運算,結果是對表中每一個元組進行運算,結果是TRUE或或FALSE;當為當為TRUE時,即符合查詢條件。時,即符合查詢條件。例:例: 查詢年齡小于查詢年齡小于19歲的歲的IS系的學生。系的學生。SELECT *FROM studentWHERE sage 2002-11-15;628、BETWEENANDWHERE子句中的子句中的x BETWEEN a AND b與與x=a AND
54、 x= 3 AND ccredit 80ORDER BY ss DESC;68 SQL查詢中子句的順序查詢中子句的順序到目前為止,我們已經遇到出現在到目前為止,我們已經遇到出現在select-from-where查詢中的所有查詢中的所有6種子句:種子句:SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY等。等。其中,只有前兩個是必需的。其他任何附加的子其中,只有前兩個是必需的。其他任何附加的子句都必須按照上述的順序出現。句都必須按照上述的順序出現。69sno snamessexsage sdept1Mary Female 19CS2JohnMale1
55、8MA3JakeMale19CS4MikeMale20MA5BillMale18CSStudentcnocnamecpno ccredit1Database532Computer Basic43MIS724OS245Data Structure636C+237Software Engineer63Coursesno cno score118712781388216723923193348941785283SC70 當在當在FROM子句后面寫上多個關系名,并且有選擇子句后面寫上多個關系名,并且有選擇操作時,即條件連接。操作時,即條件連接。 例例:查詢學習了查詢學習了1號課的學生的名字。號課的學生
56、的名字。SELECT snameFROM student, scWHERE student.sno = sc.sno and o = 1其中,其中, student.sno = sc.sno為連接條件。為連接條件。注意:注意:student.sno和和sc.sno的寫法為的寫法為.,即當在不同表中出現同名屬性時的區分方法。即當在不同表中出現同名屬性時的區分方法。連接查詢連接查詢711、元組變量、元組變量 有時會出現一種特殊的連接查詢,即關系自身的連有時會出現一種特殊的連接查詢,即關系自身的連接。那么此時在查詢條件中就需要區分兩個內容上接。那么此時在查詢條件中就需要區分兩個內容上一樣的關系,這是
57、我們引入了元組變量。這有點類一樣的關系,這是我們引入了元組變量。這有點類似屬性別名。似屬性別名。 例例: 查詢和查詢和bill同一個系的學生的學號和姓名。假同一個系的學生的學號和姓名。假設我們不知道劉晨是那個系的。設我們不知道劉晨是那個系的。SELECT b.snameFROM student AS a, student AS bWHERE a.sdept = b.sdept AND a.sname = bill;其中元組變量其中元組變量a和和b分別用于查詢分別用于查詢bill及要找的學生的系及要找的學生的系72sno snamessexsage sdept1Mary Female 19CS2
58、JohnMale18MA3JakeMale19CS4MikeMale20MA5BillMale18CSStudent as asno snamessexsage sdept1Mary Female 19CS2JohnMale18MA3JakeMale19CS4MikeMale20MA5BillMale18CSStudent as b73連接連接(Join) 連接也稱為連接也稱為連接,是從兩個關系的笛卡爾積中連接,是從兩個關系的笛卡爾積中選取屬性間滿足一定條件的元組。記作:選取屬性間滿足一定條件的元組。記作: trXtsY為連接條件,為連接條件,為比較運算。為比較運算。連接可等價表示為連接可等價
59、表示為:FR S=F(RS)RrsS=t rts |trRtsStrXtsYabc123234333Bae1223CB. abcC.ae1231223423BB.a=C.aC74 有時,元組變量也可以用于簡化書寫,例如以下查有時,元組變量也可以用于簡化書寫,例如以下查詢修改為:詢修改為:SELECT student.snameFROM student, scWHERE student.sno = sc.sno and o = 1;改為:改為:SELECT s.snameFROM student AS s, scWHERE s.sno = sc.sno and o = 1;75嵌套查詢嵌套查詢1
60、、嵌套查詢、嵌套查詢嵌套查詢即在嵌套查詢即在WHERE子句中出現子句中出現select-from-where表表達式的查詢,該達式的查詢,該select-from-where表達式也叫表達式也叫子查詢子查詢。有些連接操作可以用子查詢等價實現,而有的查詢則必有些連接操作可以用子查詢等價實現,而有的查詢則必須要使用嵌套查詢。須要使用嵌套查詢。子查詢按查詢結果分為子查詢按查詢結果分為產生標量值的子查詢產生標量值的子查詢和和查詢結果查詢結果為關系的子查詢為關系的子查詢。762、產生標量值的子查詢、產生標量值的子查詢某些某些select-from-where表達式的查詢結果剛好是一個屬性表達式的查詢結果
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學生桌椅凳管理制度
- 學院體育隊管理制度
- 安全最基本管理制度
- 安全風險點管理制度
- 完善新業態管理制度
- 寶雞小飯桌管理制度
- 實驗服領用管理制度
- 客戶公海池管理制度
- 宣傳部預算管理制度
- 2024-2025學年初中英語七年級下冊期末考試綜合測試卷及參考答案
- 四川電網新建電源并網服務指南(2025年)
- 事故隱患內部報告獎勵制度
- JBT 11699-2013 高處作業吊籃安裝、拆卸、使用技術規程
- 爆破安全生產獎懲管理制度
- 尊法、學法、守法、用法分析
- (完整版)鋼筋加工棚驗算
- 動物生物化學(全套577PPT課件)
- 十進制轉二進制(說課稿)
- 新能源汽車私人領域購車補貼確認表
- 外墻、屋面節能保溫旁站監理記錄表(共3頁)
評論
0/150
提交評論