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

下載本文檔

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

文檔簡介

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

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

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

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

一個或多個基本表對應(yīng)一個存儲文件視圖(View)

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

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

企業(yè)版(EnterpriseEdition)

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

Web版(WebEdition)

開發(fā)者版(DeveloperEdition)

3.2SQLServer2022Express簡介3.2.2SQLServer2022的主要組件組件

功能數(shù)據(jù)庫引擎存儲、處理和保護(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)大的報表)。SQLLocalDB輕型版本,該版本具備所有可編程性功能,在用戶模式下運行,并且具有快速的零配置安裝和必備組件要求較少的特點北京林業(yè)大學(xué)信息學(xué)院3.2.3ManagementStudio開始→所有程序→MicrosoftSQLServerTools→MicrosoftSQLServerManagementStudio”命令,啟動ManagementStudio圖3-2ManagementStudio3.2SQLServer2022Express簡介3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院3.3.1數(shù)據(jù)庫的存儲結(jié)構(gòu)數(shù)據(jù)文件1事務(wù)日志文件

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

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

當(dāng)數(shù)據(jù)庫破壞時可以用事務(wù)日志還原數(shù)據(jù)庫內(nèi)容北京林業(yè)大學(xué)信息學(xué)院文件組(FileGroup)是將多個數(shù)據(jù)文件集合起來形成的一個整體主要文件組+次要文件組一個數(shù)據(jù)文件只能存在于一個文件組中,一個文件組也只能被一個數(shù)據(jù)庫使用日志文件不分組,它不屬于任何文件組文件組3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院3.3.2SQLServer2022Express的系統(tǒng)數(shù)據(jù)庫ModelMsdbTempdb系統(tǒng)數(shù)據(jù)庫記錄所有系統(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è)置工作計劃警報和作業(yè)Tempdb數(shù)據(jù)庫用作系統(tǒng)的臨時存儲,主要保存顯式創(chuàng)建的臨時用戶對象和數(shù)據(jù)庫引擎創(chuàng)建的內(nèi)部對象MasterResource包含所有系統(tǒng)對象,通過resource數(shù)據(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界面中,在“對象資源管理器”窗口,右鍵單擊“數(shù)據(jù)庫”節(jié)點,在彈出的快捷菜單中選擇“新建數(shù)據(jù)庫(N)…”命令(見圖3-3),即可打開新建數(shù)據(jù)庫窗口(見圖3-4)。(2)圖3-4中,在“常規(guī)”選項卡的“數(shù)據(jù)庫名稱”文本框中輸入數(shù)據(jù)庫的名稱。在“數(shù)據(jù)庫文件”列表中,指定數(shù)據(jù)庫文件的名稱、存儲位置、初始容量大小和所屬文件組等信息,并進(jìn)行數(shù)據(jù)庫文件大小、擴(kuò)充方式和容量限制的設(shè)置。(3)單擊“確定”按鈕,則創(chuàng)建一個新數(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ù)文件自動增長容量,)][LOGON(NAME=日志文件邏輯名稱,FILENAME='路徑+日志文件名’,SIZE=日志文件初始大小,MAXSIZE=日志文件最大容量,FILEGROWTH=日志文件自動增長容量,)][COLLATE數(shù)據(jù)庫校驗方式名稱][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將會按照默認(rèn)的“邏輯名稱”、“文件組”、“初始大小”、“自動增長”和“路徑”等屬性創(chuàng)建數(shù)據(jù)庫。(2)“FILEGROWTH”可以是具體的容量,也可以是UNLIMITED,表示文件無增長容量限制。(3)“數(shù)據(jù)庫校驗方式名稱”可以是Windows校驗方式名稱,也可以是SQL校驗方式名稱。3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院(4)“FORATTACH”表示將已經(jīng)存在的數(shù)據(jù)庫文件附加到新的數(shù)據(jù)庫中。(5)用()括起來的語句,除了最后一行命令之外,其余的命令都用逗號作為分隔符。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)建一個教學(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。3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院3.3.4修改用戶數(shù)據(jù)庫

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

3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院(6)“權(quán)限”選項卡可以設(shè)定用戶或角色對此數(shù)據(jù)庫的操作權(quán)限。(7)“擴(kuò)展屬性”選項卡可以設(shè)定表或列的擴(kuò)展屬性。在設(shè)計表或列時,通常通過表名或列名來表達(dá)含義,當(dāng)表名或列名無法表達(dá)含義時,就需要使用擴(kuò)展屬性。(8)“鏡像”選項卡可以設(shè)定是否對數(shù)據(jù)庫啟用鏡像備份。鏡像備份是一種高性能的備份方案,但需要投入一定的設(shè)備成本,一般用于高可靠性環(huán)境。(9)“事務(wù)日志傳送”選項卡設(shè)定是否啟用事務(wù)日志傳送。事務(wù)日志傳送備份是僅次于鏡像的高可靠性備份方案,可以達(dá)到分鐘級的災(zāi)難恢復(fù)能力,實施成本遠(yuǎn)小于鏡像備份,是一種經(jīng)濟(jì)實用的備份方案。用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=文件自動增長容量])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ù)庫選項。應(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,添加一個次要數(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)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)存儲過程顯示數(shù)據(jù)庫信息

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

