




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院第三章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL本章主要介紹標(biāo)準(zhǔn)SQL的數(shù)據(jù)定義、數(shù)據(jù)查詢(xún)、數(shù)據(jù)更新數(shù)據(jù)刪除等語(yǔ)句的基本用法以及視圖的創(chuàng)建和使用。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院結(jié)構(gòu)化查詢(xún)語(yǔ)言SQL(structuredquerylanguage)是一種介于關(guān)系代數(shù)和關(guān)系演算之間的語(yǔ)言,其功能包括數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)查詢(xún)和數(shù)據(jù)控制四個(gè)方面,是關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的國(guó)際標(biāo)準(zhǔn)。SQL86:第一個(gè)SQL標(biāo)準(zhǔn),ANSI(AmericanNationalStandardsInstitute,美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì))。SQL89:1989年作了少許改進(jìn)SQL92:也被稱(chēng)作SQL2,ANSI和ISO(InternationalOrganizationforStandardization,國(guó)際標(biāo)準(zhǔn)化組織)作了較大改動(dòng)和完善,這是目前絕大多數(shù)商用RDBMS支持的版本。SQL99:也被稱(chēng)作SQL3,是在SQL92的基礎(chǔ)上擴(kuò)展而成的。SQL2003:也稱(chēng)為SQL4,擴(kuò)展了對(duì)XML的支持。此后又依次推出了SQL2006和SQL2008。SQL山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院第三章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL3.1銀行數(shù)據(jù)庫(kù)3.2數(shù)據(jù)定義3.3數(shù)據(jù)查詢(xún)3.4數(shù)據(jù)操縱3.5視圖山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院3.1銀行數(shù)據(jù)庫(kù)支行:branch(branch_name,branch_city,assets)客戶:customer(customer_id,customer_name,customer_street,customer_city)存款賬戶:account(account_number,branch_name,balance)貸款賬戶:loan(loan_number,branch_name,amount)儲(chǔ)蓄:deposits(customer_id,account_number)借貸:borrows(customer_id,loan_number)山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院3.2數(shù)據(jù)定義3.2.1數(shù)據(jù)庫(kù)的定義3.2.2表的定義3.2.3索引的定義數(shù)據(jù)定義SQLServer數(shù)據(jù)庫(kù)由包含數(shù)據(jù)的表集合和其他對(duì)象(如視圖、索引、存儲(chǔ)過(guò)程、觸發(fā)器、用戶、角色等)組成,支持三級(jí)模式結(jié)構(gòu)。其中用戶模式對(duì)應(yīng)于視圖,邏輯模式對(duì)應(yīng)于基本表,物理模式對(duì)應(yīng)于存儲(chǔ)文件、索引等。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院3.2.1數(shù)據(jù)庫(kù)的定義數(shù)據(jù)庫(kù)是一個(gè)存儲(chǔ)空間,用于存放數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)對(duì)象。SQLServer數(shù)據(jù)庫(kù)對(duì)象包括:關(guān)系圖、表、視圖、存儲(chǔ)過(guò)程、用戶、角色、規(guī)則、默認(rèn)、用戶定義的數(shù)據(jù)類(lèi)型以及用戶定義的函數(shù)。數(shù)據(jù)庫(kù)對(duì)象及其含義關(guān)系圖:描述一些表及它們之間的關(guān)系,包含鍵與鍵之間的約束表:是數(shù)據(jù)的集合,用來(lái)存儲(chǔ)數(shù)據(jù)和操作數(shù)據(jù)的邏輯結(jié)構(gòu)視圖:是虛表,數(shù)據(jù)仍存放在相應(yīng)基本表中,可簡(jiǎn)化用戶的操作,可與授權(quán)機(jī)制相結(jié)合實(shí)現(xiàn)數(shù)據(jù)安全性存儲(chǔ)過(guò)程:是SQLServer服務(wù)器上一組預(yù)先定義并編譯好的T-SQL語(yǔ)句,可用于性能優(yōu)化和控制訪問(wèn)用戶:在特定的數(shù)據(jù)庫(kù)內(nèi)創(chuàng)建,并關(guān)聯(lián)一個(gè)登錄名,可通過(guò)給用戶授權(quán)來(lái)控制用戶對(duì)數(shù)據(jù)的使用角色:是權(quán)限的集合,可為一組具有相同權(quán)限的用戶創(chuàng)建角色,通過(guò)角色來(lái)管理數(shù)據(jù)庫(kù)權(quán)限數(shù)據(jù)庫(kù)對(duì)象及其含義規(guī)則:實(shí)現(xiàn)check約束保證數(shù)據(jù)的完整性默認(rèn):針對(duì)表中的列的設(shè)置,如果某列沒(méi)被指定為任何值時(shí)可使用該值用戶定義的數(shù)據(jù)類(lèi)型:如果多個(gè)表的列要存儲(chǔ)相同類(lèi)型的數(shù)據(jù),用戶可基于基本數(shù)據(jù)類(lèi)型來(lái)定義新的數(shù)據(jù)類(lèi)型。用戶定義的函數(shù):由多個(gè)T-SQL語(yǔ)句組成,用于封裝代碼以便重新使用。數(shù)據(jù)庫(kù)文件SQLServer2000將數(shù)據(jù)庫(kù)映射為一組操作系統(tǒng)文件,數(shù)據(jù)和日志信息分別存儲(chǔ)在不同的文件中。SQLServer數(shù)據(jù)庫(kù)中有三種物理文件:主數(shù)據(jù)文件、輔助數(shù)據(jù)文件和日志文件。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院1、主數(shù)據(jù)文件主數(shù)據(jù)文件也稱(chēng)為基本數(shù)據(jù)文件,是數(shù)據(jù)庫(kù)的起點(diǎn),包含了數(shù)據(jù)庫(kù)的初始信息,并記錄數(shù)據(jù)庫(kù)還擁有哪些文件。每個(gè)數(shù)據(jù)庫(kù)有且只能有一個(gè)主數(shù)據(jù)文件。主數(shù)據(jù)文件是數(shù)據(jù)庫(kù)必須的文件。其文件擴(kuò)展名是*.mdf。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院2、輔助數(shù)據(jù)文件輔助數(shù)據(jù)庫(kù)文件又稱(chēng)從屬文件,用于保存所有主數(shù)據(jù)文件中容納不下的數(shù)據(jù),不是數(shù)據(jù)庫(kù)必須的文件。一個(gè)數(shù)據(jù)庫(kù)中可以沒(méi)有、也可以有一個(gè)或多個(gè)輔助數(shù)據(jù)文件。其文件擴(kuò)展名是*.ndf。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院3、日志文件是數(shù)據(jù)庫(kù)故障恢復(fù)的重要手段和方法,用于記錄對(duì)數(shù)據(jù)庫(kù)的各種操作及所涉及的相關(guān)數(shù)據(jù)。每個(gè)數(shù)據(jù)庫(kù)至少擁有一個(gè)日志文件,日志文件的大小最少是1MB。其文件擴(kuò)展名是*.ldf。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院一、文件組為了有助于數(shù)據(jù)布局和管理任務(wù),可將多個(gè)數(shù)據(jù)文件集合起來(lái)形成一個(gè)整體,這個(gè)整體就是文件組,每個(gè)組有一個(gè)組名。一個(gè)數(shù)據(jù)文件只能存在于一個(gè)文件組中,日志文件不屬于任何文件組。SQLServer2000的文件組有三種類(lèi)型:主文件組、用戶定義文件組、默認(rèn)文件組
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院1、主文件組主文件組中包含著主數(shù)據(jù)文件以及相關(guān)內(nèi)容。在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),系統(tǒng)會(huì)自動(dòng)創(chuàng)建主文件組,并將主數(shù)據(jù)文件及系統(tǒng)表的所有頁(yè)都分配到主要文件組中。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院2、用戶定義文件組由用戶通過(guò)SQLServer企業(yè)管理器創(chuàng)建的文件組稱(chēng)為用戶定義文件組(User-DefinedFilegroup)。該組中包含邏輯上一體的數(shù)據(jù)文件和相關(guān)信息,大多數(shù)數(shù)據(jù)庫(kù)只需要一個(gè)文件組和一個(gè)日志文件就可很好的運(yùn)行。但如果庫(kù)中的文件很多,就要?jiǎng)?chuàng)建用戶定義文件組,以便管理。使用時(shí),可以通過(guò)企業(yè)管理器或Transact-SQL語(yǔ)句中的filegroup子句指定需要的用戶定義文件組。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院3、默認(rèn)文件組在每個(gè)數(shù)據(jù)庫(kù)中,同一時(shí)間只能有一個(gè)文件組是默認(rèn)文件組(DefaultFilegroup)。當(dāng)進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),如果不指定文件組,則系統(tǒng)自動(dòng)選擇默認(rèn)文件組。可使用Transact-SQL語(yǔ)句中的alterdatabase語(yǔ)句指定數(shù)據(jù)庫(kù)的默認(rèn)文件組。在不特別指定的情況下,系統(tǒng)將主要文件組認(rèn)定為默認(rèn)文件組。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院二、數(shù)據(jù)庫(kù)的物理存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)文件的結(jié)構(gòu)按照層次可以劃分為頁(yè)面(page)和擴(kuò)展盤(pán)區(qū)(extent)。
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院1、頁(yè)面是數(shù)據(jù)存儲(chǔ)的基本單位。頁(yè)的尺寸是8KB。每頁(yè)的開(kāi)頭是96B的頁(yè)頭,在頁(yè)頭存儲(chǔ)頁(yè)碼、頁(yè)類(lèi)型、頁(yè)上剩余的自由空間以及擁有此頁(yè)對(duì)象的ID等有關(guān)頁(yè)的系統(tǒng)信息。數(shù)據(jù)庫(kù)中的每個(gè)頁(yè)面中只能存儲(chǔ)一種數(shù)據(jù)庫(kù)對(duì)象的數(shù)據(jù)。一個(gè)頁(yè)面可以存放多條記錄,但一條記錄不能跨頁(yè)存放,即SQLServer2000中一條記錄不能超過(guò)8060B。數(shù)據(jù)文件中的頁(yè)有8種類(lèi)型:數(shù)據(jù)頁(yè)、索引頁(yè)、文本/圖像頁(yè)、全局分配映射表頁(yè)、頁(yè)空閑空間、索引分配映射表頁(yè)、大容量更改映射表頁(yè)和差異更改映射表頁(yè)。日志文件中不包含頁(yè),僅含有一系列的日志記錄。
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院2、擴(kuò)展盤(pán)區(qū)由8個(gè)連續(xù)頁(yè)面組成的數(shù)據(jù)結(jié)構(gòu)稱(chēng)為一個(gè)盤(pán)區(qū)。是SQLServer分配給表和索引的基本單位。擴(kuò)展盤(pán)區(qū)可分為統(tǒng)一擴(kuò)展盤(pán)區(qū)和混合擴(kuò)展盤(pán)區(qū)。統(tǒng)一擴(kuò)展盤(pán)區(qū)由一個(gè)數(shù)據(jù)庫(kù)對(duì)象所有。混合擴(kuò)展盤(pán)區(qū)可以為多個(gè)數(shù)據(jù)庫(kù)所有,即其中最多可以放8種數(shù)據(jù)庫(kù)對(duì)象。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院注意一個(gè)數(shù)據(jù)庫(kù)是由文件組成的,文件是由盤(pán)區(qū)組成的,而盤(pán)區(qū)是由頁(yè)面組成的。所有的SQLServer數(shù)據(jù)文件都會(huì)擁有兩個(gè)文件名:邏輯文件名和物理文件名。邏輯文件名是在Transact-SQL語(yǔ)句中引用物理文件時(shí)所使用的名稱(chēng),邏輯文件名必須是唯一的。物理文件名是包括路徑在內(nèi)的物理文件名。數(shù)據(jù)庫(kù)的類(lèi)型系統(tǒng)數(shù)據(jù)庫(kù)mastermodelmsdbtempdb
實(shí)例數(shù)據(jù)庫(kù):pubsnorthwind
用戶創(chuàng)建的數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)庫(kù)-企業(yè)管理器山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院創(chuàng)建數(shù)據(jù)庫(kù)-T-SQLCREATEDATABASEdatabase_name[ON[<filespec>[,…n]][,<filegrop>[,…n]]][LOGON{<filespec>[,…n]}]語(yǔ)法說(shuō)明database_name:新創(chuàng)建的數(shù)據(jù)庫(kù)的名稱(chēng)。ON:用于定義存放“數(shù)據(jù)”的空間。LOGON:用于定義存儲(chǔ)“日志”的空間。<filespec>:代表數(shù)據(jù)文件或日志文件的定義,其語(yǔ)法格式如下:<filespec>::=[PRIMARY]([NAME=logical_file_name,]FILENAME=’os_file_name’[,SIZE=size][,MAXSIZE={max_size|UNLIMITED}][,FILEGROWTH=growth_increment])[,…n]語(yǔ)法說(shuō)明PRIMARY:指定主文件。主文件組的第一個(gè)文件被認(rèn)為是主數(shù)據(jù)文件。如果沒(méi)有PRIMARY項(xiàng),則在CREATEDATABASE命令中列出的第一個(gè)文件將被默認(rèn)為主文件。NAME=logical_file_name:文件邏輯名。FILENAME=’os_file_name’:操作系統(tǒng)下的物理文件名。SIZE:文件的初始大小。MAXSIZE:文件大小的最大值。FILEGROWTH:文件大小的遞增量。例創(chuàng)建銀行Bank數(shù)據(jù)庫(kù)CREATEDATABASEBankON(NAME=Bank_dat,FILENAME='d:\bank\bankdat.mdf',SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=5MB)LOGON(NAME=Bank_log,FILENAME='d:\bank\banklog.ldf',SIZE=5MB,MAXSIZE=25MB,FILEGROWTH=5MB)山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院例:創(chuàng)建具有兩個(gè)文件組的數(shù)據(jù)庫(kù)bank2CREATEDATABASEBANK2ONPRIMARY(NAME=BANK2_1_DAT,FILENAME='d:\bank\bank2_f1dat.mdf',SIZE=20MB,MAXSIZE=50MB,FILEGROWTH=5MB),(NAME=BANK2_2_DAT,FILENAME='d:\bank\bank2_f2dat.ndf',SIZE=10MB,MAXSIZE=40MB,FILEGROWTH=5MB),FILEGROUPBANK2_GROUP1(NAME=BANK2_3_DAT,FILENAME='d:\bank\bank2_g1f1dat.ndf',SIZE=10MB,MAXSIZE=50MB,FILEGROWTH=10MB),(NAME=BANK2_4_DAT,FILENAME='d:\bank\bank2_g1f2dat.ndf',SIZE=10MB,MAXSIZE=UNLIMITED,FILEGROWTH=10%)LOGON(NAME=BANK2_LOG,FILENAME='d:\bank\bank2log.ldf',SIZE=5MB,MAXSIZE=50MB,FILEGROWTH=5MB)數(shù)據(jù)庫(kù)的修改ALTERDATABASEdatabase_name{ADDFILE<filespec>[,…n][TOFILEGROUPfilegroup_name]|ADDLOGFILE<filespec>[,…n]|REMOVEFILElogical_file_name|ADDFILEGROUPfilegroup_name|REMOVEFILEGROUPfilegroup_name|MODIFYFILE<filespec>|MODIFYNAME=new_dbname|MODIFYFILEGROUPfilegroup_name{filegroup_property|NAME=new_filegroup_name}……}語(yǔ)法說(shuō)明database_name:要更改的數(shù)據(jù)庫(kù)名稱(chēng)。ADDFILE:指定要添加的文件。ADDLOGFILE:指定要將日志文件添加到指定的數(shù)據(jù)庫(kù)。TOFILEGROUP:指定要將指定文件添加到的文件組。REMOVEFILE:從系統(tǒng)中刪除文件。ADDFILEGROUP:指定要添加的文件組。REMOVEFILEGROUP:從系統(tǒng)中刪除文件組。MODIFYFILE:指定要更改的文件及文件屬性。MODIFYNAME=new_dbname:重命名數(shù)據(jù)庫(kù)。MODIFYFILEGROUPfilegroup_name{filegroup_property|NAME=new_filegroup_name}:指定要修改的文件組和所需的改動(dòng)。例:重命名上例中創(chuàng)建的數(shù)據(jù)庫(kù)bank2為bank_2。ALTERDATABASEbank2MODIFYNAME=bank_2山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院數(shù)據(jù)庫(kù)的刪除DROPDATABASEdatabase_name語(yǔ)法說(shuō)明:master、tempdb、model、msdb系統(tǒng)數(shù)據(jù)庫(kù)不能刪除。正在使用的數(shù)據(jù)庫(kù)不能刪除。例:刪除數(shù)據(jù)庫(kù)bank_2。DROPDATABASEBank_2山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院3.2.2表的定義數(shù)據(jù)庫(kù)中包含一個(gè)或多個(gè)表。表是數(shù)據(jù)的集合,是用來(lái)存儲(chǔ)數(shù)據(jù)和操作數(shù)據(jù)的邏輯結(jié)構(gòu)。SQLServer允許每個(gè)數(shù)據(jù)庫(kù)最多包含2000000個(gè)表,每個(gè)表最多允許有1024列,每行最多允許有8060B的用戶數(shù)據(jù)。表的類(lèi)型系統(tǒng)表Sysobjects表:用于描述數(shù)據(jù)庫(kù)中的對(duì)象:表、視圖、存儲(chǔ)過(guò)程等。出現(xiàn)在每個(gè)數(shù)據(jù)庫(kù)中。它對(duì)每個(gè)數(shù)據(jù)庫(kù)對(duì)象含有一行記錄。Sysconfigures表:用戶設(shè)置的每個(gè)配置選項(xiàng)在表中各占一行。包含最近啟動(dòng)MicrosoftSQLServer前定義的配置選項(xiàng),還包含最近啟動(dòng)后設(shè)置的所有動(dòng)態(tài)配置選項(xiàng)。該表只位于master數(shù)據(jù)庫(kù)中。Sysusers:數(shù)據(jù)庫(kù)中每個(gè)MicrosoftWindows用戶、Windows組、MicrosoftSQLServer用戶或SQLServer角色在表中占一行。Syscolumns表。出現(xiàn)在master數(shù)據(jù)庫(kù)和每個(gè)用戶自定義的數(shù)據(jù)庫(kù)中,它對(duì)基表或者視圖的每個(gè)列和存儲(chǔ)過(guò)程中的每個(gè)參數(shù)含有一行記錄。Sysdatabases表:保存服務(wù)器上所有數(shù)據(jù)庫(kù)名、所有者、狀態(tài)及其他信息。它對(duì)SQLServer系統(tǒng)上的每個(gè)系統(tǒng)數(shù)據(jù)庫(kù)和用戶自定義的數(shù)據(jù)庫(kù)含有一行記錄,只出現(xiàn)在master數(shù)據(jù)庫(kù)中。Syscomments:
用戶創(chuàng)建的表
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院SQLServer2000數(shù)據(jù)類(lèi)型整數(shù)數(shù)據(jù)類(lèi)型
浮點(diǎn)數(shù)據(jù)類(lèi)型
二進(jìn)制數(shù)據(jù)類(lèi)型
字符數(shù)據(jù)類(lèi)型
邏輯型日期/時(shí)間數(shù)據(jù)類(lèi)型
貨幣數(shù)據(jù)類(lèi)型
其他數(shù)據(jù)類(lèi)型
用戶自定義數(shù)據(jù)類(lèi)型
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院一、整型數(shù)據(jù)類(lèi)型tinyint:可以存儲(chǔ)從0到255之間的所有正整數(shù)。所占存儲(chǔ)空間大小為1個(gè)字節(jié)。
smallint:可存儲(chǔ)從-215到215-1之間的所有正負(fù)整數(shù)。所占存儲(chǔ)空間大小為2個(gè)字節(jié),其中1位表示整數(shù)值的正負(fù)號(hào),其它15位表示整數(shù)值的長(zhǎng)度和大小。int:可存儲(chǔ)從-231到231-1之間的所有正負(fù)整數(shù)。所占存儲(chǔ)空間大小為4個(gè)字節(jié),其中1位表示整數(shù)值的正負(fù)號(hào),其它31位表示整數(shù)值的長(zhǎng)度和大小。bigint:可存儲(chǔ)從-263到263-1之間的所有正負(fù)整數(shù)。所占存儲(chǔ)空間大小為8個(gè)字節(jié)。
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院二、浮點(diǎn)數(shù)據(jù)類(lèi)型real:可精確到第7位小數(shù),其范圍為從-3.40E+38到3.40E+38,占用4個(gè)字節(jié)的存儲(chǔ)空間。float:可精確到第15位小數(shù),其范圍為從-1.79E+308到1.79E+308,占用8個(gè)字節(jié)的存儲(chǔ)空間。decimal:可以提供小數(shù)所需要的實(shí)際存儲(chǔ)空間,可以用2到17個(gè)字節(jié)來(lái)存儲(chǔ)從-1038-1到1038-1之間的數(shù)值。numeric:與decimal數(shù)據(jù)類(lèi)型完全相同。
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院三、二進(jìn)制數(shù)據(jù)類(lèi)型binary(n):固定長(zhǎng)度為n個(gè)字節(jié)二進(jìn)制數(shù)據(jù),最大長(zhǎng)度可達(dá)8KB。n取值為1到8000。varbinary(n):n個(gè)字節(jié)可變長(zhǎng)二進(jìn)制數(shù)據(jù),不能超過(guò)8KB。image:可用于存儲(chǔ)字節(jié)數(shù)超過(guò)8KB的可變長(zhǎng)度的二進(jìn)制數(shù)據(jù),如MicrosoftWord文檔、MicrosoftExcel圖表以及圖像數(shù)據(jù)等,其最大長(zhǎng)度為231-1個(gè)字節(jié)。二進(jìn)制常量以0X開(kāi)始,后面跟著位模式的十六進(jìn)制表示。例如:0X1A表示十六進(jìn)制的值1A,它等于十進(jìn)制的數(shù)26。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院四、字符數(shù)據(jù)類(lèi)型char[(n)]:使用固定長(zhǎng)度來(lái)存儲(chǔ)字符,每個(gè)字符和符號(hào)占一個(gè)字節(jié)的存儲(chǔ)空間。n表示所有字符所占的存儲(chǔ)空間,n的取值為1到8000,默認(rèn)值為1。varchar[(n)]:與char類(lèi)型相似,n的取值為1到8000。varchar數(shù)據(jù)類(lèi)型具有變動(dòng)長(zhǎng)度的特性,存儲(chǔ)長(zhǎng)度為實(shí)際數(shù)值長(zhǎng)度。nchar[(n)]:與char類(lèi)型相似,n的取值為1到4000。NCHAR類(lèi)型采用UNICODE標(biāo)準(zhǔn)字符集(CharacterSet)。UNICODE標(biāo)準(zhǔn)規(guī)定每個(gè)字符占用兩個(gè)字節(jié)的存儲(chǔ)空間,存儲(chǔ)空間是:字符數(shù)×2(字節(jié))。nvarchar[(n)]:與varchar類(lèi)型相似,n的取值為1到4000。nvarchar數(shù)據(jù)類(lèi)型采用UNICODE標(biāo)準(zhǔn)字符集。text:專(zhuān)門(mén)用于存儲(chǔ)數(shù)量龐大的變長(zhǎng)字符數(shù)據(jù)。最大長(zhǎng)度可達(dá)231-1(2147483647)個(gè)字符。ntext::用于存儲(chǔ)可變長(zhǎng)度的unicode數(shù)據(jù),最多可存儲(chǔ)230-1個(gè)unicode數(shù)據(jù)。例如:’thisisastring’就是一個(gè)合法的字符型常量。
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院五、邏輯型bit:bit數(shù)據(jù)類(lèi)型占用1個(gè)字節(jié)的存儲(chǔ)空間,其值為0或1。如果輸入0或1以外的值,將被視為1。
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院六、日期/時(shí)間數(shù)據(jù)類(lèi)型Datetime:存儲(chǔ)從1753年1月1日零時(shí)起到9999年12月31日23時(shí)59分59秒之間的所有日期和時(shí)間,其精確度可達(dá)三百分之一秒,即3.33毫秒。所占存儲(chǔ)空間為8個(gè)字節(jié)。Smalldatetime:存儲(chǔ)從1900年1月1日到2079年6月6日,但精度較低,只能精確到分鐘。所占存儲(chǔ)空間為4個(gè)字節(jié)。日期/時(shí)間常量使用特定格式的字符日期表示,用單引號(hào)括起來(lái)。SQLServer日期時(shí)間格式輸入格式datetime值Smalldatetime值october1,20091:12:23.1222009-10-0101:12:23.1232009-10-0101:12:2410/1/20091pm2009-10-0113:00:00.0002009-10-0113:00:0010.1.200913:002009-10-0113:00:00.0002009-10-0113:00:0015:30:291900-01-0115:30:29.0001900-01-0115:30:2910/1/20092009-10-0100:00:00.0002009-10-0100:00:00山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院七、貨幣數(shù)據(jù)類(lèi)型money:有4位小數(shù)的DECIMAL值,其取值從-263到263-1,數(shù)據(jù)精度為萬(wàn)分之一貨幣單位。所占存儲(chǔ)空間為8個(gè)字節(jié)。smallmoney:其取值從-214,748.3648到+214,748.3647,所占存儲(chǔ)空間為4個(gè)字節(jié)。若要指定800美元,則使用$800。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院八、其他數(shù)據(jù)類(lèi)型cursor:是游標(biāo)型數(shù)據(jù)類(lèi)型,用于創(chuàng)建游標(biāo)變量或定義存儲(chǔ)過(guò)程的輸出參數(shù)。sql_variant:可以存儲(chǔ)除文本、圖形數(shù)據(jù)(text、ntext、image)和timestamp類(lèi)型數(shù)據(jù)外的其它任何合法的SQLServer數(shù)據(jù)。table:用于存儲(chǔ)對(duì)表或視圖處理后的結(jié)果集。timestamp:相當(dāng)于binary(8)或varbinary(8),當(dāng)定義的列在更新或插入數(shù)據(jù)行時(shí),此列的值會(huì)被自動(dòng)更新,每個(gè)數(shù)據(jù)庫(kù)表中只能有一個(gè)TIMESTAMP數(shù)據(jù)列。uniqueidentifier:存儲(chǔ)一個(gè)16位的二進(jìn)制數(shù)字,由NEWID函數(shù)產(chǎn)生的惟一的編碼。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院九、用戶自定義數(shù)據(jù)類(lèi)型用戶定義數(shù)據(jù)類(lèi)型基于SQLServer2000中的系統(tǒng)數(shù)據(jù)類(lèi)型。當(dāng)多個(gè)表的列中要存儲(chǔ)同樣類(lèi)型的數(shù)據(jù),且想確保這些列具有完全相同的數(shù)據(jù)類(lèi)型、長(zhǎng)度和為空性時(shí),可使用用戶定義數(shù)據(jù)類(lèi)型。
用戶自定義數(shù)據(jù)類(lèi)型可使用存儲(chǔ)過(guò)程sp_addtype所建立的數(shù)據(jù)類(lèi)型,或企業(yè)管理器來(lái)實(shí)現(xiàn)。創(chuàng)建用戶定義的數(shù)據(jù)類(lèi)型必須提供3個(gè)參數(shù):名稱(chēng)新數(shù)據(jù)類(lèi)型所依據(jù)的系統(tǒng)數(shù)據(jù)類(lèi)型為空性如果用戶定義數(shù)據(jù)類(lèi)型是在model數(shù)據(jù)庫(kù)中創(chuàng)建的,它將作用于所有用戶定義的新數(shù)據(jù)庫(kù)中。如果數(shù)據(jù)類(lèi)型在用戶定義的數(shù)據(jù)庫(kù)中創(chuàng)建,則該數(shù)據(jù)類(lèi)型只作用于此用戶定義的數(shù)據(jù)庫(kù)。選中數(shù)據(jù)庫(kù)并展開(kāi)-右單擊“用戶定義的數(shù)據(jù)類(lèi)型”Sp_addtypesp_addtype[@typename=]type,
[@phystype=]system_data_type
[,[@nulltype=]'null_type']
[,[@ower=]‘owner_name']
語(yǔ)法說(shuō)明:[@typename=]type
:用戶定義的數(shù)據(jù)類(lèi)型的名稱(chēng)命名遵循標(biāo)識(shí)符規(guī)則,并且在每個(gè)數(shù)據(jù)庫(kù)中必須是唯一的。type
的數(shù)據(jù)類(lèi)型為sysname,無(wú)默認(rèn)值。[@phystype=]system_data_type
:自定義類(lèi)型所基于的物理數(shù)據(jù)類(lèi)型或SQLServer提供的數(shù)據(jù)類(lèi)型。[@nulltype=]‘null_type‘:指明處理空值的方式。默認(rèn)為null。
[,[@ower=]‘owner_name’]
:指定創(chuàng)建者或所有者,若沒(méi)指定,則為當(dāng)前用戶。該存儲(chǔ)過(guò)程返回0為成功,否則返回1例題execsp_addtypetelephone,'varchar(24)','notnull‘execsp_addtypefax,'varchar(24)','null'山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院表的創(chuàng)建數(shù)據(jù)庫(kù)中包含一個(gè)或多個(gè)表。表是數(shù)據(jù)的集合,是用來(lái)存儲(chǔ)數(shù)據(jù)和操作數(shù)據(jù)的邏輯結(jié)構(gòu)。要對(duì)表中數(shù)據(jù)進(jìn)行操縱(查詢(xún)、插入、刪除或修改表中的數(shù)據(jù)),應(yīng)建立表的結(jié)構(gòu),建表的同時(shí)還應(yīng)定義好相關(guān)的完整性約束。創(chuàng)建表-企業(yè)管理器山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院表的創(chuàng)建CREATETABLE[database_name.[owner].|owner.]table_name({〈column_definition〉|〈table_constraint〉[,…n]})[ON{filegroup|DEFAULT}]語(yǔ)法說(shuō)明:table_name:新建的表的名稱(chēng)。Owner:是新表所有者的用戶ID名,owner必須是database_name所指定的數(shù)據(jù)庫(kù)中的現(xiàn)有用戶ID,owner默認(rèn)為與database_name所指定的數(shù)據(jù)庫(kù)中的當(dāng)前連接相關(guān)聯(lián)的用戶ID。語(yǔ)法說(shuō)明在column_definition中的主要內(nèi)容包括:列名、列類(lèi)型、是否允許空值、初值和列級(jí)約束等。table_constraint指的是設(shè)定表級(jí)約束,包括主碼約束、唯一約束和外碼約束、檢查等。ON{filegroup|DEFAULT}:指定存儲(chǔ)表的文件組。如果指定filegroup,則表將存儲(chǔ)在指定的文件組中。數(shù)據(jù)庫(kù)中必須存在該文件組。如果指定DEFAULT,或者根本未指定ON參數(shù),則表存儲(chǔ)在默認(rèn)文件組中。定義表的同時(shí)要定義各種約束域完整性:主要通過(guò)CHECK、DEFAULT、NOTNULL等。實(shí)體完整性:主要通過(guò)UNIQUE約束、PRIMARYKEY約束、IDENTITY屬性約束。引用完整性:主要通過(guò)FOREIGNKEY約束。用戶定義的完整性例
創(chuàng)建銀行數(shù)據(jù)庫(kù)中的六個(gè)表結(jié)構(gòu)CREATETABLEBranch(branch_nameCHAR(15)PRIMARYKEY,branch_cityVARCHAR(20)NOTNULL,assetsDECIMAL(20,2)NOTNULL)CREATETABLECustomer(customer_idCHAR(7)PRIMARYKEYNONCLUSTERED,customer_nameCHAR(8)NOTNULL,customer_streetVARCHAR(20)NULL,customer_cityVARCHAR(20)NULL)山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院創(chuàng)建銀行數(shù)據(jù)庫(kù)中的六個(gè)表結(jié)構(gòu)CREATETABLEAccount(account_numberCHAR(4)PRIMARYKEY,branch_nameCHAR(15)NOTNULLFOREIGNKEYREFERENCESBranch,balanceDECIMAL(10,2)NOTNULL)CREATETABLELoan(loan_numberCHAR(4)PRIMARYKEY,branch_nameCHAR(15)NOTNULLFOREIGNKEYREFERENCESBranch,amountDECIMAL(10,2)NOTNULL)創(chuàng)建銀行數(shù)據(jù)庫(kù)中的六個(gè)表結(jié)構(gòu)CREATETABLEDeposits(customer_idCHAR(7)NOTNULLFOREIGNKEYREFERENCESCustomer,account_numberCHAR(4)NOTNULLFOREIGNKEYREFERENCESAccountPRIMARYKEY(customer_id,account_number))CREATETABLEBorrows(customer_idCHAR(7)NOTNULL,loan_numberCHAR(4)NOTNULLPRIMARYKEY(customer_id,loan_number))山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院表的修改ALTERTABLEtable_name
{[ALTERCOLUMNcolumn_name
{new_data_type
[(precision[,scale])][NULL|NOTNULL]}]|ADD{[<column_definition>]|ADD{<table_constraint>}[,…n]|DROP{[CONSTRAINT]constraint_name|COLUMNcolumn}[,…n]語(yǔ)法說(shuō)明ALTERCOLUMN用于修改表中原有列,可修改內(nèi)容包括數(shù)據(jù)類(lèi)型、大小和可空性。ADD{[<column_definition>]用于增加新的列。ADD{<table_constraint>}用于增加新的表級(jí)約束。DROP{[CONSTRAINT]constraint_name|COLUMNcolumn}用于刪除約束或原有的列。例子例
修改客戶Customer表的結(jié)構(gòu),改變說(shuō)明列的數(shù)據(jù)類(lèi)型。ALTERTABLECustomerALTERCOLUMNcustomer_nameCHAR(10)ALTERTABLECustomerALTERCOLUMNcustomer_cityCHAR(20)例
修改借貸Borrows表結(jié)構(gòu),新增外碼約束。ALTERTABLEBorrowsADDFOREIGNKEY(customer_id)REFERENCESCustomerALTERTABLEBorrowsADDFOREIGNKEY(loan_number)REFERENCESLoan山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院例子例
修改客戶Customer表結(jié)構(gòu),增加一新列phone。ALTERTABLECustomerADDphoneCHAR(10)例
修改客戶Customer表結(jié)構(gòu),刪除上面的新增列。ALTERTABLECustomerDROPCOLUMNphone完整性約束命名子句CONSTRAINT<完整性約束名>[PRIMARYKEY短語(yǔ)|FOREIGNKEY短語(yǔ)|CHECK短語(yǔ)]例createtablestudent(
snochar(5)primarykey,
snamechar(8),
ssexchar(2))altertablesaddconstraintc1check(ssex='男'orssex='女')例:去掉上例student表中對(duì)性別的限制。ALTERTABLESTUDENTDROPCONSTRAINTC1;山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院表的刪除DROPTABLEtable_name[,…]語(yǔ)法說(shuō)明:刪除表操作會(huì)將表中所有數(shù)據(jù)刪除,而且直接或間接地建立在該表上的視圖及相關(guān)授權(quán)等與此表有關(guān)的內(nèi)容也會(huì)被自動(dòng)撤銷(xiāo)。DROPTABLE不能用于刪除由FOREIGNKEY約束引用的表,必須先刪除引用的FOREIGNKEY約束或引用的表。在系統(tǒng)表上不能使用DROPTABLE語(yǔ)句。可使用DROPTABLE對(duì)多個(gè)表刪除。例
刪除在例3.5中建立的六個(gè)表。DROPTABLEBorrowsDROPTABLEDepositsDROPTABLELoanDROPTABLEAccountDROPTABLECustomer,Branch山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院3.2.3索引的創(chuàng)建索引(index)是關(guān)于數(shù)據(jù)位置信息的關(guān)鍵字表,由表中的一列或若干列字段值以及相應(yīng)的指向表中物理標(biāo)識(shí)這些值的數(shù)據(jù)頁(yè)的邏輯指針構(gòu)成。利用索引,系統(tǒng)可較快地在磁盤(pán)上定位所需數(shù)據(jù),從而加快了數(shù)據(jù)查詢(xún)的速度;通過(guò)在表中創(chuàng)建索引還可以保證數(shù)據(jù)記錄的唯一性;此外,利用索引還可以加速表與表之間的連接操作。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院一、索引的類(lèi)型聚簇(clustered)索引非聚簇(nonclustered)索引復(fù)合索引唯一(unique)索引山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院1、聚簇索引磁盤(pán)上表的數(shù)據(jù)存儲(chǔ)在相鄰物理空間,并且表中行的物理順序與索引的順序一致。每張表最多只能建一個(gè)聚簇索引。合理地創(chuàng)建聚簇索引,可以十分顯著地提高系統(tǒng)性能。當(dāng)在一個(gè)表格中建立了聚簇索引后,在執(zhí)行插入、修改、刪除等操作時(shí),系統(tǒng)要維護(hù)聚簇結(jié)構(gòu),開(kāi)銷(xiāo)比較大。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院2、非聚簇索引與表中數(shù)據(jù)行的實(shí)際存儲(chǔ)結(jié)構(gòu)無(wú)關(guān),在創(chuàng)建與使用時(shí)不會(huì)改變數(shù)據(jù)表中記錄的實(shí)際存儲(chǔ)順序。非聚簇索引保存的是行指針,而不是數(shù)據(jù)頁(yè),因此檢索速度不如聚簇索引快。在SQLServer2000中每個(gè)表最多能創(chuàng)建249個(gè)非聚簇索引。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院3、復(fù)合索引對(duì)多個(gè)字段創(chuàng)建的索引。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院4、唯一索引該索引要求被索引的列不能有相同值出現(xiàn),可用來(lái)限制表中某些字段值的唯一性。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院建索引時(shí)應(yīng)遵循的原則經(jīng)常做為條件查詢(xún)的字段加上索引,如果幾個(gè)字段同時(shí)做為查詢(xún)時(shí)就建復(fù)合索引。在表的主鍵、外鍵上創(chuàng)建索引。在經(jīng)常用于表間連接的字段上建立索引。建立聚簇索引若滿足下列情況之一,可考慮建立聚簇索引,否則應(yīng)建立非聚簇索引:檢索數(shù)據(jù)時(shí),常以某個(gè)屬性(組)作為排序、分組條件。檢索數(shù)據(jù)時(shí),常以某個(gè)屬性(組)作為檢索限制條件,并返回大量數(shù)據(jù)。表格中某個(gè)屬性(組)的值重復(fù)性較大。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院二、創(chuàng)建索引CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEXindex_name
ONtable_name(column[ASC|DESC][,…n])語(yǔ)法說(shuō)明:索引的建立和刪除,必須要有DBA權(quán)限或是表的擁有者。UNIQUE表示建立唯一性的索引。CLUSTERED|NONCLUSTERED表示聚簇索引或非聚簇索引。ONtable表示為哪個(gè)表創(chuàng)建索引。column[ASC|DESC][,…n]用于指定索引基于的列和索引排序方式。例子CREATECLUSTEREDINDEXCustomer_nameONCustomer(customer_name)CREATEINDEXCustomer_addressONCustomer(customer_street,customer_city)CREATEINDEXAccount_branch_nameONAccount(branch_name)CREATEINDEXAccount_balanceONAccount(balance)山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院三、刪除索引DROPINDEX
index_name語(yǔ)法說(shuō)明:只有索引的擁有者和具有DBA權(quán)限的用戶,可以刪除索引。索引刪除后,有關(guān)索引的定義將從系統(tǒng)的數(shù)據(jù)字典(DD)中刪除,并且包含在索引中的全部索引項(xiàng)將被清除。索引的刪除,不會(huì)影響其他表和索引的正常使用,只會(huì)在某種程度上影響系統(tǒng)的性能。在數(shù)據(jù)定義語(yǔ)言中,沒(méi)有索引的修改功能。要修改索引,可先刪除要修改的索引,然后創(chuàng)建一個(gè)同名的索引。例刪除在客戶customer表的customer_name列上建立的索引DROPINDEXCustomer.Customer_name注意:在被刪除索引名前應(yīng)給出索引所屬表名,中間用圓點(diǎn)分隔。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院3.3數(shù)據(jù)查詢(xún)3.3.1基本語(yǔ)法格式3.3.2單表查詢(xún)3.3.3聚集函數(shù)3.3.4多表查詢(xún)山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院3.3.1基本語(yǔ)法格式SELECT[distinct|all][TOP
n]select_list[INTO子句]FROMtable_source
[WHEREsearch_condition][GROUPBYgroup_by_expression][HAVINGsearch_condition][ORDERBYorder_expression[ASC|DESC]]山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院語(yǔ)法說(shuō)明:TOPn:指定只從查詢(xún)結(jié)果集中輸出前n
行。select_list:描述進(jìn)入結(jié)果集的列,是由逗號(hào)分隔的表達(dá)式的列表。INTO子句:創(chuàng)建新表并將結(jié)果行從查詢(xún)插入新表中。table_source:用于指定產(chǎn)生查詢(xún)結(jié)果的數(shù)據(jù)源。search_condition:用于從指定數(shù)據(jù)源中篩選元組。group_by_expression:分組的依據(jù)。search_condition:用于篩選分組。order_expression:排序的依據(jù)。山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院一、從單表中讀取指定列例查詢(xún)?nèi)w客戶表中的客戶標(biāo)識(shí)和客戶姓名。SELECTcustomer_id,customer_name
FROMCustomer例查詢(xún)?nèi)w客戶的全部信息。SELECT*FROMCustomer例查詢(xún)發(fā)放貸款的支行名稱(chēng)。。SELECTDISTINCTbranch_name
FROMLoan山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院一、從單表中讀取指定列(續(xù))例
以萬(wàn)元為單位顯示支行的資產(chǎn)額。格式一:SELECTbranch_name,branch_city,assets/10000FROMBranch格式二:SELECTbranch_name,branch_city,assets/10000AS'assets_tenthousand'FROMBranch格式三:SELECTbranch_namename,branch_citycity,assets/10000assets_tenthousand
FROMBranch山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院二、從單表中讀取指定行例查詢(xún)客戶姓名為“劉偉”的客戶信息。SELECT*FROMCustomerWHEREcustomer_name='劉偉'山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院常用的條件表達(dá)式運(yùn)算符運(yùn)算類(lèi)型運(yùn)算符比較=、>、<、>=、<=、<>、!=范圍BETWEENAND,NOTBETWEENAND集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL邏輯AND,OR,NOT山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院例子-BETWEENAND例查詢(xún)貸款金額在10000元以上的貸款信息。SELECT*FROMLoanWHEREamount>10000例查詢(xún)存款金額在5000元至7000元之間(含5000元和7000元)的賬號(hào)。格式一:SELECT*FROMAccountWHEREbalanceBETWEEN5000AND7000格式二:SELECT*FROMAccountWHEREbalance>=5000ANDbalance<=7000山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院例子-NOTBETWEENAND例查詢(xún)存款金額不在5000元至7000元之間的賬號(hào)。格式一:SELECT*FROMAccountWHEREbalanceNOTBETWEEN5000AND7000格式二:SELECT*FROMAccountWHEREbalance<5000ORbalance>7000山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院例子-IN例查詢(xún)“解放支行”和“鐵路支行”的賬戶信息。格式一:SELECT*FROMAccountWHEREbranch_nameIN('解放支行','鐵路支行')格式二:SELECT*FROMAccountWHEREbranch_name='解放支行'OR
branch_name='鐵路支行'山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院例子-NOTIN例查詢(xún)不是“解放支行”和“鐵路支行”的賬戶信息。格式一:SELECT*FROMAccountWHEREbranch_nameNOTIN('解放支行','鐵路支行')格式二:SELECT*FROMAccountWHEREbranch_name<>'解放支行'AND
branch_name!='鐵路支行'山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院例子-ISNULL、ISNOTNULL例查詢(xún)沒(méi)有登記所在街道的客戶信息。ELECT*FROMCustomerWHEREcustomer_streetISNULL例查詢(xún)所有登記了所在街道的客戶信息。SELECT*FROMCustomerWHEREcustomer_street
ISNOTNULL字符串匹配
[NOT]LIKE‘<匹配串>’[ESCAPE‘<換碼字符>’]<匹配串>:指定匹配模板匹配模板:固定字符串或含通配符的字符串匹配模板為含通配符的字符串%(百分號(hào))代表任意長(zhǎng)度(長(zhǎng)度可以為0)的字符串例:a%b表示以a開(kāi)頭,以b結(jié)尾的任意長(zhǎng)度的字符串。如acb,addgb,ab
等都滿足該匹配串_(下橫線)代表任意單個(gè)字符例:a_b表示以a開(kāi)頭,以b結(jié)尾的長(zhǎng)度為3的任意字符串。如acb,afb等都滿足該匹配串山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院例子例查詢(xún)所有姓“劉”的客戶信息。SELECT*FROMCustomerWHEREcustomer_nameLIKE'劉%'例查詢(xún)所有不姓“劉”的客戶信息。SELECT*FROMCustomerWHEREcustomer_name
NOTLIKE'劉%'例查詢(xún)姓名中第二個(gè)字為“大”的顧客信息。SELECT*FROMCustomerWHEREcustomer_nameLIKE'_大%'例查詢(xún)支行名稱(chēng)以“青島_”打頭的支行信息。SELECT*FROMBranchWHEREbranch_nameLIKE'青島\_%'ESCAPE'\'山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院三、從單表中讀取指定行和指定列例查詢(xún)所在街道字段取值不為“空”的客戶姓名。SELECTcustomer_name
FROMCustomerWHEREcustomer_streetISNOTNULL例查詢(xún)“市中支行”的所有賬號(hào)。SELECTaccount_number
FROMAccountWHEREbranch_name='市中支行'山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院四、對(duì)查詢(xún)結(jié)果進(jìn)行排序例顯示資產(chǎn)額最多的5個(gè)支行信息。SELECTtop5*FROMBranchORDERBYassetsdesc例查詢(xún)?nèi)抠~戶信息,查詢(xún)結(jié)果按開(kāi)戶支行升序排列,相同開(kāi)戶支行情況下按賬戶余額降序排列。SELECT*FROMAccountORDERBYbranch_name
ASC,balanceDESC五、復(fù)制數(shù)據(jù)庫(kù)表例將存款金額超過(guò)5000的存款信息復(fù)制到test表中。SELECT*INTOtestFROMAccountWHEREbalance>50003.3.3聚集函數(shù)COUNT({[ALL|DISTINCT]expression|*})統(tǒng)計(jì)記錄個(gè)數(shù)SUM([ALL|DISTINCT]expression)計(jì)算指定表達(dá)式的總和AVG([ALL|DISTINCT]expression)計(jì)算指定表達(dá)式的平均值MAX([ALL|DISTINCT]expression)計(jì)算指定表達(dá)式中的最大值MIN([ALL|DISTINCT]expression)計(jì)算指定表達(dá)式中的最小值
注意:如果在聚集函數(shù)中指定DISTINCT關(guān)鍵詞,則表示在計(jì)算時(shí)要取消指定表達(dá)式中的重復(fù)值,如果不指定DISTINCT關(guān)鍵詞或ALL關(guān)鍵詞(ALL為缺省值),則表示不取消重表達(dá)式值。COUNT(*)返回所有記錄的行數(shù),其中包括NULL值的行,而COUNT([ALL|DISTINCT]expression)返回的是表達(dá)式值不為NULL值的行數(shù)。
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院一、使用聚集函數(shù)例查詢(xún)?nèi)靠蛻粲涗泜€(gè)數(shù)。SELECTCOUNT(*)FROMCustomer例查詢(xún)登記了所在街道的客戶人數(shù)。SELECTCOUNT(customer_street)FROMCustomer例查詢(xún)有支行的城市個(gè)數(shù)。SELECTCOUNT(DISTINCTbranch_city)FROMBranch例查詢(xún)開(kāi)戶行是“市中支行”的賬戶余額總額。SELECTSUM(balance)FROMAccountWHEREbranch_name='市中支行'山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院例子例查詢(xún)所有支行的平均資產(chǎn)額。SELECTAVG(assets)FROMBranch例查詢(xún)所有支行中資產(chǎn)額最大的支行。SELECTMAX(assets)FROMBranch例查詢(xún)所有支行中資產(chǎn)額最小的支行。SELECTMIN(assets)FROMBranch二、查詢(xún)結(jié)果分組–GROUPBY子句使用GROUPBY子句分組 細(xì)化集函數(shù)的作用對(duì)象未對(duì)查詢(xún)結(jié)果分組,集函數(shù)將作用于整個(gè)查詢(xún)結(jié)果對(duì)查詢(xún)結(jié)果分組后,集函數(shù)將分別作用于每個(gè)組對(duì)查詢(xún)結(jié)果分組GROUPBY子句的作用對(duì)象是查詢(xún)的中間結(jié)果表分組方法:按指定的一列或多列值分組,值相等的為一組使用GROUPBY子句后,SELECT子句的列名列表中只能出現(xiàn)分組屬性和集函數(shù)
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院查詢(xún)結(jié)果分組例查詢(xún)不同所在城市中支行的個(gè)數(shù)。SELECTbranch_city,COUNT(*)FROMBranchGROUPBYbranch_city
例統(tǒng)計(jì)每個(gè)城市中開(kāi)設(shè)的所有支行的資產(chǎn)總額。SELECTbranch_city,SUM(assets)FROMBranchGROUPBYbranch_city例統(tǒng)計(jì)至少開(kāi)設(shè)了兩個(gè)支行的城市。SELECTbranch_city
FROMBranchGROUPBYbranch_city
HAVINGcount(*)>=2使用HAVING短語(yǔ)篩選最終輸出結(jié)果只有滿足HAVING短語(yǔ)指定條件的組才輸出HAVING短語(yǔ)與WHERE子句的區(qū)別:作用對(duì)象不同WHERE子句作用于基表或視圖,從中選擇滿足條件的元組。HAVING短語(yǔ)作用于組,從中選擇滿足條件的組。
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院3.3.4多表查詢(xún)多表查詢(xún)方法包括:嵌套子查詢(xún)、相關(guān)子查詢(xún)、集合查詢(xún)、連接查詢(xún)等。
山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院一、嵌套子查詢(xún)嵌套子查詢(xún)概念:一個(gè)查詢(xún)語(yǔ)句的查詢(xún)結(jié)果作為另一個(gè)查詢(xún)語(yǔ)句的條件,則前者為“子查詢(xún)”,亦稱(chēng)“嵌套子查詢(xún)”(nestedsub-query),而后者為“主查詢(xún)”,或稱(chēng)“外查詢(xún)”。子查詢(xún)的限制:不能使用ORDERBY子句分為:相關(guān)子查詢(xún)和不相關(guān)子查詢(xún)。不相關(guān)子查詢(xún):是由里向外逐層處理。即每個(gè)子查詢(xún)?cè)谏弦患?jí)查詢(xún)處理之前求解,子查詢(xún)的結(jié)果用于建立其父查詢(xún)的查找條件。相關(guān)子查詢(xún):首先取外層查詢(xún)中表的第一個(gè)元組,根據(jù)它與內(nèi)層查詢(xún)相關(guān)的屬性值處理內(nèi)層查詢(xún),若WHERE子句返回值為真,則取此元組放入結(jié)果表;然后再取外層表的下一個(gè)元組;重復(fù)這一過(guò)程,直至外層表全部檢查完為止。引出子查詢(xún)的謂詞帶有IN謂詞的子查詢(xún)帶有比較運(yùn)算符的子查詢(xún)帶有ANY或ALL謂詞的子查詢(xún)帶有EXISTS謂詞的子查詢(xún)例查詢(xún)有存款的客戶姓名。-INSELECT
customer_name
外層查詢(xún)/主查詢(xún)FROM
CustomerWHERE
customer_id
IN
(SELECTcustomer_id
內(nèi)層查詢(xún)/子查詢(xún)
FROMDeposits
);例查詢(xún)與棧橋支行所在城市相同的支行名稱(chēng)①確定“棧橋支行”所在城市
SELECTbranch_city
FROMBranchWHEREbranch_name=‘棧橋支行'; 結(jié)果為:
branch_city
青島例查詢(xún)與棧橋支行所在城市相同的支行名稱(chēng)②查找所在城市為“青島”的支行名稱(chēng)。
SELECTbranch_name
FROMBranchWHEREbranch_city=‘青島';結(jié)果為:Branch_name棧橋支行市中支行青島_和平支行構(gòu)造嵌套查詢(xún)將第一步查詢(xún)嵌入到第二步查詢(xún)的條件中
SELECTbranch_name
FROMBranchWHEREbranch_city
IN(SELECTbranch_city
FROMBranchWHEREbranch_name=‘棧橋支行');此查詢(xún)?yōu)椴幌嚓P(guān)子查詢(xún)。DBMS求解該查詢(xún)時(shí)也是分步去做的。父查詢(xún)和子查詢(xún)中的表均可以定義別名SELECTbranch_name
FROMBranchb1WHEREb1.branch_cityIN(SELECTbranch_city
FROMBranchb2WHEREb2.branch_name=‘棧橋支行');例查詢(xún)?cè)谇鄭u的支行有存款的客戶號(hào)--INSELECTcustomer_id
③最后在Deposits關(guān)系中
FROMDeposits取出customer_idWHEREaccount_numberIN(SELECTaccount_number
②然后在Account關(guān)系中
FROMAccount找出存款賬號(hào)WHEREbranch_nameIN(SELECTbranch_name
①首先在Branch關(guān)系中找出“青
FROMbranch島”的支行名稱(chēng)
WHEREbranch_city=‘青島’));帶有比較運(yùn)算符的子查詢(xún)當(dāng)能確切知道內(nèi)層查詢(xún)返回單值時(shí),可用比較運(yùn)算符(>,<,=,>=,<=,!=或<>)。與ANY或ALL謂詞配合使用帶有比較運(yùn)算符的子查詢(xún)例查詢(xún)與棧橋支行所在城市相同的支行名稱(chēng)可以用=代替INSELECTbranch_name
FROMBranchWHEREbranch_city
=(SELECTbranch_city
FROMBranchWHEREbranch_name=‘棧橋支行');帶有ANY或ALL謂詞的子查詢(xún)謂詞語(yǔ)義ANY:某個(gè)值A(chǔ)LL:所有值山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院比較運(yùn)算符>ANY大于子查詢(xún)結(jié)果中的某個(gè)值>ALL大于子查詢(xún)結(jié)果中的所有值<ANY小于子查詢(xún)結(jié)果中的某個(gè)值<ALL小于子查詢(xún)結(jié)果中的所有值>=ANY大于等于子查詢(xún)結(jié)果中的某個(gè)值>=ALL大于等于子查詢(xún)結(jié)果中的所有值<=ANY小于等于子查詢(xún)結(jié)果中的某個(gè)值<=ALL小于等于子查詢(xún)結(jié)果中的所有值=ANY等于子查詢(xún)結(jié)果中的某個(gè)值=ALL等于子查詢(xún)結(jié)果中的所有值(通常沒(méi)有實(shí)際意義)!=(或<>)ANY不等于子查詢(xún)結(jié)果中的某個(gè)值!=(或<>)ALL不等于子查詢(xún)結(jié)果中的所有值山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院例查詢(xún)比所在城市是“濟(jì)南”的所有支行資產(chǎn)額都大的支行名稱(chēng)。格式一:SELECTbranch_name
FROMBranchWHEREassets>ALL(SELECTassetsFROMBranchWHEREbranch_city=‘濟(jì)南’)andbranch_city<>’濟(jì)南’格式二:SELECT
branch_name
FROMBranchWHEREassets>(SELECT
MAX(assets)FROMBranchWHEREbranch_city='濟(jì)南')andbranch_city<>’濟(jì)南’山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院帶有ANY或ALL的子查詢(xún)可用集函數(shù)來(lái)實(shí)現(xiàn)
=!=或<><<=>>=ANYIN
<MAX<=MAX>MIN>=MINALL
NOTIN<MIN<=MIN>MAX>=MAX用集函數(shù)實(shí)現(xiàn)子查詢(xún)通常比直接用ANY或ALL查詢(xún)效率要高,因?yàn)榍罢咄ǔD軌驕p少比較次數(shù)山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院例查詢(xún)比所在城市是“濟(jì)南”的某個(gè)支行的資產(chǎn)額小的支行名稱(chēng)。格式一:SELECT
branch_name
FROMBranchWHEREassets<ANY(SELECTassetsFROMBranchWHEREbranch_city='濟(jì)南')AND
branch_city<>'濟(jì)南'格式二:SELECT
branch_name
FROMBranchWHEREassets<(SELECT
MAX(assets)FROMBranchWHEREbranch_city='濟(jì)南')and
branch_city<>'濟(jì)南'二、相關(guān)子查詢(xún)相關(guān)子查詢(xún)概念:是一種特殊的嵌套子查詢(xún),即子查詢(xún)與來(lái)自主查詢(xún)的列有關(guān)。首先取外層查詢(xún)中表的第一個(gè)元組,根據(jù)它與內(nèi)層查詢(xún)相關(guān)的屬性值處理內(nèi)層查詢(xún),若WHERE子句返回值為真,則取此元組放入結(jié)果表;然后再取外層表的下一個(gè)元組;重復(fù)這一過(guò)程,直至外層表全部檢查完為止。帶有EXISTS謂詞的子查詢(xún)EXISTS謂詞存在量詞
帶有EXISTS謂詞的子查詢(xún)不返回任何數(shù)據(jù),只產(chǎn)生邏輯真值“true”或邏輯假值“false”。若內(nèi)層查詢(xún)結(jié)果非空,則返回真值若內(nèi)層查詢(xún)結(jié)果為空,則返回假值由EXISTS引出的子查詢(xún),其目標(biāo)列表達(dá)式通常都用*,因?yàn)閹XISTS的子查詢(xún)只返回真值或假值,給出列名無(wú)實(shí)際意義NOTEXISTS謂詞例查詢(xún)有存款的客戶姓名。SELECT
customer_name
FROM
CustomercWHERE
EXISTS
(SELECT*
FROMDepositsd
WHEREc.customer_id=d.customer_id)帶有EXISTS謂詞的子查詢(xún)思路分析:本查詢(xún)涉及customer和deposits關(guān)系。在customer中依次取每個(gè)元組的customer_id值,用此值去檢查deposits關(guān)系。若deposits中存在這樣的元組,其customer_id值等于此customer.customer_id值,則取此customer.customer_name送入結(jié)果關(guān)系。例查詢(xún)沒(méi)有存款的客戶姓名。SELECT
customer_name
FROM
CustomercWHERE
NOT
EXISTS
(SELECT*
FROMDepositsd
WHEREc.customer_id=d.customer_id)山東財(cái)政學(xué)院計(jì)算機(jī)信息工程學(xué)院例查詢(xún)比所在城市是“濟(jì)南”的所有支行資產(chǎn)額都大的支行名稱(chēng)。SELECTbranch_name
FROMBranchASAWHEREA.branch_city<>'濟(jì)南'andNOTEXISTS(SELECT*FROMBranchASBWHEREB.branch_city='濟(jì)南'and
B.assets>A.assets)帶有EXISTS謂詞的子查詢(xún)不同形式的查詢(xún)間的替換一些帶EXISTS或NOTEXISTS謂詞的子查詢(xún)不能被其他形式的子查詢(xún)等價(jià)替換所有帶IN謂詞、比較運(yùn)算符、ANY和ALL謂詞的子查詢(xún)都能用帶EXISTS謂詞的子查詢(xún)等價(jià)替換。
例查詢(xún)與棧橋支行所在城市相同的支行名稱(chēng)SELECTbranch_name
FROMBranchb1WHEREEXISTS(SELECT*FROMBranchb2WHEREb2.branch_name=‘棧橋支行‘a(chǎn)ndb1.branch_city=b2.branch_city);帶有EXISTS謂詞的子查詢(xún)用EXISTS/NOTEXISTS實(shí)現(xiàn)全稱(chēng)量詞SQL語(yǔ)言中沒(méi)有全稱(chēng)量詞
(Forall)可以把帶有全稱(chēng)量詞的謂詞轉(zhuǎn)換為等價(jià)的帶有存在量詞的謂詞:
(
x)P≡
(
x(
P))例查詢(xún)?cè)谒兄卸加写婵畹目蛻籼?hào)SELECTcustomer_idFROMdepositsdWHER
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能運(yùn)動(dòng)恢復(fù)按摩器企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 美術(shù)創(chuàng)作天地行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 工業(yè)廢氣除塵濾料企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 高強(qiáng)度縮合型硅橡膠企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 武術(shù)表演館行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 行文有法:初中讀寫(xiě)結(jié)合的教學(xué)探索
- 區(qū)域分銷(xiāo)代理合同(2篇)
- DB11T1028-2021 民用建筑節(jié)能門(mén)窗工程技術(shù)標(biāo)準(zhǔn)
- 市政排水系統(tǒng)檢測(cè)計(jì)劃
- 護(hù)士自薦信的注意事項(xiàng)與范文
- 新農(nóng)村建設(shè)之《農(nóng)村自建房設(shè)計(jì)圖紙38套》高清版
- 2024年徐州礦務(wù)集團(tuán)第二醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 彩鋼瓦屋面滲漏水維修施工方案完整
- 2024年度大型演唱會(huì)主辦方與演出藝人演出合同協(xié)議范本3篇
- 裝配式建筑深化設(shè)計(jì)-1.2.3 裝配式建筑深化設(shè)計(jì)拆分原47課件講解
- 電力工程施工組織措施方案
- 淹溺安全培訓(xùn)課件
- 【MOOC】園林植物應(yīng)用設(shè)計(jì)-北京林業(yè)大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 組織部2024年雙擁工作計(jì)劃
- 2024年中國(guó)汽車(chē)出口與投資國(guó)別指南-泰國(guó)篇-中國(guó)汽車(chē)工業(yè)協(xié)會(huì)
- 《鐵路軌道維護(hù)》課件-小型機(jī)械打磨鋼軌作業(yè)
評(píng)論
0/150
提交評(píng)論