數(shù)據(jù)庫原理及應(yīng)用教程(第5版) (微課版)課件 第3章 關(guān)系型數(shù)據(jù)庫標(biāo)準(zhǔn)語言-SQL_第1頁
數(shù)據(jù)庫原理及應(yīng)用教程(第5版) (微課版)課件 第3章 關(guān)系型數(shù)據(jù)庫標(biāo)準(zhǔn)語言-SQL_第2頁
數(shù)據(jù)庫原理及應(yīng)用教程(第5版) (微課版)課件 第3章 關(guān)系型數(shù)據(jù)庫標(biāo)準(zhǔn)語言-SQL_第3頁
數(shù)據(jù)庫原理及應(yīng)用教程(第5版) (微課版)課件 第3章 關(guān)系型數(shù)據(jù)庫標(biāo)準(zhǔn)語言-SQL_第4頁
數(shù)據(jù)庫原理及應(yīng)用教程(第5版) (微課版)課件 第3章 關(guān)系型數(shù)據(jù)庫標(biāo)準(zhǔn)語言-SQL_第5頁
已閱讀5頁,還剩110頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

北京市優(yōu)質(zhì)本科課程教材數(shù)據(jù)庫原理及應(yīng)用教程(第5版)“十二五”普通高等教育本科國家級(jí)規(guī)劃教材國家級(jí)一流線上課程配套教材第3章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言——SQL第3章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言——SQL目錄北京林業(yè)大學(xué)信息學(xué)院SQL的基本概念與特點(diǎn)01OPTION03OPTION數(shù)據(jù)庫的操作02OPTIONSQLServer2022Express簡(jiǎn)介數(shù)據(jù)表的操作04OPTION06OPTION多關(guān)系(表)的連接查詢05OPTION單關(guān)系(表)的數(shù)據(jù)查詢SQL的基本概念與特點(diǎn)07OPTION09OPTION數(shù)據(jù)庫的操作08OPTIONSQLServer2022Express簡(jiǎn)介數(shù)據(jù)表的操作10OPTION11OPTION單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院結(jié)構(gòu)化查詢語言StructuredQueryLanguage數(shù)據(jù)查詢數(shù)據(jù)定義數(shù)據(jù)操縱數(shù)據(jù)控制3.1SQL的基本概念與特點(diǎn)北京林業(yè)大學(xué)信息學(xué)院3.1.1SQL的發(fā)展及標(biāo)準(zhǔn)化SQL的發(fā)展ChamberlinSEQUEL大型數(shù)據(jù)庫

SybaseINFORMIXSQLServerOracleDB2INGRES----------------小型數(shù)據(jù)庫

FoxProAccessSQL3.1SQL的基本概念與特點(diǎn)北京林業(yè)大學(xué)信息學(xué)院3.1.2SQL的基本概念基本表(BaseTable)

一個(gè)關(guān)系對(duì)應(yīng)一個(gè)基本表

一個(gè)或多個(gè)基本表對(duì)應(yīng)一個(gè)存儲(chǔ)文件視圖(View)

視圖是從一個(gè)或幾個(gè)基本表導(dǎo)出的表,是一個(gè)虛表 S(SNo,SN,Sex,Age,Dept) S_Male(SNo,SN,Age,Dept)無數(shù)據(jù),只有定義Sex='男'在數(shù)據(jù)庫中只存有S_Male的定義,數(shù)據(jù)仍在S表中3.1SQL的基本概念與特點(diǎn)北京林業(yè)大學(xué)信息學(xué)院

SQL語言支持的關(guān)系數(shù)據(jù)庫的三級(jí)模式結(jié)構(gòu)3.1SQL的基本概念與特點(diǎn)北京林業(yè)大學(xué)信息學(xué)院3.1.3SQL的主要特點(diǎn)SQL語言是類似于英語的自然語言,簡(jiǎn)潔易用SQL是一種一體化的語言SQL語言是一種非過程化的語言SQL語言既是自含式語言,又是嵌入式語言SQL語言具有數(shù)據(jù)查詢、數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制四種功能SQL語言是一種面向集合的語言3.2SQLServer2022Express簡(jiǎn)介北京林業(yè)大學(xué)信息學(xué)院3.2.1SQLServer的發(fā)展與版本SQLServer是一個(gè)支持關(guān)系模型的關(guān)系數(shù)據(jù)庫管理系統(tǒng)

企業(yè)版(EnterpriseEdition)

標(biāo)準(zhǔn)版(StandardEdition)

Web版(WebEdition)

開發(fā)者版(DeveloperEdition)

3.2SQLServer2022Express簡(jiǎn)介3.2.2SQLServer2022的主要組件組件

功能數(shù)據(jù)庫引擎存儲(chǔ)、處理和保護(hù)數(shù)據(jù)的核心引擎,復(fù)制,全文搜索以及用于管理關(guān)系數(shù)據(jù)和XML數(shù)據(jù)的工具。SQLServerManagementStudio集成環(huán)境,用于配置和管理SQLServer的主要組件。Full-textSearch用于搜索文本多的數(shù)據(jù)、ReportingServices(用于根據(jù)您的權(quán)數(shù)據(jù)創(chuàng)建功能強(qiáng)大的報(bào)表)。SQLLocalDB輕型版本,該版本具備所有可編程性功能,在用戶模式下運(yùn)行,并且具有快速的零配置安裝和必備組件要求較少的特點(diǎn)北京林業(yè)大學(xué)信息學(xué)院3.2.3ManagementStudio開始→所有程序→MicrosoftSQLServerTools→MicrosoftSQLServerManagementStudio”命令,啟動(dòng)ManagementStudio圖3-2ManagementStudio3.2SQLServer2022Express簡(jiǎn)介3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院3.3.1數(shù)據(jù)庫的存儲(chǔ)結(jié)構(gòu)數(shù)據(jù)文件1事務(wù)日志文件

數(shù)據(jù)庫數(shù)據(jù)文件n…存放數(shù)據(jù)庫數(shù)據(jù)和數(shù)據(jù)庫對(duì)象的文件主要數(shù)據(jù)文件(.mdf)+次要數(shù)據(jù)文件(.ndf)

只有一個(gè)可有多個(gè)保存用于恢復(fù)數(shù)據(jù)庫的日志信息,擴(kuò)展名為.ldf