用系統(tǒng)存儲過程顯示文件組信息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所示,在對象資源管理器中,選擇要遷移的數(shù)據(jù)庫節(jié)點,單擊鼠標(biāo)右鍵,在快捷菜單中選擇“任務(wù)”,在之后出現(xiàn)的級聯(lián)菜單中選擇“分離”,會彈出如圖3-7所示的“分離數(shù)據(jù)庫”屬性對話框,單擊“確定”按鈕,數(shù)據(jù)庫文件就會從SQLserver2012成功分離。

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

對于選定的數(shù)據(jù)庫節(jié)點,在圖3-6的級聯(lián)菜單中,選擇“生成腳本”命令,會彈出如圖3-10所示的“生成和發(fā)布腳本”窗口。圖3-10“生成和發(fā)布腳本”窗口3.3數(shù)據(jù)庫的操作北京林業(yè)大學(xué)信息學(xué)院3.3.7刪除用戶數(shù)據(jù)庫打開“對象資源管理器”,右鍵單擊要刪除的數(shù)據(jù)庫,從彈出菜單中選擇“刪除”。刪除數(shù)據(jù)庫后,與此數(shù)據(jù)庫關(guān)聯(lián)的數(shù)據(jù)文件和日志文件都會被刪除,系統(tǒng)數(shù)據(jù)庫中存儲的該數(shù)據(jù)庫的所有信息也會被刪除,因此務(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ù)值型日期時間型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字符,可包含中文、英文、下劃線、#號、貨幣符號(¥)及@符號。同一表中不允許有重名的列。②“數(shù)據(jù)類型”,定義字段可存放數(shù)據(jù)的類型。③字段的“長度”、“精度”和“小數(shù)位數(shù)”。字段的長度指字段所能容納的最大數(shù)據(jù)量,不同的數(shù)據(jù)類型,其長度的意義不同。④“允許空”,當(dāng)對某個字段的“允許空”列上打勾“√”時,表示該字段的值允許為NULL值。⑤“默認(rèn)值”,表示該字段的默認(rèn)值。如果規(guī)定了默認(rèn)值,在向數(shù)據(jù)表中輸入數(shù)據(jù)時,如果沒有給該字段輸入數(shù)據(jù),系統(tǒ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命令建立一個學(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)存儲過程(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]建立一個S表,對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值。一個表中可以允許有多個UNIQUE約束??梢园裊NIQUE約束定義在多個字段上。UNIQUE約束用于強(qiáng)制在指定字段上創(chuàng)建一個UNIQUE索引,缺省為非聚集索引。[CONSTRAINT<約束名>]UNIQUE[CONSTRAINT<約束名>]UNIQUE(<列名>[{,<列名>}])UNIQUE約束(唯一約束)指明基本表在某一列或多個列的組合上的取值必須唯一在建立UNIQUE約束時,需要考慮以下幾個因素:UNIQUE用于定義表約束UNIQUE用于定義列約束3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[例3-9]建立一個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]建立一個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é)院在一個基本表中只能定義一個PRIMARYKEY約束,但可定義多個UNIQUE約束。對于指定為PRIMARYKEY的一個列或多個列的組合,其中任何一個列都不能出現(xiàn)NULL值,而對于UNIQUE所約束的唯一鍵,則允許為NULL。不能為同一個列或一組列,既定義UNIQUE約束,又定義PRIMARYKEY約束。PRIMARYKEY約束(主鍵約束)用于定義基本表的主鍵,起唯一標(biāo)識作用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]建立一個S表,定義SNo為S的主鍵,建立另外一個數(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]建立一個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]建立一個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é)院

