版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
北京林業(yè)大學(xué)數(shù)據(jù)庫原理與應(yīng)用結(jié)構(gòu)化查詢語言StructuredQueryLanguage數(shù)據(jù)查詢數(shù)據(jù)定義數(shù)據(jù)操縱數(shù)據(jù)控制SQL的發(fā)展ChamberlinSEQUELSQLSQL的發(fā)展大型數(shù)據(jù)庫
SybaseSQLServerOracleDB2MySQL小型數(shù)據(jù)庫
FoxProAccessSQLite1982年,美國國家標(biāo)準(zhǔn)化協(xié)會(AmericanNationalStandardInstitute,ANSI)開始制訂SQL標(biāo)準(zhǔn);1986年,ANSI公布了SQL的第一個(gè)標(biāo)準(zhǔn)SQL-86;1987年,國際標(biāo)準(zhǔn)化組織(InternationalOrganizationforStandardization,ISO)正式采納了SQL-86標(biāo)準(zhǔn)為國際標(biāo)準(zhǔn);SQL的標(biāo)準(zhǔn)化1989年,ISO對SQL-86標(biāo)準(zhǔn)進(jìn)行了補(bǔ)充,推出了SQL-89標(biāo)準(zhǔn);1992年,ISO推出了SQL-92標(biāo)準(zhǔn)(也稱SQL2);1999年,ISO推出了SQL-99標(biāo)準(zhǔn)(也稱SQL3),它增加了對象數(shù)據(jù)、遞歸和觸發(fā)器等的支持功能;2003年,ISO推出了ISO/IEC9075:2003標(biāo)準(zhǔn)(也稱SQL4)。SQL的標(biāo)準(zhǔn)化一個(gè)關(guān)系對應(yīng)一個(gè)基本表一個(gè)或多個(gè)基本表對應(yīng)一個(gè)存儲文件基本表(BaseTable):SQL的基本概念視圖(View):SQL的基本概念SQL的基本概念SQL語言支持的關(guān)系數(shù)據(jù)庫的三級模式結(jié)構(gòu)
SQL
基本表1
視圖1
視圖2
基本表2
儲存文件1
基本表3
基本表4
儲存文件1
外模式
模式
內(nèi)模式SQL的主要特點(diǎn)
SQL語言是類似于英語的自然語言,簡潔易用SQL是一種一體化的語言SQL語言是一種非過程化的語言SQL語言是一種面向集合的語言SQL語言既是自含式語言,又是嵌入式語言SQLServer的發(fā)展與版本SQLServer2012簡介SQLServer是一個(gè)支持關(guān)系模型的關(guān)系數(shù)據(jù)庫管理系統(tǒng)企業(yè)版(EnterpriseEdition)可作為大型web站點(diǎn)服務(wù)器標(biāo)準(zhǔn)版(StandardEdition)適用于部門級等中小規(guī)模的應(yīng)用Web版(WebEdition)面向InternetWeb服務(wù)環(huán)境設(shè)計(jì),成本低開發(fā)者版(DeveloperEdition)擁有企業(yè)版的特性,但只限于在開發(fā)、測試和演示中使用SQLServer2012的主要組件SQLServer2012簡介組件
功能SQLServer數(shù)據(jù)庫引擎存儲、處理和保護(hù)數(shù)據(jù)的核心引擎,復(fù)制,全文搜索以及用于管理關(guān)系數(shù)據(jù)和XML數(shù)據(jù)的工具。SQLServerManagementStudio集成環(huán)境,用于配置和管理SQLServer的主要組件。分析服務(wù)創(chuàng)建和管理聯(lián)機(jī)分析處理及數(shù)據(jù)挖掘應(yīng)用的工具。報(bào)表服務(wù)開發(fā)報(bào)表應(yīng)用程序的可擴(kuò)展平臺,用于創(chuàng)建、管理和部署表格報(bào)表、矩陣報(bào)表、圖形報(bào)表以及自由格式報(bào)表等應(yīng)用。集成服務(wù)一組圖形工具和可編程對象。配置管理器為SQLServer服務(wù)、服務(wù)器協(xié)議、客戶端協(xié)議和客戶端別名提供配置管理。數(shù)據(jù)庫引擎優(yōu)化顧問協(xié)助創(chuàng)建索引、索引視圖和分區(qū)的最佳組合商業(yè)智能開發(fā)向?qū)Ъ砷_發(fā)環(huán)境,集成了上述分析服務(wù)、報(bào)表服務(wù)和集成服務(wù)的功能。連接組件安裝客戶端和服務(wù)器通信的組件聯(lián)機(jī)叢書查詢有價(jià)值的信息SQLServer2012簡介通過執(zhí)行“開始→所有程序→MicrosoftSQL2012→SQLServerManagementStudio“命令,啟動ManagementStudio數(shù)據(jù)庫的結(jié)構(gòu)描述信息的數(shù)據(jù)存在數(shù)據(jù)庫中并由DBMS統(tǒng)一管理從邏輯上看數(shù)據(jù)庫的結(jié)構(gòu)描述信息的數(shù)據(jù)是以文件的方式存儲在物理磁盤上,由操作系統(tǒng)進(jìn)行統(tǒng)一管理從物理上看數(shù)據(jù)庫的存儲結(jié)構(gòu)是指數(shù)據(jù)庫文件在磁盤上如何存儲。在SQLServer2012中,創(chuàng)建數(shù)據(jù)庫時(shí),會對應(yīng)地在物理磁盤上創(chuàng)建相應(yīng)的操作系統(tǒng)文件,數(shù)據(jù)庫中的所有數(shù)據(jù)、對象和數(shù)據(jù)庫操作日志都存儲在這些文件中。數(shù)據(jù)庫的結(jié)構(gòu)——數(shù)據(jù)文件和事務(wù)日志文件數(shù)據(jù)文件1???數(shù)據(jù)文件n事務(wù)日志文件數(shù)據(jù)庫存放數(shù)據(jù)庫數(shù)據(jù)和數(shù)據(jù)庫對象的文件主要數(shù)據(jù)文件(.mdf)+次要數(shù)據(jù)文件(.ndf)保存用于恢復(fù)數(shù)據(jù)庫的日志信息,擴(kuò)展名為.ldf當(dāng)數(shù)據(jù)庫破壞時(shí)可以用事務(wù)日志還原數(shù)據(jù)庫內(nèi)容只有一個(gè)可有多個(gè)數(shù)據(jù)庫的結(jié)構(gòu)——文件組文件組文件組(FileGroup)是將多個(gè)數(shù)據(jù)文件集合起來形成的一個(gè)整體主要文件組+次要文件組一個(gè)數(shù)據(jù)文件只能存在于一個(gè)文件組中,一個(gè)文件組也只能被一個(gè)數(shù)據(jù)庫使用日志文件不分組,它不屬于任何文件組前4個(gè)數(shù)據(jù)庫存儲路徑為<drive>:\ProgramFiles\MicrosoftSQLServer\MSSQL11.SQLSERVER\MSSQL\DATA\;resource數(shù)據(jù)庫是一個(gè)只讀和隱藏的數(shù)據(jù)庫,不顯示在系統(tǒng)數(shù)據(jù)庫列表中,它的物理文件名為mssqlsystemresource.mdf和mssqlsystemresource.ldf,存儲路徑為<drive>:\ProgramFiles\MicrosoftSQLServer\MSSQL11.SQLSERVER\MSSQL\Binn\。SQLServer2012的系統(tǒng)數(shù)據(jù)庫SQLServer2012的系統(tǒng)數(shù)據(jù)庫有master、model、msdb、tempdb和resource。SQLServer2012的系統(tǒng)數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)庫mastermodelmsdbtempdbresource記錄所有系統(tǒng)級信息,記錄了所有其他數(shù)據(jù)庫的存在、數(shù)據(jù)庫文件的位置和SQLServer初始化信息;重新生成master將重新生成所有系統(tǒng)數(shù)據(jù)庫。model數(shù)據(jù)庫是所有用戶數(shù)據(jù)庫的創(chuàng)建模板,系統(tǒng)將model數(shù)據(jù)庫的全部內(nèi)容復(fù)制到新的數(shù)據(jù)庫中,可以簡化數(shù)據(jù)庫及其對象的創(chuàng)建及設(shè)置工作。計(jì)劃警報(bào)和作業(yè)。tempdb數(shù)據(jù)庫用作系統(tǒng)的臨時(shí)存儲,主要保存顯式創(chuàng)建的臨時(shí)用戶對象和數(shù)據(jù)庫引擎創(chuàng)建的內(nèi)部對象。包含所有系統(tǒng)對象,通過resource數(shù)據(jù)庫可以更為輕松快捷地升級到新的MicrosoftSQLServer版本。SQLServer2012的系統(tǒng)數(shù)據(jù)庫SQLServer2012提供了AdventureWorks示例數(shù)據(jù)庫。與SQLServer2000等早期版本不同,SQLServer2012默認(rèn)并不安裝示例數(shù)據(jù)庫,需要手工下載安裝。SQLServer2012聯(lián)機(jī)叢書基本都以該數(shù)據(jù)庫為例講解,建議讀者手工下載安裝該示例數(shù)據(jù)庫。創(chuàng)建數(shù)據(jù)庫創(chuàng)建用戶數(shù)據(jù)庫有兩種典型方法:一是通過ManagementStudio創(chuàng)建;二是通過SQL命令創(chuàng)建。創(chuàng)建用戶數(shù)據(jù)庫創(chuàng)建用戶數(shù)據(jù)庫用ManagementStudio創(chuàng)建數(shù)據(jù)庫在“對象資源管理器”中,右鍵單擊“數(shù)據(jù)庫”節(jié)點(diǎn),在快捷菜單中選擇“新建數(shù)據(jù)庫(N)…”命令,即可打開新建數(shù)據(jù)庫窗口。創(chuàng)建用戶數(shù)據(jù)庫用ManagementStudio創(chuàng)建數(shù)據(jù)庫用SQL命令創(chuàng)建數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫的SQL命令的語法格式如下所示:CREATEDATABASE數(shù)據(jù)庫名稱[ON[FILEGROUP文件組名稱](NAME=數(shù)據(jù)文件邏輯名稱,FILENAME='路徑+數(shù)據(jù)文件名',SIZE=數(shù)據(jù)文件初始大小,MAXSIZE=數(shù)據(jù)文件最大容量,FILEGROWTH=數(shù)據(jù)文件自動增長容量,)][LOGON(NAME=日志文件邏輯名稱,FILENAME='路徑+日志文件名’,SIZE=日志文件初始大小,MAXSIZE=日志文件最大容量,FILEGROWTH=日志文件自動增長容量,)][COLLATE數(shù)據(jù)庫校驗(yàn)方式名稱][FORATTACH]用SQL命令創(chuàng)建數(shù)據(jù)庫CREATEDATABASETeachON(NAME=Teach_Data,FILENAME=‘E:\TeachData.mdf',SIZE=10,MAXSIZE=500,FILEGROWTH=10)LOGON(NAME=Teach_Log,FILENAME=‘E:\TeachData.ldf',SIZE=5,MAXSIZE=500,
FILEGROWTH=5)[例]用SQL命令創(chuàng)建一個(gè)教學(xué)數(shù)據(jù)庫Teach,數(shù)據(jù)文件的邏輯名稱為Teach_Data,數(shù)據(jù)文件存放在E盤根目錄下,文件名為TeachData.mdf,數(shù)據(jù)文件的初始存儲空間大小為10MB,最大存儲空間為500MB,存儲空間自動增長量為10MB;日志文件的邏輯名稱為Teach_Log,日志文件物理地存放在E盤根目錄下,文件名為TeachData.ldf,初始存儲空間大小為5MB,最大存儲空間為500MB,存儲空間自動增長量為5MB。用SQL命令創(chuàng)建數(shù)據(jù)庫修改數(shù)據(jù)庫修改用戶數(shù)據(jù)庫有兩種典型方法:一是通過ManagementStudio修改;二是通過SQL命令修改。修改用戶數(shù)據(jù)庫用ManagementStudio修改數(shù)據(jù)庫在“對象資源管理器”窗口,右鍵單擊要修改的數(shù)據(jù)庫,從快捷菜單中選擇“屬性”命令,即可彈出數(shù)據(jù)庫屬性對話框。用ManagementStudio修改數(shù)據(jù)庫“常規(guī)”選項(xiàng)卡包含數(shù)據(jù)庫的狀態(tài)、所有者、創(chuàng)建日期、大小、可用空間、用戶數(shù)、備份和維護(hù)等信息。“文件”選項(xiàng)卡包含數(shù)據(jù)文件和日志文件的名稱、存儲位置、初始容量大小、文件增長和文件最大限制等信息。“文件組”選項(xiàng)卡可以添加或刪除文件組。但是,如果文件組中有文件則不能刪除,必須先將文件移出文件組,才能刪除文件組?!斑x項(xiàng)”選項(xiàng)卡可以設(shè)置數(shù)據(jù)庫的許多屬性,如排序規(guī)則、恢復(fù)模式、兼容級別等?!案母櫋?/p>
選項(xiàng)卡可以設(shè)定是否對數(shù)據(jù)庫的修改進(jìn)行跟蹤。用ManagementStudio修改數(shù)據(jù)庫“權(quán)限”選項(xiàng)卡可以設(shè)定用戶或角色對此數(shù)據(jù)庫的操作權(quán)限?!皵U(kuò)展屬性”
選項(xiàng)卡可以設(shè)定表或列的擴(kuò)展屬性。在設(shè)計(jì)表或列時(shí),通常通過表名或列名來表達(dá)含義,當(dāng)表名或列名無法表達(dá)含義時(shí),就需要使用擴(kuò)展屬性?!扮R像”選項(xiàng)卡可以設(shè)定是否對數(shù)據(jù)庫啟用鏡像備份。鏡像備份是一種高性能的備份方案,但需要投入一定的設(shè)備成本,一般用于高可靠性環(huán)境?!笆聞?wù)日志傳送”
選項(xiàng)卡設(shè)定是否啟用事務(wù)日志傳送。事務(wù)日志傳送備份是僅次于鏡像的高可靠性備份方案,可以達(dá)到分鐘級的災(zāi)難恢復(fù)能力,實(shí)施成本遠(yuǎn)小于鏡像備份,是一種經(jīng)濟(jì)實(shí)用的備份方案。用SQL命令修改數(shù)據(jù)庫可以使用ALTERDATABASE命令修改數(shù)據(jù)庫。注意,只有數(shù)據(jù)庫管理員(DBA)或者具有CREATEDATABASE權(quán)限的人員才有權(quán)執(zhí)行此命令。下面列出常用的修改數(shù)據(jù)庫的SQL命令的語法格式。ALTERDATABASE數(shù)據(jù)庫名稱ADDFILE(
具體文件格式)[,…n][TOFILEGROUP文件組名]|ADDLOGFILE(
具體文件格式)[,…n]|REMOVEFILE文件邏輯名稱|MODIFYFILE(
具體文件格式)用SQL命令修改數(shù)據(jù)庫|ADDFILEGROUP文件組名|REMOVEFILEGROUP文件組名|MODIFYFILEGROUP文件組名{READ_ONLY|READ_WRITE,|DEFAULT,|NAME=新文件組名}}其中,“具體文件格式”為:(NAME=文件邏輯名稱
[,NEWNAME=新文件邏輯名稱][,SIZE=初始文件大小][,MAXSIZE=文件最大容量][,FILEGROWTH=文件自動增長容量])用SQL命令修改數(shù)據(jù)庫[例]修改Teach數(shù)據(jù)庫中的Teach_Data文件增容方式為一次增加20MB。ALTERDATABASETeachMODIFYFILE(NAME=Teach_Data,FILEGROWTH=20)用SQL命令修改數(shù)據(jù)庫[例]用SQL命令修改數(shù)據(jù)庫Teach,添加一個(gè)次要數(shù)據(jù)文件,邏輯名稱為Teach_Datanew,存放在E盤根目錄下,文件名為Teach_Datanew.ndf。數(shù)據(jù)文件的初始大小為100MB,最大容量為200MB,文件自動增長容量為10MB。ALTERDATABASETeachADDFILE(NAME=Teach_Datanew,FILENAME='E:\Teach_Datanew.ndf',SIZE=100,MAXSIZE=200,FILEGROWTH=10)用SQL命令修改數(shù)據(jù)庫[例]用SQL命令,從Teach數(shù)據(jù)庫中刪除次要數(shù)據(jù)文件。ALTERDATABASETeachREMOVEFILETeach_Datanew刪除數(shù)據(jù)庫刪除用戶數(shù)據(jù)庫有兩種典型方法:一是通過ManagementStudio刪除;二是通過SQL命令刪除。刪除用戶數(shù)據(jù)庫用ManagementStudio刪除數(shù)據(jù)庫打開“對象資源管理器”,右鍵單擊要刪除的數(shù)據(jù)庫,從快捷菜單中選擇“刪除”。刪除數(shù)據(jù)庫后,與此數(shù)據(jù)庫關(guān)聯(lián)的數(shù)據(jù)文件和日志文件都會被刪除,系統(tǒng)數(shù)據(jù)庫中存儲的該數(shù)據(jù)庫的所有信息也會被刪除,因此務(wù)必要慎重! 用SQL命令刪除數(shù)據(jù)庫DROPDATABASE數(shù)據(jù)庫名稱[,...n][例]刪除數(shù)據(jù)庫Teach。DROPDATABASETeach查看數(shù)據(jù)庫信息查看數(shù)據(jù)庫信息有兩種典型方法:一是通過ManagementStudio查看二是通過系統(tǒng)存儲過程查看查看數(shù)據(jù)庫信息在ManagementStudio的“對象資源管理器”窗口中,選中“數(shù)據(jù)庫”節(jié)點(diǎn)下的某個(gè)數(shù)據(jù)庫,單擊鼠標(biāo)右鍵,在快捷菜單中選擇“屬性”,即可查看該數(shù)據(jù)庫的詳細(xì)信息。用ManagementStudio查看數(shù)據(jù)庫信息用系統(tǒng)存儲過程顯示數(shù)據(jù)庫結(jié)構(gòu)
用系統(tǒng)存儲過程顯示數(shù)據(jù)庫信息用系統(tǒng)存儲過程顯示文件信息用系統(tǒng)存儲過程顯示文件組信息Sp_helpdb[[@dbname=]'name']例如:EXECSp_helpdbAdventureWorks2012Sp_helpfile[[@filename=]'name']例如:EXECSp_helpfileAddressSp_helpfilegroup[[@filegroupname=]'name']例如:useAdventureWorks2012EXECSp_helpfilegroup遷移數(shù)據(jù)庫很多情況下,我們需要將數(shù)據(jù)庫文件從一臺電腦遷移到另外的電腦上,以下介紹兩種常用的遷移數(shù)據(jù)庫的方法:一是分離和加載數(shù)據(jù)庫二是生成腳本遷移用戶數(shù)據(jù)庫在對象資源管理器中,選擇要遷移的數(shù)據(jù)庫節(jié)點(diǎn),單擊鼠標(biāo)右鍵,在快捷菜單中選擇“任務(wù)”,在之后出現(xiàn)的級聯(lián)菜單中選擇“分離”,會彈出“分離數(shù)據(jù)庫”屬性對話框。分離和加載數(shù)據(jù)庫1.分離數(shù)據(jù)庫分離和加載數(shù)據(jù)庫1.分離數(shù)據(jù)庫分離和加載數(shù)據(jù)庫1.分離數(shù)據(jù)庫在對象資源管理器中選擇“數(shù)據(jù)庫”節(jié)點(diǎn),單擊鼠標(biāo)右鍵,在快捷菜單中選擇“附加”,會彈出“附加數(shù)據(jù)庫”屬性對框框。分離和加載數(shù)據(jù)庫2.加載數(shù)據(jù)庫在“附加數(shù)據(jù)庫”屬性對話框中,單擊其中的“添加”按鈕,在彈出的對話框中選擇需要的.mdf文件,即可把數(shù)據(jù)庫文件附加成功。分離和加載數(shù)據(jù)庫2.加載數(shù)據(jù)庫分離和加載數(shù)據(jù)庫2.加載數(shù)據(jù)庫在對象資源管理器中,選擇要操作的數(shù)據(jù)庫節(jié)點(diǎn),單擊鼠標(biāo)右鍵,在快捷菜單中選擇“任務(wù)”,在之后出現(xiàn)的級聯(lián)菜單中選擇“生成腳本”命令,會彈出“生成和發(fā)布腳本”窗口。生成腳本生成腳本數(shù)據(jù)類型SQL使用數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL)實(shí)現(xiàn)數(shù)據(jù)定義功能。關(guān)系表中的每一列(即每個(gè)字段)都來自同一個(gè)域,屬于同一種數(shù)據(jù)類型。數(shù)據(jù)類型創(chuàng)建數(shù)據(jù)表之前,需要為表中的每一個(gè)屬性設(shè)置一種數(shù)據(jù)類型。數(shù)據(jù)類型數(shù)據(jù)內(nèi)容與范圍占用的字節(jié)bit精確數(shù)值型,0,1,NULL實(shí)際使用1bit,但會占用1字節(jié),若一個(gè)數(shù)據(jù)中有數(shù)個(gè)bit字段,則可共占1字節(jié)bigint精確數(shù)值型,-263~263-18字節(jié)int精確數(shù)值型,-231~231-14字節(jié)smallint精確數(shù)值型,-215~215-12字節(jié)tinyint精確數(shù)值型,0~2551字節(jié)mumeric精確數(shù)值型,-1038+1~1038–11~9位數(shù)使用5字節(jié),10~19位數(shù)使用9字節(jié),20~28位數(shù)使用13字節(jié),29~38位數(shù)使用17字節(jié)decimal精確數(shù)值型,-1038+1~1038–1與numeric類型相同float近似數(shù)值型,-1.79E+308~1.79E+3088字節(jié)real近似數(shù)值型,-3.40E+38~3.40E+384字節(jié)數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)內(nèi)容與范圍占用的字節(jié)Money精確數(shù)值型,-263~263-1,精確到萬分之一8字節(jié)smallmoney精確數(shù)值型,-214748.3648~214748.36474字節(jié)datetime精確數(shù)值型,1753/1/1~9999/12/318字節(jié)smalldatetime精確數(shù)值型,1900/1/1~2079/6/64字節(jié)char字符型,1~8000個(gè)字符,定長的非Unicode字符1個(gè)字符占1字節(jié),尾端空白字符保留varchar字符型,1~8000個(gè)字符,非定長的非Unicode字符1個(gè)字符占1字節(jié),尾端空白字符刪除text字符型,最多231-1個(gè)字符,變長的非Unicode字符1個(gè)字符占1字節(jié),最大可存儲2GBncharUnicode字符型,1~4000個(gè)字符,非定長的Unicode字符1個(gè)字符占2字節(jié),尾端空白字符保留navcharUnicode字符型,1~4000個(gè)字符,非定長的Unicode字符1個(gè)字符占2字節(jié),尾端空白字符刪除ntextUnicode字符型,231-1個(gè)字符,非定長的Unicode字符1個(gè)字符占2字節(jié),最大可存儲2GBbinary二進(jìn)制字符串型,1~8000個(gè)字節(jié),定長二進(jìn)制數(shù)據(jù)在存儲時(shí),SQLServer會另外增加4字節(jié),尾端空白字符會保留varbinary二進(jìn)制字符串型,1~8000個(gè)字節(jié),非定長二進(jìn)制數(shù)據(jù)在存儲時(shí),SQLServer會另外增加4字節(jié),尾端空白字符會刪除image二進(jìn)制字符串型,231–1個(gè)字節(jié),非長二進(jìn)制數(shù)據(jù)最大可存儲2GBtimestamp其它數(shù)據(jù)類型,十六進(jìn)制8字節(jié)uniqueidentifier其它數(shù)據(jù)類型,全局唯一標(biāo)識符(GUID)可用NEWID(|)函數(shù)生成一個(gè)該種類型的字段值。16字節(jié)sql_variant其它數(shù)據(jù)類型,0~8016table其它數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)類型整數(shù)型:按照取值范圍從大到小,包括bigint、int、smallint、tinyint、bit。在實(shí)際應(yīng)用中,可以根據(jù)屬性的具體取值范圍選擇適合的整數(shù)型。數(shù)據(jù)類型數(shù)值型:包括精確數(shù)值型numeric、decimal和近似數(shù)值型float、real。numeric與decimal在功能上等效,用于精確存儲數(shù)值。以numeric為例,格式為numeric(p,s),其中p表示數(shù)據(jù)長度,s表示小數(shù)位數(shù)。例如,成績的數(shù)據(jù)類型可以設(shè)置為numeric(4,1),表示數(shù)據(jù)長度為4,小數(shù)位為小數(shù)點(diǎn)后一位。float和real用來存儲數(shù)據(jù)的近似值,當(dāng)數(shù)值的位數(shù)太多時(shí),可用它們存取數(shù)值的近似值。數(shù)據(jù)類型貨幣型:按照取值范圍從大到小,包括money和smallmoney,它們可以精確到所代表的貨幣單位的萬分之一,也就是小數(shù)點(diǎn)后面4位。通常情況下,貨幣型可以轉(zhuǎn)換為精確數(shù)值型。日期型:按照時(shí)間范圍從大到小,包括datetime和smalldatetime,可以精確到秒,smalldatetime比datetime少占用4個(gè)字節(jié)。此外,還有一個(gè)常用的日期型是date,這種數(shù)據(jù)類型只顯示日期,不顯示時(shí)間。數(shù)據(jù)類型包括char、varchar、nchar、nvarchar、text、ntext。其中,char、varchar存放非Unicode字符(即ASCII字符),一個(gè)字符占1個(gè)字節(jié),char是定長的,varchar是非定長的。字符型:數(shù)據(jù)類型例如,“學(xué)號(SNo)”可以設(shè)置為char(6),表示學(xué)號最多可以包含6個(gè)非Unicode字符,即使小于6個(gè),在內(nèi)存中也要分配6個(gè)字節(jié)的空間;如果設(shè)置為varchar(6),則學(xué)號實(shí)際包含多少非Unicode字符,在內(nèi)存中就分配多少字節(jié)。字符型:數(shù)據(jù)類型字符型:nchar、nvarchar存放Unicode字符,一個(gè)字符占2個(gè)字節(jié),nchar是定長的,nvarchar是非定長的。nchar、nvarchar的用法與char、varchar相同,只是占用內(nèi)存空間不同。例如,如果“學(xué)號(SNo)”設(shè)置為nchar(6),則學(xué)號占12個(gè)字節(jié);如果設(shè)置為nvarchar(6),則學(xué)號根據(jù)實(shí)際長度分配字節(jié)。當(dāng)某個(gè)字符型屬性需要描述的字符數(shù)比較多時(shí),可以將其設(shè)置為text、ntext。其中,text存放非Unicode字符,定長,最大可存儲2GB;ntext存放Unicode字符,非定長,最大可存儲2GB。數(shù)據(jù)類型包括binary、varbinary、image。binary是定長的二進(jìn)制數(shù)據(jù)型,varbinary是非定長的二進(jìn)制數(shù)據(jù)型,兩者最多可以表示8000個(gè)字節(jié)。任何類型的數(shù)據(jù)都可存儲在這種類型的字段中,不需數(shù)據(jù)轉(zhuǎn)換。image類型可以存儲圖片本身,這時(shí)需要事先將圖片轉(zhuǎn)換成二進(jìn)制流的形式,也可以存儲圖片路徑。二進(jìn)制數(shù)據(jù)型:數(shù)據(jù)類型包括timestamp、uniqueidentifier、sql_variant、table。timestamp數(shù)據(jù)類型提供數(shù)據(jù)庫范圍內(nèi)的唯一值。此類型相當(dāng)于binary(8)或varbinary(8),但當(dāng)它所定義的列更新或添加數(shù)據(jù)行時(shí),此列的值會被自動更新,一個(gè)計(jì)數(shù)值將自動地添加到此timestamp數(shù)據(jù)列中。每個(gè)數(shù)據(jù)庫表中只能有一個(gè)timestamp數(shù)據(jù)列。uniqueidentifier數(shù)據(jù)類型稱為全球唯一標(biāo)識符(GloballyUniqueIdentifier,GUID),可用NEWID()函數(shù)產(chǎn)生。特殊類型:數(shù)據(jù)類型特殊類型:sql_variant數(shù)據(jù)類型可以存儲除文本、圖形數(shù)據(jù)和timestamp類型數(shù)據(jù)外的其他任何合法的SQLServer數(shù)據(jù),此數(shù)據(jù)類型大大方便了SQLServer的開發(fā)工作。table數(shù)據(jù)類型用于存儲對表或視圖處理后的結(jié)果集,這一類型使得變量可以存儲一個(gè)表,從而使函數(shù)或過程返回查詢結(jié)果更加方便、快捷。創(chuàng)建數(shù)據(jù)表創(chuàng)建數(shù)據(jù)表有兩種典型方法:一是通過ManagementStudio創(chuàng)建;二是通過SQL命令創(chuàng)建。創(chuàng)建數(shù)據(jù)表右鍵單擊“對象資源管理器”中“數(shù)據(jù)庫”節(jié)點(diǎn)下的“表”節(jié)點(diǎn),從快捷菜單中選擇“新建表”命令,會彈出定義數(shù)據(jù)表結(jié)構(gòu)對話框。其中,每一行用于定義數(shù)據(jù)表的一個(gè)字段,包括字段名、數(shù)據(jù)類型、長度、字段是否為NULL以及默認(rèn)值等。用ManagementStudio創(chuàng)建數(shù)據(jù)表用ManagementStudio創(chuàng)建數(shù)據(jù)表
定義數(shù)據(jù)表結(jié)構(gòu)對話框“列名”(即表中某個(gè)字段名)由用戶命名,最長128字符,可包含中文、英文、下劃線、#號、貨幣符號(¥)及@符號。同一表中不允許有重名的列?!皵?shù)據(jù)類型”,定義字段可存放數(shù)據(jù)的類型?!霸试S空”,當(dāng)對某個(gè)字段的“允許空”列上打勾時(shí),表示該字段的值允許為NULL值。這樣,在向數(shù)據(jù)表中輸入數(shù)據(jù)時(shí),如果沒有給該字段輸入數(shù)據(jù),系統(tǒng)將自動取NULL值,否則,必須給該字段提供數(shù)據(jù)。“默認(rèn)值”,表示該字段的默認(rèn)值(即DEFAULT值)。如果規(guī)定了默認(rèn)值,在向數(shù)據(jù)表中輸入數(shù)據(jù)時(shí),如果沒有給該字段輸入數(shù)據(jù),系統(tǒng)自動將默認(rèn)值寫入該字段。用ManagementStudio創(chuàng)建數(shù)據(jù)表用SQL命令創(chuàng)建數(shù)據(jù)表 CREATETABLE<表名> (<列定義>[{,<列定義>|<表約束>}])<列名><數(shù)據(jù)類型>[DEFAULT][{<列約束>}]
<表名>最多可有128個(gè)字符,如S、SC、C等,不允許重名。DEFAULT,若某字段設(shè)置有默認(rèn)值,則當(dāng)該字段未被輸入數(shù)據(jù)時(shí),以該默認(rèn)值自動填入該字段。用SQL命令創(chuàng)建數(shù)據(jù)表 CREATETABLE<表名> (<列定義>[{,<列定義>|<表約束>}])<列名><數(shù)據(jù)類型>[DEFAULT][{<列約束>}]
[例]用SQL命令建立一個(gè)學(xué)生表S。
CREATETABLES (SNoCHAR(6), SNVARCHAR(10), SexNCHAR(1)DEFAULT'男’, AgeINT, DeptNVARCHAR(20))缺省值為“男”定義數(shù)據(jù)表的約束數(shù)據(jù)表的約束在SQLServer中,對于數(shù)據(jù)表的約束分為列約束和表約束。列約束是對某一個(gè)特定列的約束,包含在列定義中,直接跟在該列的其他定義之后,用空格分隔,不必指定列名。表約束與列定義相互獨(dú)立,不包括在列定義中,通常用于對多個(gè)列一起進(jìn)行約束,與列定義用“,”分隔,定義表約束時(shí)必須指出要約束的列的名稱。定義數(shù)據(jù)表的約束完整性約束的基本語法格式[CONSTRAINT<約束名>]<約束類型>NULL/NOTNULLUNIQUEPRIMARYKEYFOREIGNKEYCHECKNULL/NOTNULL約束NULL表示“不知道”、“不確定”或“沒有數(shù)據(jù)”的意思主鍵列不允許出現(xiàn)空值[CONSTRAINT<約束名>][NULL|NOTNULL][例]建立一個(gè)S表,對SNo字段進(jìn)行NOTNULL約束。
CREATETABLES (SNoVARCHAR(6)CONSTRAINTS_CONSNOTNULL, SNNVARCHAR(10), SexNCHAR(1), AgeINT, DeptNVARCHAR(20))可省略約束名稱:SNoVARCHAR(6)NOTNULLUNIQUE約束(唯一約束)指明基本表在某一列或多個(gè)列的組合上的取值必須唯一在建立UNIQUE約束時(shí),需要考慮以下幾個(gè)因素:使用UNIQUE約束的字段允許為NULL值。一個(gè)表中可以允許有多個(gè)UNIQUE約束。UNIQUE約束用于強(qiáng)制在指定字段上創(chuàng)建一個(gè)UNIQUE索引,缺省為非聚集索引。UNIQUE約束(唯一約束)UNIQUE用于定義列約束[CONSTRAINT<約束名>]UNIQUEUNIQUE用于定義表約束[CONSTRAINT<約束名>]UNIQUE(<列名>[{,<列名>}])UNIQUE約束(唯一約束)[例]建立一個(gè)S表,定義SN為唯一鍵。CREATETABLES(SNoVARCHAR(6),SNNVARCHAR(10)CONSTRAINTSN_UNIQUNIQUE,SexNCHAR(1),AgeINT,DeptNVARCHAR(20))SN_UNIQ可以省略SNNVARCHAR(10)UNIQUE,UNIQUE約束(唯一約束)[例]建立一個(gè)S表,定義SN+Sex為唯一鍵,此約束為表約束。CREATETABLES(SNoVARCHAR(6),SNNVARCHAR(10)UNIQUE,SexNCHAR(1),AgeINT,DeptNVARCHAR(20),CONSTRAINTS_UNIQUNIQUE(SN,Sex))PRIMARYKEY約束(主鍵約束)PRIMARYKEY約束(主鍵約束)用于定義基本表的主鍵,起唯一標(biāo)識作用不能為NULL不能重復(fù)PRIMARYKEY與UNIQUE的區(qū)別:在一個(gè)基本表中只能定義一個(gè)PRIMARYKEY約束,但可定義多個(gè)UNIQUE約束。對于指定為PRIMARYKEY的一個(gè)列或多個(gè)列的組合,其中任何一個(gè)列都不能出現(xiàn)NULL值,而對于UNIQUE所約束的唯一鍵,則允許為NULL。不能為同一個(gè)列或一組列,既定義UNIQUE約束,又定義PRIMARYKEY約束。PRIMARYKEY約束(主鍵約束)PRIMARYKEY用于定義列約束CONSTRAINT<約束名>PRIMARYKEYPRIMARYKEY用于定義表約束[CONSTRAINT<約束名>]PRIMARYKEY(<列名>[{,<列名>}])PRIMARYKEY約束(主鍵約束)[例]建立一個(gè)S表,定義SNo為S的主鍵,建立另外一個(gè)數(shù)據(jù)表C,定義CNo為C的主鍵。定義數(shù)據(jù)表S:CREATETABLES(SNoVARCHAR(6)CONSTRAINTS_PrimPRIMARYKEY,SNNVARCHAR(10)UNIQUE,SexNCHAR(1),AgeINT,DeptNVARCHAR(20))
定義數(shù)據(jù)表C:CREATETABLEC(CNoVARCHAR(6)CONSTRAINTC_PrimPRIMARYKEY,CNNVARCHAR(20),CTINT)PRIMARYKEY約束(主鍵約束)[例]建立一個(gè)SC表,定義SNo+CNo為SC的主鍵。
CREATETABLESC (SNoVARCHAR(6)NOTNULL, CNoVARCHAR(6)NOTNULL, ScoreNUMERIC(4,1), CONSTRAINTSC_PrimPRIMARYKEY(SNo,CNo))FOREIGNKEY約束(外鍵約束)主表從表主鍵外部鍵引用[CONSTRAINT<約束名>]FOREIGNKEYREFERENCES<主表名>(<列名>[{,<列名>}])FOREIGNKEY約束(外鍵約束)[例]建立一個(gè)SC表,定義SNo,CNo為SC的外部鍵。
CREATETABLESC (SNoVARCHAR(6)NOTNULLCONSTRAINTS_Fore FOREIGNKEYREFERENCESS(SNo), CNoVARCHAR(6)NOTNULLCONSTRAINTC_Fore FOREIGNKEYREFERENCESC(CNo), ScoreNUMERIC(4,1), CONSTRAINTS_C_PrimPRIMARYKEY(SNo,CNo))CHECK約束CHECK約束CHECK約束用來檢查字段值所允許的范圍在建立CHECK約束時(shí),需要考慮以下幾個(gè)因素:一個(gè)表中可以定義多個(gè)CHECK約束。每個(gè)字段只能定義一個(gè)CHECK約束。在多個(gè)字段上定義的CHECK約束必須為表約束。當(dāng)執(zhí)行INSERT、UNDATE語句時(shí),CHECK約束將驗(yàn)證數(shù)據(jù)。[CONSTRAINT<約束名>]CHECK(<條件>)CHECK約束[例]建立一個(gè)SC表,定義Score的取值范圍為0~100之間。
CREATETABLESC (SNoVARCHAR(6), CNoVARCHAR(6), ScoreNUMERIC(4,1)CONSTRAINTScore_Chk CHECK(Score>=0ANDScore<=100))修改數(shù)據(jù)表在ManagementStudio中的“對象資源管理器”窗口中,展開“數(shù)據(jù)庫”節(jié)點(diǎn)。右鍵單擊要修改的數(shù)據(jù)表,從快捷菜單中選擇“設(shè)計(jì)”命令,則會彈出修改數(shù)據(jù)表結(jié)構(gòu)對話框??梢栽诖藢υ捒蛑行薷牧械臄?shù)據(jù)類型、名稱等屬性,添加或刪除列,也可以指定表的主關(guān)鍵字約束。修改完畢后,單擊工具欄中的保存按鈕,存盤退出。用ManagementStudio修改數(shù)據(jù)表的結(jié)構(gòu)用ManagementStudio修改數(shù)據(jù)表的結(jié)構(gòu)修改數(shù)據(jù)表結(jié)構(gòu)對話框ALTERTABLE<表名>ADD<列定義>|<完整性約束定義>ALTERTABLE<表名>ALTERCOLUMN<列名><數(shù)據(jù)類型>[NULL|NOTNULL]用SQL命令修改數(shù)據(jù)表結(jié)構(gòu)ALTERTABLE<表名>DROPCONSTRAINT<約束名>用SQL命令修改數(shù)據(jù)表結(jié)構(gòu)[例]在S表中增加一個(gè)班號列和住址列。
ALTERTABLES ADD Class_NoVARCHAR(6), AddressNVARCHAR(20)使用此方式增加的新列自動填充NULL值,所以不能為增加的新列指定NOTNULL約束。[例]在SC表中增加完整性約束定義,使Score在0~100之間。
ALTERTABLESC ADDCONSTRAINTScore_ChkCHECK(ScoreBETWEEN0AND100)用SQL命令修改數(shù)據(jù)表結(jié)構(gòu)[例]把S表中的SN列加寬到12個(gè)字符。
ALTERTABLES ALTERCOLUMN SNNVARCHAR(12)不能改變列名;不能將含有空值的列的定義修改為NOTNULL約束;若列中已有數(shù)據(jù),則不能減少該列的寬度,也不能改變其數(shù)據(jù)類型;只能修改NULL/NOTNULL約束,其他類型的約束在修改之前必須先將約束刪除,然后再重新添加修改過的約束定義。用SQL命令修改數(shù)據(jù)表結(jié)構(gòu)[例]刪除S表中的主鍵。
ALTERTABLES DROPCONSTRAINTS_Prim刪除數(shù)據(jù)表當(dāng)某個(gè)基本表已不再使用時(shí),可將其刪除。刪除后,表中的數(shù)據(jù)和所建的索引都被刪除,建立在該表上的視圖不會刪除,系統(tǒng)將繼續(xù)保留其定義,但已無法使用。刪除基本表如果重新恢復(fù)該表,這些視圖可重新使用。在ManagementStudio中,右鍵單擊要刪除的表,從快捷菜單中選擇“刪除”命令,會彈出“刪除對象”對話框。用ManagementStudio刪除數(shù)據(jù)表單擊“顯示依賴關(guān)系”按鈕,即會彈出“依賴關(guān)系”對話框,其中列出了表所依靠的對象和依賴于表的對象,當(dāng)有對象依賴于表時(shí)不能刪除表。用ManagementStudio刪除數(shù)據(jù)表只能刪除自己建立的表,不能刪除其他用戶所建的表用SQL命令刪除數(shù)據(jù)表DROPTABLE<表名>查看數(shù)據(jù)表在ManagementStudio的“對象資源管理器”中展開“數(shù)據(jù)庫”節(jié)點(diǎn),選中相應(yīng)的數(shù)據(jù)庫,從中找到要查看的數(shù)據(jù)表。查看數(shù)據(jù)表右鍵單擊該表,從快捷菜單中選擇“屬性”菜單項(xiàng),則會彈出“表屬性”對話框,從中可以看到表的詳細(xì)屬性信息,如表名、所有者、創(chuàng)建日期、文件組、記錄行數(shù)、數(shù)據(jù)表中的字段名稱、結(jié)構(gòu)和類型等。查看數(shù)據(jù)表的屬性查看數(shù)據(jù)表查看數(shù)據(jù)表在ManagementStudio的“對象資源管理器”中,用右鍵單擊要查看數(shù)據(jù)的表,從快捷菜單中選擇“選擇前1000行(W)”命令,則會顯示表中的前1000條數(shù)據(jù)。查看數(shù)據(jù)表中的數(shù)據(jù)查看數(shù)據(jù)表關(guān)系表S(學(xué)生關(guān)系)SNo學(xué)號SN姓名Sex性別Age年齡Dept系別S1趙亦女17計(jì)算機(jī)S2錢爾男18信息S3孫珊女20信息S4李思男21自動化S5周武男19計(jì)算機(jī)S6吳麗女20自動化關(guān)系表CNo課程號CN課程名CT課時(shí)C1程序設(shè)計(jì)60C2微機(jī)原理80C3數(shù)字邏輯60C4數(shù)據(jù)結(jié)構(gòu)80C5數(shù)據(jù)庫60C6編譯原理60C7操作系統(tǒng)60C(課程關(guān)系)關(guān)系表SNo學(xué)號CNo課程號Score成績S1C190S1C285S2C557S2C680S2C7S2C470S3C175S3C270S3C485S4C193S4C285S4C383S5C289SC(選課關(guān)系)關(guān)系表TNO教師號TN姓名Sex性別Age年齡Prof職稱Sal工資Comm崗位津貼Dept系別T1李力男47教授15003000計(jì)算機(jī)T2王平女28講師8001200信息T3劉偉男30講師9001200計(jì)算機(jī)T4張雪女51教授16003000自動化T5張?zhí)m女39副教授13002000信息T(教師關(guān)系)關(guān)系表TNo教師號CNo課程號T1C1T1C4T2C5T2C6T3C1T3C5T4C2T4C3T5C5T5C7TC(授課關(guān)系)單關(guān)系(表)的數(shù)據(jù)查詢SELECT[ALL|DISTINCT][TOPN[PERCENT][WITHTIES]]〈列名〉[AS別名1][{,〈列名〉[AS別名2]}]FROM〈表名〉[[AS]表別名][WHERE〈檢索條件〉][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]]單關(guān)系(表)的數(shù)據(jù)查詢結(jié)構(gòu)投影選取無條件查詢[例]查詢?nèi)w學(xué)生的學(xué)號、姓名和年齡。
SELECTSNo,SN,Age FROMS無條件查詢無條件查詢是指只包含“SELECT…FROM”的查詢,這種查詢最簡單,相當(dāng)于只對關(guān)系(表)進(jìn)行投影操作。在菜單欄下方的快捷工具中,單擊“新建查詢”,會彈出查詢窗口(即對象資源管理器右側(cè)的窗口)。無條件查詢在查詢窗口中輸入查詢語句,單擊“!執(zhí)行”,在查詢語句的下方,會顯示對應(yīng)的查詢結(jié)果。無條件查詢[例]查詢學(xué)生的全部信息。
SELECT* FROMS用“*”表示S表的全部列名,而不必逐一列出。無條件查詢[例]查詢選修了課程的學(xué)生的學(xué)號。
SELECTDISTINCTSNo FROMSC無條件查詢[例]查詢?nèi)w學(xué)生的姓名、學(xué)號和年齡。
SELECTSNName,SNo,Age FROMSSELECTSNASName,SNo,Age條件查詢當(dāng)要在表中找出滿足某些條件的行時(shí),則需使用WHERE子句指定查詢條件。WHERE子句中,條件通常通過三部分來描述。常用的比較運(yùn)算符如下表所示。條件查詢(1)列名(2)比較運(yùn)算符(3)列名、常數(shù)運(yùn)算符含義=,>,<,>=,<=,!=,<>比較大小AND,OR,NOT多重條件BETWEENAND確定范圍IN確定集合LIKE字符匹配ISNULL空值1.比較大小條件查詢[例]查詢選修課程號為'C1'的學(xué)生的學(xué)號和成績。SELECTSNo,ScoreFROMSCWHERECNo='C1'[例]查詢成績高于85分的學(xué)生的學(xué)號、課程號和成績。SELECTSNo,CNo,ScoreFROMSCWHEREScore>852.多重條件查詢條件查詢[例]查詢選修C1或C2且分?jǐn)?shù)大于等于85分學(xué)生的學(xué)號、課程號和成績。SELECTSNo,CNo,ScoreFROMSCWHERE(CNo='C1'ORCNo='C2')AND(Score>=85)NOT、AND、OR(用戶可以使用括號改變優(yōu)先級)高低3.確定范圍條件查詢[例]查詢工資在1000元~1500元之間的教師的教師號、姓名及職稱。SELECTTNo,TN,ProfFROMTWHERESalBETWEEN1000AND1500[例]查詢工資不在1000元~1500元間的教師的教師號、姓名及職稱。
SELECTTNo,TN,ProfFROMTWHERESalNOTBETWEEN1000AND1500WHERESal>=1000ANDSal<=15004.確定集合條件查詢[例]查詢選修C1或C2的學(xué)生的學(xué)號、課程號和成績。
SELECTSNo,CNo,Score FROMSC WHERECNoIN('C1','C2’)此語句也可以使用邏輯運(yùn)算符“OR”實(shí)現(xiàn)。
WHERECNo='C1'ORCNo='C2'利用“NOTIN”可以查詢指定集合外的元組。利用“IN“操作可以查詢屬性值屬于指定集合的元組。4.確定集合條件查詢利用“IN”操作可以查詢屬性值屬于指定集合的元組。[例]查詢沒有選修C1,也沒有選修C2的學(xué)生的學(xué)號、課程號和成績。
SELECTSNo,CNo,Score FROMSC WHERECNoNOTIN('C1','C2')5.部分匹配查詢條件查詢當(dāng)不知道完全精確的值時(shí),用戶可以使用LIKE或NOTLIKE進(jìn)行部分匹配查詢(也稱模糊查詢)<屬性名>LIKE<字符串常量>5.部分匹配查詢條件查詢[例]查詢所有姓張的教師的教師號和姓名。
SELECTTNo,TN FROMT WHERETNLIKE'張%'[例]查詢姓名中第二個(gè)漢字是“力”的教師號和姓名。
SELECTTNo,TN FROMT WHERETNLIKE'_力%'6.空值查詢條件查詢[例]查詢沒有考試成績的學(xué)生的學(xué)號和相應(yīng)的課程號。
SELECTSNo,CNo FROMSC WHEREScoreISNULL某個(gè)字段沒有值稱之為具有空值(NULL)空值不同于零和空格,不占任何存儲空間常用庫函數(shù)及統(tǒng)計(jì)匯總查詢常用庫函數(shù)及統(tǒng)計(jì)匯總查詢SQL提供了許多庫函數(shù),增強(qiáng)了基本檢索能力。常用的庫函數(shù)如下表所示。函數(shù)名稱功能AVG按列計(jì)算平均值SUM按列計(jì)算值的總和MAX求一列中的最大值MIN求一列中的最小值COUNT按列值計(jì)個(gè)數(shù)常用庫函數(shù)及統(tǒng)計(jì)匯總查詢[例]求學(xué)號為S1的學(xué)生的總分和平均分。SELECTSUM(Score)ASTotalScore,AVG(Score)ASAvgScoreFROMSCWHERE(SNo='S1')常用庫函數(shù)及統(tǒng)計(jì)匯總查詢[例]求選修C1號課程的最高分、最低分及之間相差的分?jǐn)?shù)。SELECTMAX(Score)ASMaxScore,MIN(Score)ASMinScore,MAX(Score)-MIN(Score)ASDiffFROMSCWHERE(CNo='C1')[例]求計(jì)算機(jī)系學(xué)生的總數(shù)。
SELECTCOUNT(SNo)FROMS WHEREDept='計(jì)算機(jī)'常用庫函數(shù)及統(tǒng)計(jì)匯總查詢[例]求學(xué)校中共有多少個(gè)系。
SELECTCOUNT(DISTINCTDept)ASDeptNumFROMSDISTINCT消去重復(fù)行
[例]統(tǒng)計(jì)有成績同學(xué)的人數(shù)。
SELECTCOUNT(Score) FROMSC其中,成績?yōu)?的同學(xué)也計(jì)算在內(nèi),沒有成績(即為空值)的不計(jì)算。[例]利用特殊函數(shù)COUNT(*)求計(jì)算機(jī)系學(xué)生的總數(shù)。
SELECTCOUNT(*)FROMS WHEREDept='計(jì)算機(jī)'常用庫函數(shù)及統(tǒng)計(jì)匯總查詢COUNT(*)用來統(tǒng)計(jì)元組的個(gè)數(shù),不消除重復(fù)行,不允許使用DISTINCT關(guān)鍵字。分組查詢分組查詢GROUPBY子句可以將查詢結(jié)果按屬性列或?qū)傩粤薪M合在行的方向上進(jìn)行分組,每組在屬性列或?qū)傩粤薪M合上具有相同的值。分組查詢[例]查詢各個(gè)教師的教師號及其任課的門數(shù)。
SELECTTNo,COUNT(*)ASC_Num FROMTC GROUPBYTNoGROUPBY子句按TNo的值分組,所有具有相同TNo的元組為一組,對每一組使用函數(shù)COUNT進(jìn)行計(jì)算,統(tǒng)計(jì)出各位教師任課的門數(shù)。分組查詢?nèi)粼诜纸M后還要按照一定的條件進(jìn)行篩選,則需使用HAVING子句分組查詢[例]查詢選修兩門以上(含兩門)課程的學(xué)生的學(xué)號和選課門數(shù)。SELECTSNo,COUNT(*)ASSC_NumFROMSCGROUPBYSNoHAVING(COUNT(*)>=2)查詢結(jié)果的排序查詢結(jié)果的排序當(dāng)需要對查詢結(jié)果排序時(shí),應(yīng)該使用ORDERBY子句,ORDERBY子句必須出現(xiàn)在其他子句之后。排序方式可以指定,DESC為降序,ASC為升序,缺省時(shí)為升序。查詢結(jié)果的排序[例]查詢選修C1的學(xué)生學(xué)號和成績,并按成績降序排列。
SELECTSNo,Score FROMSC WHERE(CNo='C1’) ORDERBYScoreDESC查詢結(jié)果的排序[例]查詢選修C2,C3,C4或C5課程的學(xué)號、課程號和成績。查詢結(jié)果按學(xué)號升序排列,學(xué)號相同再按成績降序排列。
SELECTSNo,CNo,Score FROMSC WHERECNoIN('C2','C3','C4','C5’) ORDERBYSNo,ScoreDESC多關(guān)系(表)的數(shù)據(jù)查詢當(dāng)查詢同時(shí)涉及兩個(gè)及兩個(gè)以上的表時(shí),稱為連接查詢。連接查詢實(shí)際上是通過各個(gè)表之間共同字段的關(guān)聯(lián)性來查詢數(shù)據(jù)的,這種字段稱為連接字段。多關(guān)系(表)的數(shù)據(jù)查詢表的連接方法有以下兩種:表之間滿足一定條件的行進(jìn)行連接時(shí),F(xiàn)ROM子句指明進(jìn)行連接的表名,WHERE子句指明連接的列名及其連接條件。利用關(guān)鍵字JOIN進(jìn)行連接:當(dāng)將JOIN
關(guān)鍵詞放于FROM子句中時(shí),應(yīng)有關(guān)鍵詞ON與之對應(yīng),以表明連接的條件。關(guān)系(表)的連接查詢結(jié)構(gòu)多關(guān)系(表)的連接查詢結(jié)構(gòu)JION的分類INNERJOIN顯示符合條件的記錄LEFT(OUTER)JOIN為左(外)連接,用于顯示符合條件的數(shù)據(jù)行以及左邊表中不符合條件的數(shù)據(jù)行,此時(shí)右邊數(shù)據(jù)行會以NULL來顯示RIGHT(OUTER)JOIN右(外)連接,用于顯示符合條件的數(shù)據(jù)行以及右邊表中不符合條件的數(shù)據(jù)行。此時(shí)左邊數(shù)據(jù)行會以NULL來顯示FULL(OUTER)JOIN顯示符合條件的數(shù)據(jù)行以及左邊表和右邊表中不符合條件的數(shù)據(jù)行。此時(shí)缺乏數(shù)據(jù)的數(shù)據(jù)行會以NULL來顯示CROSSJOIN將一個(gè)表的每一個(gè)記錄和另一表的每個(gè)記錄匹配成新的數(shù)據(jù)行[例]查詢“劉偉”老師所講授的課程,要求列出教師號、教師姓名和課程號。內(nèi)連接查詢這里TN='劉偉'為查詢條件,而T.TNo=TC.TNo為連接條件,TNo為連接字段。SELECTT.TNo,TN,CNoFROMT,TCWHERE(T.TNo=TC.TNo)AND(TN='劉偉')方法1內(nèi)連接查詢方法2SELECTT.TNo,TN,CNoFROMTINNERJOINTCONT.TNo=TC.TNoWHERE(TN='劉偉')內(nèi)連接查詢[例]查詢所有選課學(xué)生的學(xué)號、姓名、選課名稱及成績。SELECTS.SNo,SN,CN,ScoreFROMS,C,SCWHERES.SNo=SC.SNoANDSC.CNo=C.CNo符合連接條件的數(shù)據(jù)將直接返回到結(jié)果集中,對那些不符合連接條件的列,將被填上NULL值后再返回到結(jié)果集中。外連接查詢外部連接分為左外部連接和右外部連接兩種。以主表所在的方向區(qū)分外部連接,主表在左邊,則稱為左外部連接;主表在右邊,則稱為右外部連接。外連接查詢外連接查詢SELECTS.SNo,SN,CN,ScoreFROMSLEFTOUTERJOINSCONS.SNo=SC.SNoLEFTOUTERJOINCONC.CNo=SC.CNo[例]查詢所有學(xué)生的學(xué)號、姓名、選課名稱及成績(沒有選課的同學(xué)的選課信息顯示為空)交叉查詢(CROSSJOIN)對連接查詢的表沒有特殊的要求,任何表都可以進(jìn)行交叉查詢操作。SELECT*FROMSCROSSJOINC[例]對學(xué)生表S和課程表C進(jìn)行交叉查詢。交叉查詢方法1:SELECTX.TN,X.SalASSal_a,Y.SalASSal_bFROMTASX,TASYWHEREX.Sal>Y.SalANDY.TN='劉偉'自連接查詢[例]查詢所有比“劉偉”工資高的教師姓名、工資和劉偉的工資。方法2:SELECTX.TN,X.Sal,Y.SalFROMTASXINNERJOINTASYONX.Sal>Y.SalANDY.TN='劉偉'子查詢普通子查詢子查詢——普通子查詢返回一個(gè)值的普通子查詢[例]查詢與“劉偉”老師職稱相同的教師號、姓名。 SELECTTNo,TN FROMT WHEREProf=(SELECTProf FROMT WHERETN='劉偉')使用比較運(yùn)算符(=,>,<,>=,<=,!=)子查詢——普通子查詢返回一組值的普通子查詢[例]查詢講授課程號為C5的教師姓名。SELECTTNFROMTWHERE(TNo=ANY(SELECTTNo FROMTC WHERECNo='C5'))SELECTTNFROMT,TCWHERET.TNo=TC.TNoANDTC.CNo='C5'IN——使用ANY子查詢——普通子查詢SELECTTN,SalFROMTWHERESal>(SELECTMIN(Sal)FROMTWHEREDept='計(jì)算機(jī)')ANDDept<>'計(jì)算機(jī)'SELECTTN,SalFROMTWHERE(Sal>ANY(SELECTSalFROMTWHEREDept='計(jì)算機(jī)'))AND(Dept<>'計(jì)算機(jī)')[例]查詢其他系中比計(jì)算機(jī)系某一教師工資高的教師的姓名和工資。返回一組值的普通子查詢——使用ANY子查詢——普通子查詢[例]查詢其他系中比計(jì)算機(jī)系所有教師工資都高的教師的姓名和工資。 SELECTTN,Sal FROMT WHERE(Sal>ALL(SELECTSalFROMT WHEREDept='計(jì)算機(jī)')) AND(Dept<>'計(jì)算機(jī)')Sal>( SELECTMAX(Sal)返回一組值的普通子查詢——使用ALL子查詢——相關(guān)子查詢相關(guān)子查詢的執(zhí)行順序是:(1)選取父查詢表中的第一行記錄,內(nèi)部的子查詢利用此行中相關(guān)的屬性值進(jìn)行查詢;(2)父查詢根據(jù)子查詢返回的結(jié)果判斷此行是否滿足查詢條件。如果滿足條件,則把該行放入父查詢的查詢結(jié)果集合中。(3)重復(fù)執(zhí)行這一過程,直到處理完父查詢表中的每一行數(shù)據(jù)。子查詢——相關(guān)子查詢帶有EXISTS的子查詢不返回任何實(shí)際數(shù)據(jù),它只得到邏輯值“真”或“假”。當(dāng)子查詢的查詢結(jié)果為非空時(shí),外層的WHERE子句返回真值,否則返回假值。NOTEXISTS與此相反。使用EXISTS子查詢——相關(guān)子查詢[例]用含有EXISTS的語句查詢講授課程號為C5的教師姓名。SELECTTNFROMTWHEREEXISTS(SELECT* FROMTCWHERETNo=T.TNoANDCNo='C5')子查詢——相關(guān)子查詢 SELECTTN FROMT WHERE(NOTEXISTS(SELECT*FROMTCWHERETNo=T.TNoANDCNo='C5’))[例]查詢沒有講授課程號為C5的教師姓名。其他類型查詢合并查詢是使用UNION操作符將來自不同查詢的數(shù)據(jù)組合起來,形成一個(gè)具有綜合信息的查詢結(jié)果,UNION操作會自動將重復(fù)的數(shù)據(jù)行剔除。參加合并查詢的各個(gè)子查詢使用的表結(jié)構(gòu)應(yīng)該相同,即各個(gè)子查詢中的字段數(shù)目和對應(yīng)的數(shù)據(jù)類型都必須相同。合并查詢[例]從SC數(shù)據(jù)表中查詢出學(xué)號為“S1”同學(xué)的學(xué)號和總分,再從SC數(shù)據(jù)表中查詢出學(xué)號為“S5”的同學(xué)的學(xué)號和總分,然后將兩個(gè)查詢結(jié)果合并成一個(gè)結(jié)果集。合并查詢 SELECTSNoAS學(xué)號,SUM(Score)AS總分
FROMSC WHERE(SNo='S1') GROUPBYSNo UNION SELECTSNoAS學(xué)號,SUM(Score)AS總分
FROMSC WHERE(SNo='S5') GROUPBYSNo使用SELECT…INTO語句可以將查詢結(jié)果存儲到一個(gè)新建的數(shù)據(jù)庫表或臨時(shí)表中。 SELECTSNoAS學(xué)號,SUM(Score)AS總分
INTOCal_Table FROMSC GROUPBYSNo存儲查詢結(jié)果到表中[例]從SC數(shù)據(jù)表中查詢出所有同學(xué)的學(xué)號和總分,并將查詢結(jié)果存放到一個(gè)新的數(shù)據(jù)表Cal_Table中。數(shù)據(jù)表中數(shù)據(jù)的操縱[例]在SC表中添加一條選課記錄('S7','C1’)。
INSERTINTOSC(SNo,CNo) VALUES('S7','C1')INSERTINTO添加數(shù)據(jù)添加一行新記錄INSERTINTO<表名>[(<列名1>[,<列名2>…])]子查詢添加多行記錄添加數(shù)據(jù)[例]求出各系教師的平均工資,把結(jié)果存放在新AvgSal中。首先建立新表AvgSal,用來存放系名和各系的平均工資。CREATETABLEAvgSal(DepartmentVARCHAR(20),AverageSMALLINT)添加數(shù)據(jù)然后利用子查詢求出T表中各系的平均工資,把結(jié)果存放在新表AvgSal中。INSERTINTOAvgSalSELECTDept,AVG(Sal)FROMTGROUPBYDeptUPDATE<表名>SET<列名>=<表達(dá)式>[,<列名>=<表達(dá)式>]…[WHERE<條件>]UPDATE修改數(shù)據(jù)[例]把劉偉老師轉(zhuǎn)到信息系UPDATETSETDept='信息'WHERESN='劉偉'修改數(shù)據(jù)修改一行修改數(shù)據(jù)[例]將所有學(xué)生的年齡增加1歲。UPDATESSETAge=Age+1[例]把教師表中工資小于或等于1000元的講師的工資提高20%。UPDATETSETSal=1.2*SalWHERE(Prof='講師')AND(Sal<=1000)修改多行
[例]把講授C5課程的教師的崗位津貼增加100元。UPDATETSETComm=Comm+100WHERE(TNoIN(SELECTTNo FROMT,TC WHERET.TNo=TC.TNoANDTC.CNo='C5'))修改數(shù)據(jù)用子查詢選擇要修改的行[例]把所有教師的工資提高到平均工資的1.2倍。UPDATETSETSal=(SELECT1.2*AVG(Sal) FROMT)修改數(shù)據(jù)用子查詢提供要修改的值DELETEFROM<表名>[WHERE<條件>]刪除數(shù)據(jù)刪除一行記錄刪除數(shù)據(jù)[例]刪除劉偉老師的記錄。DELETEFROMTWHERETN='劉偉'[例]刪除所有教師的授課記錄。DELETEFROMTC刪除數(shù)據(jù)刪除多行記錄利用子查詢選擇要刪除的行刪除數(shù)據(jù)
[例]刪除劉偉老師授課的記錄。DELETEFROMTCWHERE(TNo=(SELECTTNo FROMT WHERETN='劉偉'))視圖視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義。同基本表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。行和列數(shù)據(jù)來自定義視圖的查詢所引用的基本表,并且在引用視圖時(shí)動態(tài)生成。視圖
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 脫水機(jī)項(xiàng)目立項(xiàng)申請報(bào)告
- 新建醫(yī)用磁共振設(shè)備項(xiàng)目立項(xiàng)申請報(bào)告
- 農(nóng)藥原藥生產(chǎn)加工項(xiàng)目可行性研究報(bào)告
- 2024年版國有股權(quán)轉(zhuǎn)讓無償劃轉(zhuǎn)操作協(xié)議版
- 2024-2030年新版中國銀焊項(xiàng)目可行性研究報(bào)告
- 機(jī)械課程設(shè)計(jì)渦輪
- 2024-2030年新版中國揚(yáng)機(jī)項(xiàng)目可行性研究報(bào)告
- 2024-2030年撰寫:中國富爾血行業(yè)發(fā)展趨勢及競爭調(diào)研分析報(bào)告
- 2024-2030年撰寫:中國合成酒精行業(yè)發(fā)展趨勢及競爭調(diào)研分析報(bào)告
- 2024-2030年撰寫:中國4氰基苯磺酰胺行業(yè)發(fā)展趨勢及競爭調(diào)研分析報(bào)告
- XX中學(xué)英語興趣社團(tuán)活動教案(共8篇)
- 心房顫動課件
- 超圖軟件三維平臺技術(shù)參數(shù)v8c2015r
- 新教材北師大版高中數(shù)學(xué)選擇性必修第一冊全冊各章節(jié)知識點(diǎn)考點(diǎn)重點(diǎn)難點(diǎn)解題規(guī)律歸納總結(jié)
- 派出所轄區(qū)矛盾糾紛風(fēng)險(xiǎn)隱患研判材料
- 2006年度銀行業(yè)金融機(jī)構(gòu)信息科技風(fēng)險(xiǎn)評價(jià)審計(jì)要點(diǎn)
- 新視野商務(wù)英語視聽說(上):第四版教學(xué)課件U9
- 十年了停下來思考
- 【論藥品犯罪的刑法規(guī)制7000字(論文)】
- 三句半專題教育課件
- 新冠肺炎核酸檢測報(bào)告英文版翻譯模板
評論
0/150
提交評論