當(dāng)數(shù)據(jù)庫破壞時(shí)可以用事務(wù)日志還原數(shù)據(jù)庫內(nèi)容北京林業(yè)大學(xué)信息學(xué)院文件組(FileGroup)是將多個(gè)數(shù)據(jù)文件集合起來形成的一個(gè)整體主要文件組+次要文件組一個(gè)數(shù)據(jù)文件只能存在于一個(gè)文件組中,一個(gè)文件組也只能被一個(gè)數(shù)據(jù)庫使用日志文件不分組,它不屬于任何文件組文件組3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院3.3.2SQLServer2022Express的系統(tǒng)數(shù)據(jù)庫ModelMsdbTempdb系統(tǒng)數(shù)據(jù)庫記錄所有系統(tǒng)級(jí)信息,記錄了所有其他數(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ù)庫中可以簡(jiǎn)化數(shù)據(jù)庫及其對(duì)象的創(chuàng)建及設(shè)置工作計(jì)劃警報(bào)和作業(yè)Tempdb數(shù)據(jù)庫用作系統(tǒng)的臨時(shí)存儲(chǔ),主要保存顯式創(chuàng)建的臨時(shí)用戶對(duì)象和數(shù)據(jù)庫引擎創(chuàng)建的內(nèi)部對(duì)象MasterResource包含所有系統(tǒng)對(duì)象,通過resource數(shù)據(jù)庫可以更為輕松快捷地升級(jí)到新的MicrosoftSQLServer版本。3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院3.3.3創(chuàng)建用戶數(shù)據(jù)庫用ManagementStudio創(chuàng)建數(shù)據(jù)庫(1)在圖3-2所示的ManagementStudio界面中,在“對(duì)象資源管理器”窗口,右鍵單擊“數(shù)據(jù)庫”節(jié)點(diǎn),在彈出的快捷菜單中選擇“新建數(shù)據(jù)庫(N)…”命令(見圖3-3),即可打開新建數(shù)據(jù)庫窗口(見圖3-4)。(2)圖3-4中,在“常規(guī)”選項(xiàng)卡的“數(shù)據(jù)庫名稱”文本框中輸入數(shù)據(jù)庫的名稱。在“數(shù)據(jù)庫文件”列表中,指定數(shù)據(jù)庫文件的名稱、存儲(chǔ)位置、初始容量大小和所屬文件組等信息,并進(jìn)行數(shù)據(jù)庫文件大小、擴(kuò)充方式和容量限制的設(shè)置。(3)單擊“確定”按鈕,則創(chuàng)建一個(gè)新數(shù)據(jù)庫。3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院3-3新建用戶數(shù)據(jù)庫圖3-4新建數(shù)據(jù)庫窗口3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院用SQL命令創(chuàng)建數(shù)據(jù)庫CREATEDATABASE數(shù)據(jù)庫名稱[ON[FILEGROUP文件組名稱](NAME=數(shù)據(jù)文件邏輯名稱,FILENAME='路徑+數(shù)據(jù)文件名',SIZE=數(shù)據(jù)文件初始大小,MAXSIZE=數(shù)據(jù)文件最大容量,FILEGROWTH=數(shù)據(jù)文件自動(dòng)增長容量,)][LOGON(NAME=日志文件邏輯名稱,FILENAME='路徑+日志文件名’,SIZE=日志文件初始大小,MAXSIZE=日志文件最大容量,FILEGROWTH=日志文件自動(dòng)增長容量,)][COLLATE數(shù)據(jù)庫校驗(yàn)方式名稱][FORATTACH]

創(chuàng)建數(shù)據(jù)庫的SQL命令的語法格式如下所示:3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院(1)用[]括起來的語句,表示在創(chuàng)建數(shù)據(jù)庫的過程中可以選用或者不選用,例如,在創(chuàng)建數(shù)據(jù)庫的過程中,如果只用第一條語句“CREATEDATABASE數(shù)據(jù)庫名稱”,DBMS將會(huì)按照默認(rèn)的“邏輯名稱”、“文件組”、“初始大小”、“自動(dòng)增長”和“路徑”等屬性創(chuàng)建數(shù)據(jù)庫。(2)“FILEGROWTH”可以是具體的容量,也可以是UNLIMITED,表示文件無增長容量限制。(3)“數(shù)據(jù)庫校驗(yàn)方式名稱”可以是Windows校驗(yàn)方式名稱,也可以是SQL校驗(yàn)方式名稱。3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院(4)“FORATTACH”表示將已經(jīng)存在的數(shù)據(jù)庫文件附加到新的數(shù)據(jù)庫中。(5)用()括起來的語句,除了最后一行命令之外,其余的命令都用逗號(hào)作為分隔符。3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院CREATEDATABASETeacONPRIMARY(NAME=Teach_Data,FILENAME='E:\TeachData.mdf',SIZE=10,MAXSIZE=500,FILEGROWTH=10),FILEGROUPgroup1(NAME=Teach_Data1,FILENAME='E:\TeachData.ndf',SIZE=10,MAXSIZE=500,FILEGROWTH=10)LOGON(NAME=Teach_Log,FILENAME='E:\TeachData.ldf',SIZE=5,MAXSIZE=500,FILEGROWTH=5)[例3-1]用SQL命令創(chuàng)建一個(gè)教學(xué)數(shù)據(jù)庫Teach,數(shù)據(jù)文件的邏輯名稱為Teach_Data,數(shù)據(jù)文件存放在E盤根目錄下,文件名為TeachData.mdf,數(shù)據(jù)文件的初始存儲(chǔ)空間大小為10MB,最大存儲(chǔ)空間為500MB,存儲(chǔ)空間自動(dòng)增長量為10MB;日志文件的邏輯名稱為Teach_Log,日志文件物理地存放在E盤根目錄下,文件名為TeachData.ldf,初始存儲(chǔ)空間大小為5MB,最大存儲(chǔ)空間為500MB,存儲(chǔ)空間自動(dòng)增長量為5MB。3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院3.3.4修改用戶數(shù)據(jù)庫

用ManagementStudio修改數(shù)據(jù)庫(1)“常規(guī)”選項(xiàng)卡中包含數(shù)據(jù)庫的狀態(tài)、所有者、創(chuàng)建日期、大小、可用空間、用戶數(shù)、備份和維護(hù)等信息。(2)“文件”選項(xiàng)卡中包含數(shù)據(jù)文件和日志文件的名稱、存儲(chǔ)位置、初始容量大小、文件增長和文件最大限制等信息。(3)“文件組”選項(xiàng)卡中可以添加或刪除文件組。但是,如果文件組中有文件則不能刪除,必須先將文件移出文件組,才能刪除文件組。(4)“選項(xiàng)”選項(xiàng)卡中可以設(shè)置數(shù)據(jù)庫的許多屬性,如排序規(guī)則、恢復(fù)模式、兼容級(jí)別等。(5)“更改跟蹤”選項(xiàng)卡可以設(shè)定是否對(duì)數(shù)據(jù)庫的修改進(jìn)行跟蹤。打開“對(duì)象資源管理器”,右鍵單擊要修改的數(shù)據(jù)庫,從彈出菜單中選擇“屬性”命令,即可數(shù)據(jù)庫屬性對(duì)話框,如圖3-5所示。3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院圖3-5數(shù)據(jù)庫屬性對(duì)話框

3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院(6)“權(quán)限”選項(xiàng)卡可以設(shè)定用戶或角色對(duì)此數(shù)據(jù)庫的操作權(quán)限。(7)“擴(kuò)展屬性”選項(xiàng)卡可以設(shè)定表或列的擴(kuò)展屬性。在設(shè)計(jì)表或列時(shí),通常通過表名或列名來表達(dá)含義,當(dāng)表名或列名無法表達(dá)含義時(shí),就需要使用擴(kuò)展屬性。(8)“鏡像”選項(xiàng)卡可以設(shè)定是否對(duì)數(shù)據(jù)庫啟用鏡像備份。鏡像備份是一種高性能的備份方案,但需要投入一定的設(shè)備成本,一般用于高可靠性環(huán)境。(9)“事務(wù)日志傳送”選項(xiàng)卡設(shè)定是否啟用事務(wù)日志傳送。事務(wù)日志傳送備份是僅次于鏡像的高可靠性備份方案,可以達(dá)到分鐘級(jí)的災(zāi)難恢復(fù)能力,實(shí)施成本遠(yuǎn)小于鏡像備份,是一種經(jīng)濟(jì)實(shí)用的備份方案。用ManagementStudio修改數(shù)據(jù)庫3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院用SQL命令修改數(shù)據(jù)庫ALTERDATABASE數(shù)據(jù)庫名稱ADDFILE(

具體文件格式)[,…n][TOFILEGROUP文件組名]|ADDLOGFILE(

具體文件格式)[,…n]|REMOVEFILE文件邏輯名稱|MODIFYFILE(

具體文件格式)

可以使用ALTERDATABASE命令修改數(shù)據(jù)庫。注意,只有數(shù)據(jù)庫管理員(DBA)或者具有CREATEDATABASE權(quán)限的人員才有權(quán)執(zhí)行此命令。下面列出常用的修改數(shù)據(jù)庫的SQL命令的語法格式。3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院|ADDFILEGROUP文件組名|REMOVEFILEGROUP文件組名|MODIFYFILEGROUP文件組名{READ_ONLY|READ_WRITE,|DEFAULT,|NAME=新文件組名}}其中,“具體文件格式”為:(NAME=文件邏輯名稱

[,NEWNAME=新文件邏輯名稱][,SIZE=初始文件大小][,MAXSIZE=文件最大容量][,FILEGROWTH=文件自動(dòng)增長容量])3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院各主要參數(shù)說明如下:ADDFILE:向數(shù)據(jù)庫中添加數(shù)據(jù)文件。ADDLOGFILE:向數(shù)據(jù)庫中添加日志文件。REMOVEFILE:從數(shù)據(jù)庫中刪除邏輯文件,并刪除物理文件。如果文件不為空,則無法刪除。MODIFYFILE:指定要修改的文件。ADDFILEGROUP:向數(shù)據(jù)庫中添加文件組。REMOVEFILEGROUP:從數(shù)據(jù)庫中刪除文件組。若文件組非空,無法將其刪除,需要先從文件組中刪除所有文件。MODIFYFILEGROUP:修改文件組名稱、設(shè)置文件組的只讀(READ_ONLY)或者讀寫(READ_WRITE)屬性、指定文件組為默認(rèn)文件組(DEFAULT)。ALTERDATABASE命令可以在數(shù)據(jù)庫中添加或刪除文件和文件組、更改數(shù)據(jù)庫屬性或其文件和文件組、更改數(shù)據(jù)庫排序規(guī)則和設(shè)置數(shù)據(jù)庫選項(xiàng)。應(yīng)注意的是,只有數(shù)據(jù)庫管理員(DBA)或具有CREATEDATABASE權(quán)限的數(shù)據(jù)庫所有者才有權(quán)執(zhí)行此命令。3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院[例3-3]修改Teach數(shù)據(jù)庫中的Teach_Data文件增容方式為一次增加20MB。ALTERDATABASETeachMODIFYFILE(NAME=Teach_Data,FILEGROWTH=20)3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院[例3-4]用SQL命令修改數(shù)據(jù)庫Teach,添加一個(gè)次要數(shù)據(jù)文件,邏輯名稱為Teach_Datanew,存放在E盤根目錄下,文件名為Teach_Datanew.ndf。數(shù)據(jù)文件的初始大小為100MB,最大容量為200MB,文件自動(dòng)增長容量為10MB。ALTERDATABASETeachADDFILE(NAME=Teach_Datanew,FILENAME='E:\Teach_Datanew.ndf',SIZE=100,MAXSIZE=200,FILEGROWTH=10)3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院[例3-5]用SQL命令,從Teach數(shù)據(jù)庫中刪除例3-4中增加的次要數(shù)據(jù)文件。ALTERDATABASETeachREMOVEFILETeach_Datanew3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院3.3.5查看數(shù)據(jù)庫信息···

用ManagementStudio查看數(shù)據(jù)庫信息··· 用系統(tǒng)存儲(chǔ)過程顯示數(shù)據(jù)庫信息

用系統(tǒng)存儲(chǔ)過程顯示數(shù)據(jù)庫結(jié)構(gòu)用系統(tǒng)存儲(chǔ)過程顯示文件信息

用系統(tǒng)存儲(chǔ)過程顯示文件組信息Sp_helpdb[[@dbname=]'name']Sp_helpfile[[@filename=]'name']

Sp_helpfilegroup[[@filegroupname=]'name']3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院3.3.6遷移用戶數(shù)據(jù)庫1.分離和加載如圖3-6所示,在對(duì)象資源管理器中,選擇要遷移的數(shù)據(jù)庫節(jié)點(diǎn),單擊鼠標(biāo)右鍵,在快捷菜單中選擇“任務(wù)”,在之后出現(xiàn)的級(jí)聯(lián)菜單中選擇“分離”,會(huì)彈出如圖3-7所示的“分離數(shù)據(jù)庫”屬性對(duì)話框,單擊“確定”按鈕,數(shù)據(jù)庫文件就會(huì)從SQLserver2012成功分離。

之后,如圖3-8所示,在對(duì)象資源管理器中選擇“數(shù)據(jù)庫”節(jié)點(diǎn),單擊鼠標(biāo)右鍵,在快捷菜單中選擇“附加”,會(huì)彈出“附加數(shù)據(jù)庫”屬性對(duì)框框,單擊其中的“添加”按鈕,在彈出的對(duì)話框中選擇需要的.mdf文件,會(huì)得到如圖3-9中所示的窗口,單擊“確定”,即可把數(shù)據(jù)庫文件附加成功。3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院圖3-6分離數(shù)據(jù)庫文件圖3-7“分離數(shù)據(jù)庫”屬性對(duì)話框3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院圖3-8附加數(shù)據(jù)庫文件圖3-9“附加數(shù)據(jù)庫”屬性對(duì)話框3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院2.生成腳本

對(duì)于選定的數(shù)據(jù)庫節(jié)點(diǎn),在圖3-6的級(jí)聯(lián)菜單中,選擇“生成腳本”命令,會(huì)彈出如圖3-10所示的“生成和發(fā)布腳本”窗口。圖3-10“生成和發(fā)布腳本”窗口3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院3.3.7刪除用戶數(shù)據(jù)庫打開“對(duì)象資源管理器”,右鍵單擊要?jiǎng)h除的數(shù)據(jù)庫,從彈出菜單中選擇“刪除”。刪除數(shù)據(jù)庫后,與此數(shù)據(jù)庫關(guān)聯(lián)的數(shù)據(jù)文件和日志文件都會(huì)被刪除,系統(tǒng)數(shù)據(jù)庫中存儲(chǔ)的該數(shù)據(jù)庫的所有信息也會(huì)被刪除,因此務(wù)必要慎重! 用ManagementStudio刪除數(shù)據(jù)庫DROPDATABASE數(shù)據(jù)庫名稱[,...n][例3-6]刪除數(shù)據(jù)庫Teach。DROPDATABASETeach用SQL命令刪除數(shù)據(jù)庫3.3數(shù)據(jù)庫的操作3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院3.4.1數(shù)據(jù)表的結(jié)構(gòu)北京林業(yè)大學(xué)信息學(xué)院精確數(shù)值型近似數(shù)值型日期時(shí)間型bigint、int、smallint、tinyint、bit、numeric、decimal、money、smallmoneyfloat和realdate,datetime、datetime2、time、smalldatetime、3.4.2數(shù)據(jù)類型3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院Unicode字符數(shù)據(jù)型二進(jìn)制數(shù)據(jù)型其他數(shù)據(jù)型nchar、nvarchar與ntextbinary、varbinary、imagetimestamp、hierarchyid、uniqueidentifier、sql_variant、table字符型char、varchar和text3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院3.4.3創(chuàng)建數(shù)據(jù)表及定義約束相關(guān)屬性定義