一個表中可以定義多個CHECK約束。每個字段只能定義一個CHECK約束。在多個字段上定義的CHECK約束必須為表約束。當(dāng)執(zhí)行INSERT、UNDATE語句時,CHECK約束將驗證數(shù)據(jù)。[CONSTRAINT<約束名>]CHECK(<條件>)CHECK約束CHECK約束用來檢查字段值所允許的范圍在建立CHECK約束時,需要考慮以下幾個因素:3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[例3-14]建立一個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中的“對象資源管理器”窗口中,展開“數(shù)據(jù)庫”節(jié)點。(2)右鍵單擊要修改的數(shù)據(jù)表,從快捷菜單中選擇“設(shè)計”命令,則會彈出圖3-13所示的修改數(shù)據(jù)表結(jié)構(gòu)對話框??梢栽诖藢υ捒蛑行薷牧械臄?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表中增加一個班號列和住址列。 ALTERTABLES ADD Class_NoVARCHAR(6), AddressNVARCHAR(20)[例3-17]在SC表中增加完整性約束定義,使Score在0~100之間。 ALTERTABLESC ADDCONSTRAINTScore_ChkCHECK(ScoreBETWEEN0AND100)

使用此方式增加的新列自動填充NULL值,所以不能為增加的新列指定NOTNULL約束。3.4數(shù)據(jù)表的操作北京林業(yè)大學(xué)信息學(xué)院[例3-18]把S表中的SN列加寬到12個字符。 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的對象資源管理器中,用右鍵單擊要查看數(shù)據(jù)的表,從快捷菜單中選擇“選擇前1000行(W)”命令,則會顯示表中的前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”的查詢,這種查詢最簡單,相當(dāng)于只對關(guān)系(表)進(jìn)行投影操作。[例3-21]查詢?nèi)w學(xué)生的學(xué)號、姓名和年齡。 SELECTSNo,SN,Age FROMS

在菜單欄下方的快捷工具中,單擊“新建查詢”,會彈出如圖3-17所示的查詢窗口(即對象資源管理器右側(cè)的窗口)。在查詢窗口中輸入上述查詢語句,單擊“!執(zhí)行”,即可得到如圖3-18所示的查詢結(jié)果界面,可以看出,在查詢語句的下方,是其對應(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é)號。 SELECTDISTINCTSNo FROMSC[例3-24]查詢?nèi)w學(xué)生的姓名、學(xué)號和年齡。 SELECTSNName,SNo,Age FROMSSELECTSNASName,SNo,Age3.5單關(guān)系(表)的數(shù)據(jù)查詢北京林業(yè)大學(xué)信息學(xué)院3.5.3條件查詢算術(shù)運算符

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

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

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

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

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

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

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

一元運算符

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

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

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