①“列名”由用戶命名,最長128字符,可包含中文、英文、下劃線、#號(hào)、貨幣符號(hào)(¥)及@符號(hào)。同一表中不允許有重名的列。②“數(shù)據(jù)類型”,定義字段可存放數(shù)據(jù)的類型。③字段的“長度”、“精度”和“小數(shù)位數(shù)”。字段的長度指字段所能容納的最大數(shù)據(jù)量,不同的數(shù)據(jù)類型,其長度的意義不同。④“允許空”,當(dāng)對(duì)某個(gè)字段的“允許空”列上打勾“√”時(shí),表示該字段的值允許為NULL值。⑤“默認(rèn)值”,表示該字段的默認(rèn)值。如果規(guī)定了默認(rèn)值,在向數(shù)據(jù)表中輸入數(shù)據(jù)時(shí),如果沒有給該字段輸入數(shù)據(jù),系統(tǒng)自動(dòng)將默認(rèn)值寫入該字段。用ManagementStudio創(chuàng)建數(shù)據(jù)表創(chuàng)建數(shù)據(jù)表3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院

用SQL命令創(chuàng)建數(shù)據(jù)表

CREATETABLE<表名> (<列定義>[{,<列定義>|<表約束>}])<列名><數(shù)據(jù)類型>[DEFAULT][{<列約束>}]

缺省值為“男”[例3-7]用SQL命令建立一個(gè)學(xué)生表S。 CREATETABLES ( SNoCHAR(6), SNVARCHAR(10),

SexNCHAR(1)DEFAULT'男’, AgeINT, DeptNVARCHAR(20))3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院正確性有效性相容性

數(shù)據(jù)的完整性約束(Constraint)默認(rèn)(Default)規(guī)則(Rule)觸發(fā)器(Trigger)存儲(chǔ)過程(StoredProcedure)

SQLServer的數(shù)據(jù)完整性機(jī)制3.4.3創(chuàng)建數(shù)據(jù)表及定義約束定義表的約束3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院

[CONSTRAINT<約束名>]<約束類型>完整性約束的基本語法格式

NULL/NOTNULL

UNIQUE

PRIMARYKEY

FOREIGNKEY

CHECK3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[CONSTRAINT<約束名>][NULL|NOTNULL][例3-8]建立一個(gè)S表,對(duì)SNo字段進(jìn)行NOTNULL約束。

CREATETABLES (SNoVARCHAR(6)CONSTRAINTS_CONSNOTNULL, SNNVARCHAR(10), SexNCHAR(1), AgeINT, DeptNVARCHAR(20))NULL/NOTNULL約束NULL表示“不知道”、“不確定”或“沒有數(shù)據(jù)”的意思主鍵列不允許出現(xiàn)空值可省略約束名稱:SNoVARCHAR(6)NOTNULL3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院

使用UNIQUE約束的字段允許為NULL值。一個(gè)表中可以允許有多個(gè)UNIQUE約束??梢园裊NIQUE約束定義在多個(gè)字段上。UNIQUE約束用于強(qiáng)制在指定字段上創(chuàng)建一個(gè)UNIQUE索引,缺省為非聚集索引。[CONSTRAINT<約束名>]UNIQUE[CONSTRAINT<約束名>]UNIQUE(<列名>[{,<列名>}])UNIQUE約束(唯一約束)指明基本表在某一列或多個(gè)列的組合上的取值必須唯一在建立UNIQUE約束時(shí),需要考慮以下幾個(gè)因素:UNIQUE用于定義表約束UNIQUE用于定義列約束3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[例3-9]建立一個(gè)S表,定義SN為唯一鍵。CREATETABLES(SNoVARCHAR(6),SNNVARCHAR(10)CONSTRAINTSN_UNIQUNIQUE,SexNCHAR(1),AgeINT,DeptNVARCHAR(20))SN_UNIQ可以省略SNNVARCHAR(10)UNIQUE,3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[例3-10]建立一個(gè)S表,定義SN+Sex為唯一鍵,此約束為表約束。CREATETABLES(SNoVARCHAR(6),SNNVARCHAR(10)UNIQUE,SexNCHAR(1),AgeINT,DeptNVARCHAR(20)CONSTRAINTS_UNIQUNIQUE(SN,Sex))3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院在一個(gè)基本表中只能定義一個(gè)PRIMARYKEY約束,但可定義多個(gè)UNIQUE約束。對(duì)于指定為PRIMARYKEY的一個(gè)列或多個(gè)列的組合,其中任何一個(gè)列都不能出現(xiàn)NULL值,而對(duì)于UNIQUE所約束的唯一鍵,則允許為NULL。不能為同一個(gè)列或一組列,既定義UNIQUE約束,又定義PRIMARYKEY約束。PRIMARYKEY約束(主鍵約束)用于定義基本表的主鍵,起唯一標(biāo)識(shí)作用PRIMARYKEY與UNIQUE的區(qū)別:不能為NULL不能重復(fù)3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院CONSTRAINT<約束名>PRIMARYKEY[CONSTRAINT<約束名>]PRIMARYKEY(<列名>[{,<列名>}])PRIMARYKEY用于定義列約束PRIMARYKEY用于定義表約束3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[例3-11]建立一個(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)3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[例3-12]建立一個(gè)SC表,定義SNo+CNo為SC的主鍵。 CREATETABLESC (SNoVARCHAR(6)NOTNULL, CNoVARCHAR(6)NOTNULL, ScoreNUMERIC(4,1), CONSTRAINTSC_PrimPRIMARYKEY(SNo,CNo))3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[CONSTRAINT<約束名>]FOREIGNKEYREFERENCES<主表名>(<列名>[{,<列名>}])FOREIGNKEY約束(外鍵約束)外部鍵從表主鍵

主表

引用

3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[例3-13]建立一個(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))3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院