查詢結(jié)果按學(xué)號升序排列,學(xué)號相同再按成績降序排列。 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)行連接時,F(xiàn)ROM子句指明進(jìn)行連接的表名,WHERE子句指明連接的列名及其連接條件。(2)利用關(guān)鍵字JOIN進(jìn)行連接:當(dāng)將JOIN關(guān)鍵詞放于FROM子句中時,應(yīng)有關(guān)鍵詞ON與之對應(yīng),以表明連接的條件。表的連接方法有以下兩種:北京林業(yè)大學(xué)信息學(xué)院INNERJOIN顯示符合條件的記錄,此為默認(rèn)值LEFT(OUTER)JOIN為左(外)連接,用于顯示符合條件的數(shù)據(jù)行以及左邊表中不符合條件的數(shù)據(jù)行,此時右邊數(shù)據(jù)行會以NULL來顯示RIGHT(OUTER)JOIN右(外)連接,用于顯示符合條件的數(shù)據(jù)行以及右邊表中不符合條件的數(shù)據(jù)行。此時左邊數(shù)據(jù)行會以NULL來顯示FULL(OUTER)JOIN顯示符合條件的數(shù)據(jù)行以及左邊表和右邊表中不符合條件的數(shù)據(jù)行。此時缺乏數(shù)據(jù)的數(shù)據(jù)行會以NULL來顯示CROSSJOIN將一個表的每一個記錄和另一表的每個記錄匹配成新的數(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]查詢“劉偉”老師所講授的課程,要求列出教師號、教師姓名和課程號。這里TN='劉偉'為查詢條件,而T.TNo=TC.TNo為連接條件,TNo為連接字段。連接條件的一般格式為:[<表名1>.]<列名1><比較運算符>[<表名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é)號、姓名、選課名稱及成績。 SELECTS.SNo,SN,CN,Score FROMS,C,SC WHERES.SNo=SC.SNoANDSC.CNo=C.CNo[例3-52]查詢每門課程的課程號、課程名和選課人數(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é)果集中,對那些不符合連接條件的列,將被填上NULL值后再返回到結(jié)果集中(對BIT類型的列,由于BIT數(shù)據(jù)類型不允許有NULL值,因此將會被填上0值再返回到結(jié)果中)。3.6多關(guān)系(表)的連接查詢北京林業(yè)大學(xué)信息學(xué)院[例3-53]查詢所有學(xué)生的學(xué)號、姓名、選課名稱及成績(沒有選課的同學(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]對學(xué)生表S和課程表C進(jìn)行交叉查詢。 SELECT* FROMSCROSSJOINC

交叉查詢(CROSSJOIN)相當(dāng)對連接查詢的表沒有特殊的要求,任何表都可以進(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]查詢與“劉偉”老師職稱相同的教師號、姓名。 SELECTTNo,TN FROMT WHEREProf=(SELECTProf FROMT WHERETN='劉偉')

在WHERE子句中包含一個形包含子查詢的語句稱為父查詢或外部查詢。如SELECT-FROM-WHERE的查詢塊,此查詢塊稱為子查詢或嵌套查詢,包含子查詢的語句稱為父查詢或外部查詢。使用比較運算符(=,>,<,>=,<=,!=)返回一個值的子查詢北京林業(yè)大學(xué)信息學(xué)院[例3-57]查詢選修課程號為C1的學(xué)生的學(xué)號和姓名。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ī)')ANDDept<>'計算機(jī)'SELECTTN,SalFROMTWHERE(Sal>ANY(SELECTSalFROMTWHEREDept='計算機(jī)'))AND(Dept<>'計算機(jī)')[例3-58]查詢其他系中比計算機(jī)系某一教師工資高的教師的姓名和工資。3.7子查詢北京林業(yè)大學(xué)信息學(xué)院[例3-59]查詢學(xué)號為S2的學(xué)生選修課程的課程號和課程名(使用IN) SELECTCNo,CNFROMCWHERE(CNoIN(SELECTCNoFROMSCWHERESNo='S2'))使用IN