一個(gè)表中可以定義多個(gè)CHECK約束。每個(gè)字段只能定義一個(gè)CHECK約束。在多個(gè)字段上定義的CHECK約束必須為表約束。當(dāng)執(zhí)行INSERT、UNDATE語句時(shí),CHECK約束將驗(yàn)證數(shù)據(jù)。[CONSTRAINT<約束名>]CHECK(<條件>)CHECK約束CHECK約束用來檢查字段值所允許的范圍在建立CHECK約束時(shí),需要考慮以下幾個(gè)因素:3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[例3-14]建立一個(gè)SC表,定義Score的取值范圍為0~100之間。

CREATETABLESC ( SNoVARCHAR(6), CNoVARCHAR(6), ScoreNUMERIC(4,1)CONSTRAINTScore_Chk CHECK(Score>=0ANDScore<=100))3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[例3-15]建立包含完整性定義的學(xué)生表S。CREATETABLES(SNoVARCHAR(6)CONSTRAINTS_PrimPRIMARYKEY,SNNVARCHAR(10)CONSTRAINTSN_ConsNOTNULL,SexNCHAR(1)CONSTRAINTSex_ConsNOTNULLDEFAULT'男',AgeINTCONSTRAINTAge_ConsNOTNULLCONSTRAINTAge_ChkCHECK(AgeBETWEEN15AND50),DeptNVARCHAR(20)CONSTRAINTDept_ConsNOTNULL)3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院3.4.4修改數(shù)據(jù)表(1)在ManagementStudio中的“對(duì)象資源管理器”窗口中,展開“數(shù)據(jù)庫”節(jié)點(diǎn)。(2)右鍵單擊要修改的數(shù)據(jù)表,從快捷菜單中選擇“設(shè)計(jì)”命令,則會(huì)彈出圖3-13所示的修改數(shù)據(jù)表結(jié)構(gòu)對(duì)話框??梢栽诖藢?duì)話框中修改列的數(shù)據(jù)類型、名稱等屬性,添加或刪除列,也可以指定表的主關(guān)鍵字約束。(3)修改完畢后,單擊工具欄中的保存按鈕,存盤退出。

用ManagementStudio修改數(shù)據(jù)表的結(jié)構(gòu)3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院圖3-13修改數(shù)據(jù)表3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院ALTERTABLE<表名>ADD

<列定義>|<完整性約束定義>ALTERTABLE<表名>ALTERCOLUMN<列名><數(shù)據(jù)類型>[NULL|NOTNULL]ALTERTABLE<表名>DROPCONSTRAINT<約束名>

用SQL命令修改數(shù)據(jù)表3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[例3-16]在S表中增加一個(gè)班號(hào)列和住址列。 ALTERTABLES ADD Class_NoVARCHAR(6), AddressNVARCHAR(20)[例3-17]在SC表中增加完整性約束定義,使Score在0~100之間。 ALTERTABLESC ADDCONSTRAINTScore_ChkCHECK(ScoreBETWEEN0AND100)

使用此方式增加的新列自動(dòng)填充NULL值,所以不能為增加的新列指定NOTNULL約束。3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[例3-18]把S表中的SN列加寬到12個(gè)字符。 ALTERTABLES ALTERCOLUMN SNNVARCHAR(12)[例3-19]刪除S表中的主鍵。 ALTERTABLES DROPCONSTRAINTS_Prim不能改變列名;不能將含有空值的列的定義修改為NOTNULL約束;若列中已有數(shù)據(jù),則不能減少該列的寬度,也不能改變其數(shù)據(jù)類型;只能修改NULL/NOTNULL約束,其他類型的約束在修改之前必須先將約束刪除,然后再重新添加修改過的約束定義。3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院3.4.5查看數(shù)據(jù)表查看數(shù)據(jù)表中的數(shù)據(jù)在ManagementStudio的對(duì)象資源管理器中,用右鍵單擊要查看數(shù)據(jù)的表,從快捷菜單中選擇“選擇前1000行(W)”命令,則會(huì)顯示表中的前1000條數(shù)據(jù)查看數(shù)據(jù)表的屬性

屬性包括:表名,所有者,創(chuàng)建日期,文件組,

記錄行數(shù),數(shù)據(jù)表中的字段名稱、結(jié)構(gòu)和類型等。3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院3.4.6刪除基本表只能刪除自己建立的表,不能刪除其他用戶所建的表DROPTABLE<表名>用ManagementStudio刪除數(shù)據(jù)表

用SQL命令刪除數(shù)據(jù)表3.4數(shù)據(jù)表的操作3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院3.5.1單關(guān)系(表)的數(shù)據(jù)查詢結(jié)構(gòu)SELECT[ALL|DISTINCT][TOPN[PERCENT][WITHTIES]]〈列名〉[AS別名1][{,〈列名〉[AS別名2]}]FROM〈表名〉[[AS]表別名][WHERE〈檢索條件〉][GROUP

BY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]]投影選取北京林業(yè)大學(xué)信息學(xué)院3.5.2無條件查詢

無條件查詢是指只包含“SELECT…FROM”的查詢,這種查詢最簡(jiǎn)單,相當(dāng)于只對(duì)關(guān)系(表)進(jìn)行投影操作。[例3-21]查詢?nèi)w學(xué)生的學(xué)號(hào)、姓名和年齡。 SELECTSNo,SN,Age FROMS

在菜單欄下方的快捷工具中,單擊“新建查詢”,會(huì)彈出如圖3-17所示的查詢窗口(即對(duì)象資源管理器右側(cè)的窗口)。在查詢窗口中輸入上述查詢語句,單擊“!執(zhí)行”,即可得到如圖3-18所示的查詢結(jié)果界面,可以看出,在查詢語句的下方,是其對(duì)應(yīng)的查詢結(jié)果。3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院圖3-17新建查詢3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院圖3-18顯示查詢結(jié)果3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院[例3-22]查詢學(xué)生的全部信息。 SELECT* FROMS用“*”表示S表的全部列名,而不必逐一列出。[例3-23]查詢選修了課程的學(xué)生的學(xué)號(hào)。 SELECTDISTINCTSNo FROMSC[例3-24]查詢?nèi)w學(xué)生的姓名、學(xué)號(hào)和年齡。 SELECTSNName,SNo,Age FROMSSELECTSNASName,SNo,Age3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院3.5.3條件查詢算術(shù)運(yùn)算符

【例3-28】查詢教師的教師號(hào)、姓名、工資和津貼總和。SELECTTNo,TN,Sal+Commas工資和津貼總和FROMT3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院3.5.3條件查詢賦值運(yùn)算符

【例3-29】查詢教師的教師號(hào)和工資號(hào),要求查詢結(jié)果中教師號(hào)和工資號(hào)在同一列中。SELECTTNo+TNas教師信息FROMT等號(hào)(=)是唯一的Transact-SQL賦值運(yùn)算符。字符串連接運(yùn)算符

加號(hào)(+)是字符串連接運(yùn)算符,可以用它將字符串連接起來。3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院3.5.3條件查詢比較運(yùn)算符

【例3-30】查詢選修課程號(hào)為C1的學(xué)生的學(xué)號(hào)和成績。SELECTSNo,ScoreFROMSCWHERECNo='C1'3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院3.5.3條件查詢邏輯運(yùn)算符

3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院[例3-32]查詢選修C1或C2且分?jǐn)?shù)大于等于85分學(xué)生的學(xué)號(hào)、課程號(hào)和成績。SELECTSNo,CNo,ScoreFROMSCWHERE(CNo='C1'ORCNo='C2')AND(Score>=85)多重條件查詢高低NOT、AND、OR(用戶可以使用括號(hào)改變優(yōu)先級(jí))3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院[例3-34]查詢工資不在1000元~1500元間的教師的教師號(hào)、姓名及職稱。 SELECTTNo,TN,Prof FROMT WHERESalNOTBETWEEN1000AND1500[例3-33]查詢工資在1000元~1500元之間的教師的教師號(hào)、姓名及職稱。 SELECTTNo,TN,Prof FROMT WHERESalBETWEEN1000AND1500確定范圍WHERESal>=1000ANDSal<=15003.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院[例3-36]查詢沒有選修C1,也沒有選修C2的學(xué)生的學(xué)號(hào)、課程號(hào)和成績。

SELECTSNo,CNo,Score FROMSC WHERECNoNOTIN('C1','C2')[例3-35]查詢選修C1或C2的學(xué)生的學(xué)號(hào)、課程號(hào)和成績。 SELECTSNo,CNo,Score FROMSC WHERECNoIN('C1','C2’)此語句也可以使用邏輯運(yùn)算符“OR”實(shí)現(xiàn)。 WHERECNo='C1'ORCNo='C2'利用“NOTIN”可以查詢指定集合外的元組。確定集合

利用“IN”操作可以查詢屬性值屬于指定集合的元組。3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院[例3-37]查詢所有姓張的教師的教師號(hào)和姓名。 SELECTTNo,TN FROMT WHERETNLIKE'張%'[例3-38]查詢姓名中第二個(gè)漢字是“力”的教師號(hào)和姓名。 SELECTTNo,TN FROMT WHERETNLIKE'_力%'<屬性名>LIKE<字符串常量>部分匹配查詢當(dāng)不知道完全精確的值時(shí),用戶可以使用LIKE或NOTLIKE進(jìn)行部分匹配查詢(也稱模糊查詢)3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院按位運(yùn)算符

一元運(yùn)算符

3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院[例3-39]查詢沒有考試成績的學(xué)生的學(xué)號(hào)和相應(yīng)的課程號(hào)。 SELECTSNo,CNo FROMSC WHEREScoreISNULL空值查詢

某個(gè)字段沒有值稱之為具有空值(NULL)空值不同于零和空格,它不占任何存儲(chǔ)空間3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院3.5.4常用庫函數(shù)及統(tǒng)計(jì)匯總查詢函數(shù)名稱功能AVG按列計(jì)算平均值SUM按列計(jì)算值的總和MAX求一列中的最大值MIN求一列中的最小值COUNT按列值計(jì)個(gè)數(shù)3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院[例3-40]求學(xué)號(hào)為S1的學(xué)生的總分和平均分。 SELECTSUM(Score)ASTotalScore,AVG(Score)AS AvgScore FROMSC WHERE(SNo='S1')[例3-41]求選修C1號(hào)課程的最高分、最低分及之間相差的分?jǐn)?shù)。 SELECTMAX(Score)ASMaxScore,MIN(Score)AS MinScore,MAX(Score)-MIN(Score)ASDiff FROMSC WHERE(CNo='C1')[例3-42]求計(jì)算機(jī)系學(xué)生的總數(shù)。 SELECTCOUNT(SNo)FROMS WHEREDept='計(jì)算機(jī)'3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院[例3-44]統(tǒng)計(jì)有成績同學(xué)的人數(shù)。 SELECTCOUNT(Score) FROMSC上例中成績?yōu)?的同學(xué)也計(jì)算在內(nèi),沒有成績(即為空值)的不計(jì)算。[例3-45]利用特殊函數(shù)COUNT(*)求計(jì)算機(jī)系學(xué)生的總數(shù)。 SELECTCOUNT(*)FROMS WHEREDept='計(jì)算機(jī)'COUNT(*)用來統(tǒng)計(jì)元組的個(gè)數(shù),不消除重復(fù)行,不允許使用DISTINCT關(guān)鍵字。[例3-43]求學(xué)校中共有多少個(gè)系。 SELECTCOUNT(DISTINCTDept)ASDeptNum FROMSDISTINCT消去重復(fù)行3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院3.5.5分組查詢GROUPBY子句可以將查詢結(jié)果按屬性列或?qū)傩粤薪M合在行的方向上進(jìn)行分組,每組在屬性列或?qū)傩粤薪M合上具有相同的值。[例3-46]查詢各個(gè)教師的教師號(hào)及其任課的門數(shù)。 SELECTTNo,COUNT(*)ASC_Num FROMTC GROUPBYTNo