使用IN代替“=ANY”3.7子查詢北京林業(yè)大學(xué)信息學(xué)院[例3-60]查詢其他系中比計算機(jī)系所有教師工資都高的教師的姓名和工資。 SELECTTN,Sal FROMT WHERE(Sal>ALL(SELECTSal FROMT WHEREDept='計算機(jī)')) AND(Dept<>'計算機(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]查詢沒有選修課程號為C1的學(xué)生的學(xué)號和姓名。SELECTSNo,SNFROMSWHERE('C1'<>ALL(SELECTCNoFROMSCWHERESNo=S.SNo))3.7子查詢北京林業(yè)大學(xué)信息學(xué)院[例3-62]用含有EXISTS的語句完成例3-59的查詢,即查詢學(xué)號為S2的學(xué)生選修課程的課程號和課程名。SELECTCNo,CNFROMCWHEREEXISTS(SELECT*FROMSCWHERECNo=C.CNoANDSNo='S2'))使用EXISTS·帶有EXISTS的子查詢不返回任何實際數(shù)據(jù),它只得到邏輯值“真”或“假”?!ぎ?dāng)子查詢的的查詢結(jié)果集合為非空時,外層的WHERE子句返回真值,否則返回假值?!OTEXISTS與此相反。3.7子查詢3.8其他類型查詢北京林業(yè)大學(xué)信息學(xué)院3.8.1集合運算查詢[例3-65]從SC數(shù)據(jù)表中查詢出學(xué)號為“S1”同學(xué)的學(xué)號和總分,再從SC數(shù)據(jù)表中查詢出學(xué)號為“S5”的同學(xué)的學(xué)號和總分,然后將兩個查詢結(jié)果合并成一個結(jié)果集。 SELECTSNoAS學(xué)號,SUM(Score)AS總分 FROMSC WHERE(SNo='S1’) GROUPBYSNo UNION SELECTSNoAS學(xué)號,SUM(Score)AS總分 FROMSC WHERE(SNo='S5’) GROUPBYSNo合并查詢就是使用UNION操作符將來自不同查詢的數(shù)據(jù)組合起來,形成一個具有綜合信息的查詢結(jié)果,UNION操作會自動將重復(fù)的數(shù)據(jù)行剔除。參加合并查詢的各子查詢的使用的表結(jié)構(gòu)應(yīng)該相同,即各子查詢中的數(shù)據(jù)數(shù)目和對應(yīng)的數(shù)據(jù)類型都必須相同。北京林業(yè)大學(xué)信息學(xué)院3.8.2存儲查詢結(jié)果到表中[例3-66]從SC數(shù)據(jù)表中查詢出所有同學(xué)的學(xué)號和總分,并將查詢結(jié)果存放到

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

使用SELECT…INTO語句可以將查詢結(jié)果存儲到一個新建的數(shù)據(jù)庫表或臨時表中。3.8其他類型查詢北京林業(yè)大學(xué)信息學(xué)院【例3-67】查詢講授課程號為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查詢一題多解及對比北京林業(yè)大學(xué)信息學(xué)院【例3-67】查詢講授課程號為C5的教師姓名。方法1:不包含EXISTS語句SELECTTNFROMTWHERE('C5'=ANY(SELECTCNoFROMTCWHERETNo=T.TNo))方法2:包含EXISTS語句SELECTTNFROMTWHEREEXISTS(SELECT*FROMTCWHERETNo=T.TNoANDCNo='C5')相關(guān)子查詢

3.9查詢一題多解及對比北京林業(yè)大學(xué)信息學(xué)院【例3-68】查詢與“數(shù)據(jù)庫”課程相同課時的課程的課程號、課程名和課時。方法1:FROM子句指明連接列表SELECTX.CNo,X.CN,X.CTFROMCASX,CASYWHEREX.CT=Y.CTANDY.CN='數(shù)據(jù)庫'方法2:利用關(guān)鍵字JOIN進(jìn)行連接查詢SELECTX.CNo,X.CN,X.CTFROMCASXINNERJOINCASYONX.CT=Y.CTANDY.CN='數(shù)據(jù)庫'自連接查詢

3.9查詢一題多解及對比北京林業(yè)大學(xué)信息學(xué)院【例3-68】查詢與“數(shù)據(jù)庫”課程相同課時的課程的課程號、課程名和課時。SELECTCNo,CN,CTFROMCWHERE(CT=(SELECTCTFROMCWHERECN='數(shù)據(jù)庫'))SELECTCNo,CN,CTFROMCASXWHEREEXISTS(SELECT*FROMCWHEREX.CT=C.CT

ANDCN='數(shù)據(jù)庫'))普通子查詢

相關(guān)子查詢

3.9查詢一題多解及對比3.10數(shù)據(jù)表中數(shù)據(jù)的操縱北京林業(yè)大學(xué)信息學(xué)院3.10.1添加數(shù)據(jù)表中的數(shù)據(jù)【例3-69】在S表中添加一條學(xué)生記錄(學(xué)號:S7,姓名:鄭冬,性別:女,年齡:21,系別:計算機(jī))。 INSERTINTOS(SNo,SN,Age,Sex,Dept)VALUES('S7','鄭冬',21,'女','計算機(jī)')用ManagementStudio添加數(shù)據(jù)

不能應(yīng)付數(shù)據(jù)的大量添加用SQL命令添加數(shù)據(jù)

INSERTINTO添加一行新記錄[例3-70]在SC表中添加一條選課記錄('S7','C1’)。 INSERTINTOSC(SNo,CNo) VALUES('S7','C1')添加一行記錄的部分?jǐn)?shù)據(jù)值北京林業(yè)大學(xué)信息學(xué)院[例3-71]求出各系教師的平均工資,把結(jié)果存放在新表AvgSal中。首先建立新表AvgSal,用來存放系名和各系的平均工資。CREATETABLEAvgSal(DepartmentVARCHAR(20),AverageSMALLINT)然后利用子查詢求出T表中各系的平均工資,把結(jié)果存放在新表AvgSal中。INSERTINTOAvgSalSELECTDept,AVG(Sal)FROMTGROUPBYDeptINSERTINTO<表名>[(<列名1>[,<列名2>…])]子查詢添加多行記錄3.10數(shù)據(jù)表中數(shù)據(jù)的操縱北京林業(yè)大學(xué)信息學(xué)院3.10.2修改數(shù)據(jù)表中的數(shù)據(jù)UPDATE<表名>SET<列名>=<表達(dá)式>[,<列名>=<表達(dá)式>]…[WHERE<條件>]

UPDATE用ManagementStudio修改數(shù)據(jù)

不能應(yīng)付數(shù)據(jù)的大量修改用SQL命令修改數(shù)據(jù)

3.10數(shù)據(jù)表中數(shù)據(jù)的操縱北京林業(yè)大學(xué)信息學(xué)院[例3-72]把劉偉老師轉(zhuǎn)到信息系UPDATETSETDept='信息'WHERESN='劉偉[例3-73]將所有學(xué)生的年齡增加1歲UPDATESSETAge=Age+1[例3-74]把教師表中工資小于或等于1000元的講師的工資提高20%。UPDATETSETSal=1.2*SalWHERE(Prof='講師')AND(Sal<=1000)修改多行修改一行3.10數(shù)據(jù)表中數(shù)據(jù)的操縱北京林業(yè)大學(xué)信息學(xué)院[例3-75]把講授C5課程的教師的崗位津貼增加100元。UPDATETSETComm=Comm+100WHERE(TNoIN(SELECTTNo FROMT,TC WHERET.TNo=TC.TNoANDTC.CNo='C5'))用子查詢選擇要修改的行用子查詢提供要修改的值[例3-76]把所有教師的工資提高到平均工資的1.2倍。UPDATE

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論