GROUPBY子句按TNo的值分組,所有具有相同TNo的元組為一組,對(duì)每一組使用函數(shù)COUNT進(jìn)行計(jì)算,統(tǒng)計(jì)出各位教師任課的門數(shù)。3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院若在分組后還要按照一定的條件進(jìn)行篩選,則需使用HAVING子句[例3-47]查詢選修兩門以上(含兩門)課程的學(xué)生的學(xué)號(hào)和選課門數(shù)。 SELECTSNo,COUNT(*)ASSC_Num FROMSC GROUPBYSNo HAVING(COUNT(*)>=2)GROUPBY子句按SNo的值分組,所有具有相同SNo的元組為一組,對(duì)每一組使用函數(shù)COUNT進(jìn)行計(jì)算,統(tǒng)計(jì)出每位學(xué)生選課的門數(shù)。HAVING子句去掉不滿足COUNT(*)>=2的組3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院3.5.6查詢結(jié)果的排序當(dāng)需要對(duì)查詢結(jié)果排序時(shí),應(yīng)該使用ORDERBY子句,ORDERBY子句必須出現(xiàn)在其他子句之后。排序方式可以指定,DESC為降序,ASC為升序,缺省時(shí)為升序。[例3-48]查詢選修C1的學(xué)生學(xué)號(hào)和成績,并按成績降序排列。 SELECTSNo,Score FROMSC WHERE(CNo='C1’) ORDERBYScoreDESC3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院[例3-49]查詢選修C2,C3,C4或C5課程的學(xué)號(hào)、課程號(hào)和成績,

查詢結(jié)果按學(xué)號(hào)升序排列,學(xué)號(hào)相同再按成績降序排列。 SELECTSNo,CNo,Score FROMSC WHERECNoIN('C2','C3','C4','C5’) ORDERBYSNo,ScoreDESC3.5單關(guān)系(表)的數(shù)據(jù)查詢3.6多關(guān)系(表)的連接查詢北京林業(yè)大學(xué)信息學(xué)院3.6.1多關(guān)系(表)的連接查詢結(jié)構(gòu)(1)表之間滿足一定條件的行進(jìn)行連接時(shí),F(xiàn)ROM子句指明進(jìn)行連接的表名,WHERE子句指明連接的列名及其連接條件。(2)利用關(guān)鍵字JOIN進(jìn)行連接:當(dāng)將JOIN關(guān)鍵詞放于FROM子句中時(shí),應(yīng)有關(guān)鍵詞ON與之對(duì)應(yīng),以表明連接的條件。表的連接方法有以下兩種:北京林業(yè)大學(xué)信息學(xué)院INNERJOIN顯示符合條件的記錄,此為默認(rèn)值LEFT(OUTER)JOIN為左(外)連接,用于顯示符合條件的數(shù)據(jù)行以及左邊表中不符合條件的數(shù)據(jù)行,此時(shí)右邊數(shù)據(jù)行會(huì)以NULL來顯示RIGHT(OUTER)JOIN右(外)連接,用于顯示符合條件的數(shù)據(jù)行以及右邊表中不符合條件的數(shù)據(jù)行。此時(shí)左邊數(shù)據(jù)行會(huì)以NULL來顯示FULL(OUTER)JOIN顯示符合條件的數(shù)據(jù)行以及左邊表和右邊表中不符合條件的數(shù)據(jù)行。此時(shí)缺乏數(shù)據(jù)的數(shù)據(jù)行會(huì)以NULL來顯示CROSSJOIN將一個(gè)表的每一個(gè)記錄和另一表的每個(gè)記錄匹配成新的數(shù)據(jù)行JION的分類3.6多關(guān)系(表)的連接查詢北京林業(yè)大學(xué)信息學(xué)院3.6.2內(nèi)連接查詢(1)方法1 SELECTT.TNo,TN,CNo FROMT,TC WHERE(T.TNo=TC.TNo)AND(TN='劉偉')[例3-50]查詢“劉偉”老師所講授的課程,要求列出教師號(hào)、教師姓名和課程號(hào)。這里TN='劉偉'為查詢條件,而T.TNo=TC.TNo為連接條件,TNo為連接字段。連接條件的一般格式為:[<表名1>.]<列名1><比較運(yùn)算符>[<表名2>.]<列名2>3.6多關(guān)系(表)的連接查詢北京林業(yè)大學(xué)信息學(xué)院(2)方法2 SELECTT.TNo,TN,CNo FROMTINNERJOINTC ONT.TNo=TC.TNo WHERE(TN='劉偉')(3)方法3SELECTR1.TNoR2.TN,R1.CNoFROM(SELECTTNo,CNoFROMTC)ASR1INNERJOIN(SELECTTNo,TNFROMTWHERETN='劉偉')ASR2ONR1.TNo=R2.TNo3.6多關(guān)系(表)的連接查詢北京林業(yè)大學(xué)信息學(xué)院[例3-51]查詢所有選課學(xué)生的學(xué)號(hào)、姓名、選課名稱及成績。 SELECTS.SNo,SN,CN,Score FROMS,C,SC WHERES.SNo=SC.SNoANDSC.CNo=C.CNo[例3-52]查詢每門課程的課程號(hào)、課程名和選課人數(shù)。 SELECTC.CNO,CN,COUNT(SC.SNo)as選課人數(shù) FROMC,SC WHERESC.CNo=C.CNo GROUPBYC.CNo,CN3.6多關(guān)系(表)的連接查詢北京林業(yè)大學(xué)信息學(xué)院3.6.3外連接查詢外部連接分為左外部連接和右外部連接兩種。以主表所在的方向區(qū)分外部連接,主表在左邊,則稱為左外部連接;主表在右邊,則稱為右外部連接。

符合連接條件的數(shù)據(jù)將直接返回到結(jié)果集中,對(duì)那些不符合連接條件的列,將被填上NULL值后再返回到結(jié)果集中(對(duì)BIT類型的列,由于BIT數(shù)據(jù)類型不允許有NULL值,因此將會(huì)被填上0值再返回到結(jié)果中)。3.6多關(guān)系(表)的連接查詢北京林業(yè)大學(xué)信息學(xué)院[例3-53]查詢所有學(xué)生的學(xué)號(hào)、姓名、選課名稱及成績(沒有選課的同學(xué)的

選課信息顯示為空)。 SELECTS.SNo,SN,CN,Score FROMS LEFTOUTERJOINSC ONS.SNo=SC.SNo LEFTOUTERJOINC ONC.CNo=SC.CNo3.6多關(guān)系(表)的連接查詢北京林業(yè)大學(xué)信息學(xué)院3.6.4交叉查詢

[例3-54]對(duì)學(xué)生表S和課程表C進(jìn)行交叉查詢。 SELECT* FROMSCROSSJOINC

交叉查詢(CROSSJOIN)相當(dāng)對(duì)連接查詢的表沒有特殊的要求,任何表都可以進(jìn)行交叉查詢操作。3.6多關(guān)系(表)的連接查詢北京林業(yè)大學(xué)信息學(xué)院[例3-55]查詢所有比“劉偉”工資高的教師姓名、工資和劉偉的工資。方法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='劉偉'方法3:SELECTR1.TN,R1.Sal,R2.SalFROM(SELECTTN,SalFROMT)ASR1INNERJOIN(SELECTSalFROMTWHERETN='劉偉')ASR2ONR1.Sal>R2.Sal3.6.5自連接查詢3.6多關(guān)系(表)的連接查詢3.7子查詢北京林業(yè)大學(xué)信息學(xué)院3.7.1普通子查詢[例3-56]查詢與“劉偉”老師職稱相同的教師號(hào)、姓名。 SELECTTNo,TN FROMT WHEREProf=(SELECTProf FROMT WHERETN='劉偉')

在WHERE子句中包含一個(gè)形包含子查詢的語句稱為父查詢或外部查詢。如SELECT-FROM-WHERE的查詢塊,此查詢塊稱為子查詢或嵌套查詢,包含子查詢的語句稱為父查詢或外部查詢。使用比較運(yùn)算符(=,>,<,>=,<=,!=)返回一個(gè)值的子查詢北京林業(yè)大學(xué)信息學(xué)院[例3-57]查詢選修課程號(hào)為C1的學(xué)生的學(xué)號(hào)和姓名。SELECTSNo,SNFROMSWHERE(SNo=ANY(SELECTSNoFROMSCWHERECNo='C1'))返回一組值的普通子查詢使用ANY使用ANY或ALLSELECTS.SNo,SNFROMS,SCWHERES.SNo=SC.SNoANDSC.CNo='C1'IN3.7子查詢北京林業(yè)大學(xué)信息學(xué)院SELECTTN,SalFROMTWHERESal>(SELECTMIN(Sal)FROMTWHEREDept='計(jì)算機(jī)')ANDDept<>'計(jì)算機(jī)'SELECTTN,SalFROMTWHERE(Sal>ANY(SELECTSalFROMTWHEREDept='計(jì)算機(jī)'))AND(Dept<>'計(jì)算機(jī)')[例3-58]查詢其他系中比計(jì)算機(jī)系某一教師工資高的教師的姓名和工資。3.7子查詢北京林業(yè)大學(xué)信息學(xué)院[例3-59]查詢學(xué)號(hào)為S2的學(xué)生選修課程的課程號(hào)和課程名(使用IN) SELECTCNo,CNFROMCWHERE(CNoIN(SELECTCNoFROMSCWHERESNo='S2'))使用IN

使用IN代替“=ANY”3.7子查詢北京林業(yè)大學(xué)信息學(xué)院[例3-60]查詢其他系中比計(jì)算機(jī)系所有教師工資都高的教師的姓名和工資。 SELECTTN,Sal FROMT WHERE(Sal>ALL(SELECTSal FROMT WHEREDept='計(jì)算機(jī)')) AND(Dept<>'計(jì)算機(jī)')Sal>( SELECTMAX(Sal)使用ALL3.7子查詢北京林業(yè)大學(xué)信息學(xué)院

相關(guān)子查詢的執(zhí)行順序是:首先選取父查詢表中的第一行記錄,內(nèi)部的子查詢利用此行中相關(guān)的屬性值進(jìn)行查詢,然后父查詢根據(jù)子查詢返回的結(jié)果判斷此行是否滿足查詢條件。如果滿足條件,則把該行放入父查詢的查詢結(jié)果集合中。重復(fù)執(zhí)行這一過程,直到處理完父查詢表中的每一行數(shù)據(jù)。3.7.2相關(guān)子查詢3.7子查詢北京林業(yè)大學(xué)信息學(xué)院[例3-61]查詢沒有選修課程號(hào)為C1的學(xué)生的學(xué)號(hào)和姓名。SELECTSNo,SNFROMSWHERE('C1'<>ALL(SELECTCNoFROMSCWHERESNo=S.SNo))3.7子查詢北京林業(yè)大學(xué)信息學(xué)院[例3-62]用含有EXISTS的語句完成例3-59的查詢,即查詢學(xué)號(hào)為S2的學(xué)生選修課程的課程號(hào)和課程名。SELECTCNo,CNFROMCWHEREEXISTS(SELECT*FROMSCWHERECNo=C.CNoANDSNo='S2'))使用EXISTS·帶有EXISTS的子查詢不返回任何實(shí)際數(shù)據(jù),它只得到邏輯值“真”或“假”。·當(dāng)子查詢的的查詢結(jié)果集合為非空時(shí),外層的WHERE子句返回真值,否則返回假值。·NOTEXISTS與此相反。3.7子查詢3.8其他類型查詢北京林業(yè)大學(xué)信息學(xué)院3.8.1集合運(yùn)算查詢[例3-65]從SC數(shù)據(jù)表中查詢出學(xué)號(hào)為“S1”同學(xué)的學(xué)號(hào)和總分,再從SC數(shù)據(jù)表中查詢出學(xué)號(hào)為“S5”的同學(xué)的學(xué)號(hào)和總分,然后將兩個(gè)查詢結(jié)果合并成一個(gè)結(jié)果集。 SELECTSNoAS學(xué)號(hào),SUM(Score)AS總分 FROMSC WHERE(SNo='S1’) GROUPBYSNo UNION SELECTSNoAS學(xué)號(hào),SUM(Score)AS總分 FROMSC WHERE(SNo='S5’) GROUPBYSNo合并查詢就是使用UNION操作符將來自不同查詢的數(shù)據(jù)組合起來,形成一個(gè)具有綜合信息的查詢結(jié)果,UNION操作會(huì)自動(dòng)將重復(fù)的數(shù)據(jù)行剔除。參加合并查詢的各子查詢的使用的表結(jié)構(gòu)應(yīng)該相同,即各子查詢中的數(shù)據(jù)數(shù)目和對(duì)應(yīng)的數(shù)據(jù)類型都必須相同。北京林業(yè)大學(xué)信息學(xué)院3.8.2存儲(chǔ)查詢結(jié)果到表中[例3-66]從SC數(shù)據(jù)表中查詢出所有同學(xué)的學(xué)號(hào)和總分,并將查詢結(jié)果存放到

一個(gè)新的數(shù)據(jù)表Cal_Table中。 SELECTSNoAS學(xué)號(hào),SUM(Score)AS總分 INTOCal_Table FROMSC GROUPBYSNo

使用SELECT…INTO語句可以將查詢結(jié)果存儲(chǔ)到一個(gè)新建的數(shù)據(jù)庫表或臨時(shí)表中。3.8其他類型查詢北京林業(yè)大學(xué)信息學(xué)院【例3-67】查詢講授課程號(hào)為C5的教師姓名。方法1:FROM子句指明連接列表SELECTTNFROMT,TCWHERET.TNo=TC.TNoANDTC.CNo='C5'方法2:利用關(guān)鍵字JOIN進(jìn)行連接查詢SELECTTNFROMTINNERJOINTCONT.TNo=TC.TNoANDTC.CNo='C5'SELECTTNFROMTWHERE(TNo=ANY(SELECTTNoFROMTCWHERECNo='C5'))多表連接查詢

普通子查詢3.9查詢一題多解及對(duì)比北京林業(yè)大學(xué)信息學(xué)院【例3-67】查詢講授課程號(hào)為C5的教師姓名。方法1:不包含EXISTS語句SELECTTNFROMTWHERE('C5'=ANY(SELECTCNoFROMTCWHERETNo=T.TNo))方法2:包含EXISTS語句SELECTTNFROMTWHEREEXISTS(SELECT*FROMTCWHERETNo=T.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論