數(shù)據(jù)庫(kù)系統(tǒng)概論課程實(shí)驗(yàn)指導(dǎo)書(shū)V1._第1頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論課程實(shí)驗(yàn)指導(dǎo)書(shū)V1._第2頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論課程實(shí)驗(yàn)指導(dǎo)書(shū)V1._第3頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論課程實(shí)驗(yàn)指導(dǎo)書(shū)V1._第4頁(yè)
數(shù)據(jù)庫(kù)系統(tǒng)概論課程實(shí)驗(yàn)指導(dǎo)書(shū)V1._第5頁(yè)
已閱讀5頁(yè),還剩79頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、-?數(shù)據(jù)庫(kù)系統(tǒng)概論?課程實(shí)驗(yàn)指導(dǎo)書(shū)江 濤師學(xué)院計(jì)算機(jī)信息工程系2021.09目錄目錄實(shí)驗(yàn)一 數(shù)據(jù)庫(kù)的創(chuàng)立和管理實(shí)驗(yàn)二 表的創(chuàng)立、管理及數(shù)據(jù)操作實(shí)驗(yàn)三SQL數(shù)據(jù)查詢實(shí)驗(yàn)四SQL數(shù)據(jù)操縱實(shí)驗(yàn)五 數(shù)據(jù)庫(kù)保護(hù)實(shí)驗(yàn)六 數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)附加實(shí)驗(yàn) 事務(wù)并發(fā)控制操作實(shí)驗(yàn)一數(shù)據(jù)庫(kù)的創(chuàng)立和管理一、實(shí)驗(yàn)?zāi)康膎 熟悉SQL Server 2000實(shí)驗(yàn)環(huán)境的設(shè)置、學(xué)會(huì)獨(dú)立使用該系統(tǒng);n 熟悉SQL Server 2000中企業(yè)管理器和查詢分析器兩個(gè)常用管理工具;n 熟練掌握SQL Server Enterprise Manager 創(chuàng)立和管理數(shù)據(jù)庫(kù);n 熟練掌握在查詢分析器中使用T-SQL語(yǔ)句創(chuàng)立和管理數(shù)據(jù)庫(kù)二、實(shí)驗(yàn)容1

2、. 熟悉Microsoft SQL Server / Enterprise Manager2. 熟悉Microsoft SQL 查詢分析器3. 利用企業(yè)管理器創(chuàng)立和管理數(shù)據(jù)庫(kù) (1) 創(chuàng)立數(shù)據(jù)庫(kù)(2) 刪除數(shù)據(jù)庫(kù)4. 在查詢分析器中使用T-SQL語(yǔ)句創(chuàng)立和管理數(shù)據(jù)庫(kù)(1) 創(chuàng)立數(shù)據(jù)庫(kù)(2)修改數(shù)據(jù)庫(kù)(3)刪除數(shù)據(jù)庫(kù)三、實(shí)驗(yàn)步驟1、啟動(dòng)效勞器管理器首先通過(guò)【開(kāi)場(chǎng)】【程序】【Microsoft SQL Servers】【效勞器管理器】,在系統(tǒng)托盤(pán)中會(huì)同時(shí)出現(xiàn)SQL效勞的圖標(biāo),單擊【開(kāi)場(chǎng)/繼續(xù)】前的小三角,此時(shí),在系統(tǒng)托盤(pán)中的圖標(biāo)上會(huì)有一個(gè)綠色箭頭,表示效勞已經(jīng)啟動(dòng)。2、SQL Server 200

3、0企業(yè)管理器首先通過(guò)【開(kāi)場(chǎng)】【程序】【Microsoft SQL Servers】【企業(yè)管理器】進(jìn)入企業(yè)管理器界面。在企業(yè)管理器的左邊列出的是控制臺(tái)管理目錄,依次是數(shù)據(jù)庫(kù)類型SQL Servers、數(shù)據(jù)庫(kù)群組名SQL Servers組、數(shù)據(jù)庫(kù)效勞器主機(jī)名,默認(rèn)連接為本機(jī)和該數(shù)據(jù)庫(kù)效勞器提供的所有的管理工具包括數(shù)據(jù)庫(kù)、數(shù)據(jù)轉(zhuǎn)換效勞、管理、復(fù)制、平安性、支持效勞等。在“數(shù)據(jù)庫(kù)選項(xiàng)中列出的是當(dāng)前效勞器中所有的數(shù)據(jù)庫(kù)名master、model、msdb、Northwind等,其中master、model、tempdb等為系統(tǒng)數(shù)據(jù)庫(kù),記錄其他數(shù)據(jù)庫(kù)的公有屬性和*些隱藏信息,用戶不要直接對(duì)系統(tǒng)數(shù)據(jù)庫(kù)也就是

4、master庫(kù)中的表和數(shù)據(jù)項(xiàng)進(jìn)展修改和刪除,否則將會(huì)給數(shù)據(jù)庫(kù)系統(tǒng)造成不可挽回的損失。3、新建數(shù)據(jù)庫(kù)在效勞器組的“數(shù)據(jù)庫(kù)上,右擊,彈出快捷菜單,選擇“新建數(shù)據(jù)庫(kù)。在彈出的對(duì)話框中常規(guī)General頁(yè)框中,要求用戶輸入數(shù)據(jù)庫(kù)名稱以及排序規(guī)則名稱。點(diǎn)擊數(shù)據(jù)文件Data Files頁(yè)框,該頁(yè)框用來(lái)輸入數(shù)據(jù)庫(kù)文件的邏輯名稱、存儲(chǔ)位置、初始容量大小和所屬文件組名稱,如圖點(diǎn)擊事務(wù)日志Transaction Log頁(yè)框,該頁(yè)框用來(lái)設(shè)置事務(wù)日志文件信息,如圖:?jiǎn)螕簟按_定按鈕,則開(kāi)場(chǎng)創(chuàng)立新的數(shù)據(jù)庫(kù)。4、表操作 新建表 在企業(yè)管理器中,展開(kāi)指定的效勞器和數(shù)據(jù)庫(kù),翻開(kāi)想要?jiǎng)?chuàng)立新表的數(shù)據(jù)庫(kù),用右鍵單擊表對(duì)象,從彈出的快

5、捷菜單中選擇“新建表選項(xiàng),或者在工具欄中選擇圖標(biāo),就會(huì)出現(xiàn)新建表對(duì)話框,在該對(duì)話框中,可以定義列的以下屬性:列名稱、數(shù)據(jù)類型、長(zhǎng)度、精度、小數(shù)位數(shù)、是否允許為空、缺省值、標(biāo)識(shí)列、標(biāo)識(shí)列的初始值、標(biāo)識(shí)列的增量值和是否有行的標(biāo)識(shí)。 然后根據(jù)提示進(jìn)展設(shè)置。 增加、刪除和修改字段 在企業(yè)管理器中,翻開(kāi)指定的效勞器中要修改表的數(shù)據(jù)庫(kù),用右鍵單擊要進(jìn)展修改的表,從彈出的快捷菜單中選擇“設(shè)計(jì)表選項(xiàng),則會(huì)出現(xiàn)設(shè)計(jì)表對(duì)話框,在該對(duì)話框中,可以利用圖形化工具完成增加、刪除和修改字段的操作。 創(chuàng)立、刪除和修改約束 在企業(yè)管理器中,用右鍵單擊要操作的數(shù)據(jù)庫(kù)表,從彈出的快捷菜單中選擇“設(shè)計(jì)表選項(xiàng) ,然后根據(jù)提示對(duì)主鍵進(jìn)

6、展添加、刪除和修改操作。 查看表格在企業(yè)管理器中,用右鍵單擊要操作的數(shù)據(jù)庫(kù)表,從彈出的快捷菜單中選擇“設(shè)計(jì)表選項(xiàng) ,可以查看表格的定義在企業(yè)管理器中,用右鍵單擊要操作的數(shù)據(jù)庫(kù)表,從彈出的快捷菜單中選擇“翻開(kāi)表返回所有行選項(xiàng) ,查看表格中的數(shù)據(jù) 刪除表格 在企業(yè)管理器中,展開(kāi)指定的數(shù)據(jù)庫(kù)和表格項(xiàng),用右鍵單擊要?jiǎng)h除的表,從快捷菜單中選擇“除去表選項(xiàng),則會(huì)出現(xiàn)除去對(duì)象對(duì)話框。單擊“全部刪除按鈕,即可刪除表。5、查詢分析器(Query Analyzer)首先通過(guò)【開(kāi)場(chǎng)】【程序】【Microsoft SQL Servers】【查詢分析器】進(jìn)入查詢分析器界面。窗口的頂部是菜單和工具欄,在工具欄中有一個(gè)數(shù)據(jù)

7、庫(kù)列表框,列出主機(jī)中所有的數(shù)據(jù)庫(kù),用戶可直接在列表框中選擇進(jìn)展操作的數(shù)據(jù)庫(kù)名如:Northwind。主窗口的左邊是對(duì)象瀏覽器包括對(duì)象和模板兩頁(yè),右邊是Transact-SQL程序編輯器。查詢分析器是SQL Server2000的另一個(gè)非常主要的客戶端工具,查詢分析器用Transact-SQL程序?qū)?shù)據(jù)庫(kù)系統(tǒng)進(jìn)展分析和管理,企業(yè)管理器用圖形界面和向?qū)?duì)數(shù)據(jù)庫(kù)進(jìn)展操作。對(duì)于那些更高級(jí)的查詢分析、批處理創(chuàng)立刪除,使用查詢分析器就比較靈活。用戶可直接在編輯器中輸入查詢分析語(yǔ)句“select * from categories,其中categories是Northwind數(shù)據(jù)庫(kù)中的一表,用戶可以在左邊對(duì)

8、象瀏覽器的數(shù)據(jù)庫(kù)用戶表中找到。然后點(diǎn)擊工具欄上的綠色三角形按鈕進(jìn)展執(zhí)行。查詢結(jié)果將出現(xiàn)在編輯器的下面,如以下列圖:查詢分析器的有一實(shí)用功能程序模板,選擇左邊的模板類型,右邊編輯框?qū)⒆詣?dòng)生成相應(yīng)的Transact-SQL程序。修改程序中的參數(shù)就執(zhí)行相應(yīng)的功能。例如要?jiǎng)?chuàng)立一個(gè)數(shù)據(jù)庫(kù),就在左邊選擇Create Database 模板類型,再選擇詳細(xì)類型Create Database Basic Template,右邊出現(xiàn)一段程序,其功能是判斷主機(jī)中是否存在數(shù)據(jù)庫(kù)N,如果存在的話,就將其刪除,然后再創(chuàng)立數(shù)據(jù)庫(kù)N。用戶也可以通過(guò)程序模板來(lái)進(jìn)一步學(xué)習(xí)Transact-SQL語(yǔ)言。6、在查詢分析器使用T-S

9、QL語(yǔ)句管理數(shù)據(jù)庫(kù) 利用T-SQL語(yǔ)句創(chuàng)立數(shù)據(jù)庫(kù)翻開(kāi)查詢分析器,輸入如下語(yǔ)句:CREATE DATABASE MYDBON(NAME='MY_DB_DATA',FILENAME='D:PROGRAM FILESMicrosoft SQL ServerMSSQLdataMY_DB_DATA.MDF',SIZE=5, MA*SIZE=15, FILEGROWTH=2)LOG ON(NAME='MY_DB_LOG',FILENAME='D:PROGRAM FILESMicrosoft SQL ServerMSSQLdataMY_DB_LOG.L

10、DF',SIZE=3, MA*SIZE=10, FILEGROWTH=1)GO 利用T-SQL語(yǔ)句修改數(shù)據(jù)庫(kù)用T-SQL語(yǔ)句完成修改數(shù)據(jù)庫(kù)的操作,語(yǔ)句如下。ALTER DATABASE MYDBADD FILE(NAME='MY_DB_DATA1',FILENAME='C:Program FilesMicrosoft SQL ServerMSSQLdataMY_DB_DATA1.NDF',SIZE=3, MA*SIZE=15, FILEGROWTH=2)GOALTER DATABASE MYDBMODIFY FILE(NAME='MY_DB_LO

11、G',MA*SIZE=20, FILEGROWTH=2)GO 利用T-SQL語(yǔ)句刪除數(shù)據(jù)庫(kù)DROP DATABASE MYDB實(shí)驗(yàn)二 表的創(chuàng)立、管理及數(shù)據(jù)操作一、實(shí)驗(yàn)?zāi)康膎 熟練掌握使用企業(yè)管理器和T-SQL語(yǔ)句創(chuàng)立、修改和刪除表。n 熟練掌握使用企業(yè)管理器和T-SQL語(yǔ)句插入、修改和刪除表數(shù)據(jù)。二、實(shí)驗(yàn)容1、使用企業(yè)管理器創(chuàng)立學(xué)生選修課程數(shù)據(jù)庫(kù)Student_Courses參照課本;2、Student_Courses數(shù)據(jù)庫(kù)包含如下三個(gè)表:學(xué)生表、選修表、課程表;主要設(shè)置表的完整性;3、在企業(yè)管理器中插入、修改和刪除表數(shù)據(jù)。4、使用T-SQL重復(fù)上述操作5、分別使用企業(yè)管理器和T-SQ

12、L修改和刪除表三、實(shí)驗(yàn)步驟1、建立studentdb數(shù)據(jù)庫(kù)和spjdb數(shù)據(jù)庫(kù);2、在studentdb數(shù)據(jù)庫(kù)中利用企業(yè)管理器和查詢分析器創(chuàng)立以下3個(gè)表,同時(shí)完成數(shù)據(jù)完整性的定義實(shí)體完整性、參照完整性和用戶定義的域完整性:student學(xué)生信息表:主碼列名數(shù)據(jù)類型寬度小數(shù)位空否取值圍備注Pksnochar9 N* snamechar10 N sse*char2 Y性別 sagesmallintY不小于12年齡sdeptchar15Y系名course課程表:主碼列名數(shù)據(jù)類型寬度小數(shù)位空否備注PkoChar4 N課程號(hào) 

13、ameChar20 Y課程名稱 cpnoChar4 Y先行課號(hào) ccreditsmallintY學(xué)分sc學(xué)生選課表:主碼列名數(shù)據(jù)類型寬度小數(shù)空否外碼參照關(guān)系取值圍備注PksnoChar9 NFkstudent*oChar4 NFkcourse課程號(hào) gradeDecimal51Y0*100成績(jī)3、在spjdb數(shù)據(jù)庫(kù)中利用企業(yè)管理器和查詢分析器創(chuàng)立以下4個(gè)表,同時(shí)完成數(shù)據(jù)完整性的定義實(shí)體完整性、參照完整性和用戶定義的域完整性:S供應(yīng)商信息表:主碼列名數(shù)據(jù)類型寬度小數(shù)位空否取值圍備注Pksnochar2 N供應(yīng)商號(hào)&#

14、160;snamechar10 N供應(yīng)商名稱 statussmallintY大于0供應(yīng)商狀態(tài)citychar10Y所在城市P零件信息表:主碼列名數(shù)據(jù)類型寬度小數(shù)位空否取值圍備注Pkpnochar2 N零件號(hào) pnamechar10 N零件名稱colorchar2Y顏色 weightsmallintY大于0重量J工程工程表:主碼列名數(shù)據(jù)類型寬度小數(shù)位空否取值圍備注Pkjnochar2 N工程工程號(hào) jnamechar10 N工程工程名稱citychar10Y所在城市SPJ供應(yīng)情況表:主碼列名數(shù)據(jù)類型寬度小數(shù)

15、空否外碼參照關(guān)系取值圍備注PksnoChar2 NFkS供應(yīng)商號(hào)pnoChar2 NFkP零件號(hào)jnoChar2 NFkJ工程工程號(hào) qtysmallintY*>0數(shù)量4、修改表構(gòu)造,具體要求如下:(1) 將表course的ame列的數(shù)據(jù)類型改為varchar(40).(2) 為表student增加一個(gè)新列: birthday(出生日期), 類型為datetime, 默認(rèn)為空值.(3) 將表sc中的grade列的取值圍改為小于等于150的正數(shù).(4) 為Student表的“Se*字段創(chuàng)立一個(gè)缺省約束,缺省值為男(5)為“Sdept字段創(chuàng)立一個(gè)檢查約

16、束,使得所在系必須是CS、MA或IS之一。(6)為Student表的“Sname字段增加一個(gè)唯一性約束(7)為SC表建立外鍵,依賴于Student表的fk_S_c約束。(8)制止啟用Student表的“Sdept的CHECK約束ck_student。5、分別建立以下索引(如果不能成功建立,請(qǐng)分析原因)(1) 在student表的sname列上建立普通降序索引.(2) 在course表的ame列上建立唯一索引.(3) 在sc表的sno列上建立聚集索引.(4) 在spj表的sno(升序), pno(升序)和jno(降序)三列上建立一個(gè)普通索引.Transact-SQL提示: 1. 建立表, 修改表

17、, 建立索引需具有create table的權(quán)限. 2. 創(chuàng)立根本表的SQL語(yǔ)句是CREATE TABLE .簡(jiǎn)單語(yǔ)法格式:CREATE TABLE 表名 ( 列名 數(shù)據(jù)類型 default 缺省值 not null ,列名 數(shù)據(jù)類型 default 缺省值 not null ,primary key列名 ,列名 ,foreign key 列名 ,列名 references 表名 列名 ,列名 ,check條件 );一般語(yǔ)法格式:CREATE TABLE database_name.owner. table_name(<column_definition>| column_name

18、 | < table_constraint> ,n )ON filegroup | DEFAULT TE*TIMAGE_ON filegroup | DEFAULT <column_definition>:=column_name data_typeDEFAULT constant_e*pression| IDENTITY (seed, increment ) ROWGUIDCOL <column_constraint> n參數(shù)說(shuō)明:database_name.owner. table_name:定義表的名字,表名的長(zhǎng)度不得超過(guò)128個(gè)字節(jié),如果是臨時(shí)表,則

19、表名不能超過(guò)116個(gè)字符。<column_definition>:列的定義。column_name:列的名字。列的命名必須遵守有關(guān)數(shù)據(jù)庫(kù)對(duì)象的命名規(guī)則。data_type:列的數(shù)據(jù)類型。DEFAULT constant_e*pression:定義該列的默認(rèn)值。IDENTITY:定義該列是一個(gè)標(biāo)識(shí)列。當(dāng)一個(gè)新的數(shù)據(jù)行插入表中的時(shí)候,SQL Server2000為標(biāo)識(shí)列提供一個(gè)唯一的、遞增的數(shù)值。在一表格中,只能定義一個(gè)標(biāo)識(shí)列。在定義標(biāo)識(shí)列時(shí),必須同時(shí)定義起始值和增量。Seed:定義標(biāo)識(shí)列的起始值。所謂起始值就是插入表的第一行的數(shù)據(jù)的標(biāo)識(shí)列的值。Increment:定義標(biāo)識(shí)列的增量。所

20、謂增量就是插入表的最近一行相對(duì)與前一行標(biāo)識(shí)列的數(shù)據(jù)值的增量。ROWGUIDCOL:定義該列是一個(gè)行全局唯一的標(biāo)識(shí)列。在一表中只有一個(gè)唯一標(biāo)識(shí)符列可以被定義為ROWGUIDCOL。column_constraint:定義與列相關(guān)聯(lián)的約束。table_constraint:定義對(duì)表的約束。ON filegroup | DEFAULT :定義將表存儲(chǔ)在*一個(gè)指定的文件組中,DEFAULT表示將表存儲(chǔ)在默認(rèn)文件組中。TE*TIMAGE_ON filegroup | DEFAULT :如果表中有nte*t、te*t或image類型的數(shù)據(jù),則將這些數(shù)據(jù)存儲(chǔ)在*一個(gè)指定的文件組里。 3. 修改表構(gòu)造的SQL

21、語(yǔ)句是ALTER TABLE, 修改的容包括:修改、增加、刪除列或約束、使約束和觸發(fā)器無(wú)效等。簡(jiǎn)單語(yǔ)法格式:alter table <表名>add <列名> <數(shù)據(jù)類型> <列級(jí)完整性約束> / 增加新列drop <完整性約束名> / 刪除約束 drop column <列名> / 刪除列alter column <列名> <數(shù)據(jù)類型> <列級(jí)完整性約束> ;/修改列定義 其中列級(jí)完整性約束包括:·空值約束 NOT NULL和NULL·主關(guān)鍵字約束 PRIMARY K

22、EY·唯一性約束 UNIQUE·參照完整性約束 FOREIGN KEY一般語(yǔ)法格式:ALTER TABLE table ALTER COLUMN column_name new_data_type NULL| NOT NULL|ADD |DROP ROWGUIDCOL |ADD <column_definition>| column_name AS puted_column_e*pression ,n |ADD <TABLE_CONSTRAINT>,n |DROP CONSTRAINT constraint_name |COLUMN column ,

23、n |CHECK |NOCHECK CONSTRAINT ALL | constraint_name ,n |ENABLE |DISABLE TRIGGER ALL |trigger_name ,n參數(shù)說(shuō)明:ALTER COLUMN:修改已經(jīng)存在的列的屬性。ADD |DROP ROWGUIDCOL:將指定列定義成ROWGUIDCOL,或者刪除該列的ROWGUIDCOL屬性。ADD <column_definition>| column_name AS puted_column_e*pression,n:增加新的列。ADD <TABLE_CONSTRAINT>,n:定義新

24、的表約束。DROP CONSTRAINT constraint_name |COLUMN column ,n:刪除約束或刪除列。CHECK |NOCHECK CONSTRAINT ALL | constraint_name ,n:使所有約束或者指定的約束有效或失效。例:使st_e*ample表中的約束salary_cap失效。ALTER TABLEst_e*ample NOCHECK CONSTRAINT salary_capENABLE |DISABLE TRIGGER ALL |trigger_name ,n:使所有或局部觸發(fā)器有效或無(wú)效。例:使用T_SQL語(yǔ)句對(duì)學(xué)生表進(jìn)展各種修改。向表中

25、添加新的字段:在學(xué)生表中添加一個(gè)“class字段,數(shù)據(jù)類型為字符型。ALTER TABLE student add class char(10)刪除表中的舊列:將學(xué)生表中的“class字段刪除。ALTER TABLE student DROP column class更改表中的約束:刪除*列的約束:將SC表中的外碼約束FK_sc_sno刪除。ALTER TABLE sc DROP FK_sc_sno將Student表中的主碼約束PK_student_sno刪除。ALTER TABLE student DROP PK_student_sno為*列添加約束:為Student表的“Sse*字段創(chuàng)立一

26、個(gè)缺省約束,缺省值為男。ALTER TABLE student ADD constraint def_sse* DEFAULT '男' FOR sse*更改Student表中的“sno字段的寬度為10及非空約束。ALTER TABLE student ALTER COLUMN sno char(10) NOT NULL為Student表添加一個(gè)主碼約束PK_student_sno。ALTER TABLE student ADD CONSTRAINT PK_student_sno PRIMARY KEY(sno)為SC表添加一個(gè)外碼約束FK_sc_sno。ALTER TABLE

27、sc ADD CONSTRAINT FK_sc_sno FOREIGN KEY (sno) REFERENCES student(sno) 給學(xué)生表增加“grade字段并加上CHECK約束,讓其不可以大于100。ALTER TABLE student ADD grade int Constraint ch_grade check(grade<100)E*ec sp_help student給學(xué)生表中添加“birthday字段,并且這個(gè)日期不能在錄入當(dāng)天的日期之后。Alter table student Add birthday DATETIME NULL CONSTRAINT ch_bi

28、rthday CHECK (birthday<getdate()添加具有默認(rèn)值的可為空的列:在學(xué)生表中參加“matriculationday字段,并且這一字段的默認(rèn)值為錄入當(dāng)天的日期。Alter table student Add matriculationday smalldatetime NULL Constraint adddateflt Default getdate()4.建立索引的SQL語(yǔ)句是CREATE INDE*, 語(yǔ)法格式: CREATE UNIQUE CLUSTERED INDE* <索引名> ON <表名>(<列名> ASC |

29、DESC ,<列名> ASC | DESC )其中 UNIQUE指出是唯一索引, CLUSTERED指出是聚集索引。實(shí)驗(yàn)三SQL數(shù)據(jù)查詢一、實(shí)驗(yàn)?zāi)康膎 熟練掌握使用T-SQL語(yǔ)句進(jìn)展單表查詢,尤其要熟練掌握GROUP BY子句、HAVING 子句和集函數(shù);n 熟練掌握使用SQL標(biāo)準(zhǔn)語(yǔ)句和T-SQL擴(kuò)展語(yǔ)句進(jìn)展連接查詢。n 熟練掌握使用IN、比較符、ANY或ALL和E*ISTS操作符進(jìn)展嵌套查詢操作。二、實(shí)驗(yàn)容完成如下單表查詢:1、 單表查詢2、 使用分組和集函數(shù)3、 連接4、 外連接5、 IN子查詢6、 E*ISTS子查詢?nèi)?shí)驗(yàn)步驟1、在studentdb數(shù)據(jù)庫(kù)中Student、

30、Course以及SC表中,完成以下查詢必做:(1)查詢course表中所有學(xué)分大于2并且序號(hào)小于5的課程信息。(2)查詢學(xué)分界于2和8之間的課程的信息。(3)從course表中查詢出課程號(hào)為1或4或7的課程的課程號(hào)、課程名稱、以及學(xué)分。(4)從course表中查詢學(xué)分大于3的課程信息,并按升序排列。(5)查詢每個(gè)學(xué)生及其選修課情況。(6)查詢選修2號(hào)課程且成績(jī)?cè)?0分以上的學(xué)生信息。(7)查詢每個(gè)學(xué)生的*、選修的課程及成績(jī)。(8)在student數(shù)據(jù)庫(kù)中,查詢所有計(jì)算機(jī)系學(xué)生的*、選修課程號(hào)以及分?jǐn)?shù)。(使用IN謂詞)。(9)查詢選修了課程名為“操作系統(tǒng)的學(xué)生*和。(10)在student數(shù)據(jù)庫(kù)

31、中,查詢所有計(jì)算機(jī)系學(xué)生的*、選修課程號(hào)以及分?jǐn)?shù)使用E*ISTS謂詞。2、在spjdb數(shù)據(jù)庫(kù)中S、P、J以及SPJ表中,完成以下查詢選做: 完成P74習(xí)題5中的查詢; 完成P127習(xí)題5中(1)(7)的查詢。Transact-SQL提示:1. SELECT語(yǔ)句的語(yǔ)法格式如下:根本格式:SELECT ALL|DISTINCT <表達(dá)式1>,<表達(dá)式2> FROM <表名1>,<表名2> WHERE <邏輯表達(dá)式>GROUP BY <列名>,<列名> HAVING <謂詞|條件>ORDER BY <

32、;列名>ASC|DESC,<列名>ASC|DESC 一般格式:SELECT ALL|DISTINCT TOP n PERCENT WITH TIES <select_list> INTO <new_table> FROM < table_source > , . n WHERE < search_condition > | < old_outer_join > GROUP BY ALL group_by_e*pression , . n WITH CUBE | ROLLUP HAVING <search_con

33、dition><select_list>:=*|table_name|view_name|table_alias .*|column_nameAS column_alias,n< table_source > := table_name AS table_alias WITH ( < table_hint > ,.n )     | view_name AS table_alias WITH ( < view_hint > ,.n )     | ro

34、wset_function AS table_alias     | user_defined_function AS table_alias     | derived_table AS table_alias ( column_alias ,.n )     | < joined_table >< joined_table > := < table_source > < join_type > < table_sour

35、ce > ON < search_condition >    | < table_source > CROSS JOIN < table_source >    | ( ) < joined_table > < join_type > :=  INNER | LEFT | RIGHT | FULL OUTER      < join_hint >  JOIN< old_o

36、uter_join > := column_name * = | = * column_name參數(shù)說(shuō)明:(1)ALL:默認(rèn)設(shè)置,指定在結(jié)果集中可以顯示重復(fù)行。(2)DISTINCT:指定在結(jié)果集中只能顯示唯一行,空值被認(rèn)為相等。(3)TOP n:指定只從查詢結(jié)果集中輸出前n行。N是介于04294967295之間的整數(shù)。(4)PERCENT:從結(jié)果集中輸出前百分之幾行,當(dāng)指定時(shí)帶PERCENT,n的值必須介于0100之間。(5)WITH TIES:指定從結(jié)果集中返回附加的行,這些行包含與出現(xiàn)在TOP nPERCENT行最后的ORDER BY列中的值相等的值。如果指定了ORDER

37、 BY子句,則只能指定TOPWITH TIES。(6)<select_list>:為結(jié)果選擇的列。選擇列表是以逗號(hào)分隔的一系列表達(dá)式。(7)INTO <new_table>:創(chuàng)立新表并將結(jié)果行從查詢插入新表中。用戶假設(shè)要執(zhí)行帶 INTO 子句的 SELECT 語(yǔ)句,必須在目的數(shù)據(jù)庫(kù)具有 CREATE TABLE 權(quán)限。SELECT.INTO 不能與 PUTE 子句一起使用。new_table 的格式通過(guò)對(duì)選擇列表中的表達(dá)式進(jìn)展取值來(lái)確定。new_table 中的列按選擇列表指定的順序創(chuàng)立。new_table 中的每列有與選擇列表中的相應(yīng)表達(dá)式一樣的名稱、數(shù)據(jù)類型和值。(

38、8) FROM < table_source >: 指定要在Transact-SQL語(yǔ)句中使用的表或視圖帶或不帶別名均可??稍谡Z(yǔ)句中使用多達(dá)256個(gè)表??蓪able變量指定為表源。 < table_source >中的參數(shù)說(shuō)明見(jiàn)(19)。 (9)< old_outer_join >: 使用不標(biāo)準(zhǔn)的產(chǎn)品專用語(yǔ)法和 WHERE 子句指定外聯(lián)接。*= 運(yùn)算符用于指定左向外聯(lián)接,=* 運(yùn)算符用于指定右向外聯(lián)接。注:這種語(yǔ)法具有潛在的二義性解釋并且不標(biāo)準(zhǔn),因此不提倡使用這種語(yǔ)法進(jìn)展外聯(lián)接。而應(yīng)在 FROM 子句中使用聯(lián)接運(yùn)算符指定聯(lián)接。不能在同一語(yǔ)句中同時(shí)使用這兩種

39、方法。(10)<search_condition>:通過(guò)使用謂詞限制結(jié)果集返回的行。對(duì)搜索條件中可以包含的謂詞數(shù)量沒(méi)有限制。(11) *:指定在FROM子句返回所有表和視圖的所有列,列按FROM子句所指定的由表或視圖返回,并按他們?cè)诒砘蛞晥D中的順序返回。(12)column_name:要返回的列名,必要時(shí)限定column_name以防止二義性引用,當(dāng)FROM子句中的兩個(gè)表包含重復(fù)名的列時(shí)會(huì)出現(xiàn)該情況。(13)column_alias:是查詢結(jié)果集替換列名的可選名。(14)GROUP BY ALL: 包含所有組和結(jié)果集,甚至包含那些任何行都不滿足 WHERE 子句指定的搜索條件的組和

40、結(jié)果集。如果指定了 ALL,將對(duì)組中不滿足搜索條件的匯總列返回空值。不能用 CUBE 或 ROLLUP 運(yùn)算符指定 ALL。如果遠(yuǎn)程表的查詢中有 WHERE 子句,則不支持 GROUP BY ALL 操作。(15)group_by_e*pression : 是對(duì)其執(zhí)行分組的表達(dá)式。group_by_e*pression 也稱為分組列。group_by e*pression 可以是列或引用列的非聚合表達(dá)式。在選擇列表定義的列的別名不能用于指定分組列。說(shuō)明  te*t、nte*t 和 image 類型的列不能用于 group_by_e*pression。對(duì)于不包含 CUBE 或

41、 ROLLUP 的 GROUP BY 子句,group_by_e*pression 的項(xiàng)數(shù)受查詢所涉及的 GROUP BY 列的大小、聚合列和聚合值的限制。該限制從 8,060 字節(jié)的限制開(kāi)場(chǎng),對(duì)保存中間查詢結(jié)果所需的中間級(jí)工作表有 8,060 字節(jié)的限制。如果指定了 CUBE 或 ROLLUP,則最多只能有 10 個(gè)分組表達(dá)式。(16)CUBE: 指定在結(jié)果集不僅包含由 GROUP BY 提供的正常行,還包含匯總行。在結(jié)果集返回每個(gè)可能的組和子組組合的 GROUP BY 匯總行。GROUP BY 匯總行在結(jié)果中顯示為 NULL,但可用來(lái)表示所有值。使用 GROUPING 函數(shù)確定結(jié)果集的空值

42、是否是 GROUP BY 匯總值。結(jié)果集的匯總行數(shù)取決于 GROUP BY 子句包含的列數(shù)。GROUP BY 子句中的每個(gè)操作數(shù)列綁定在分組 NULL 下,并且分組適用于所有其它操作數(shù)列。由于 CUBE 返回每個(gè)可能的組和子組組合,因此不管指定分組列時(shí)所使用的是什么順序,行數(shù)都一樣。(17)ROLLUP: 指定在結(jié)果集不僅包含由 GROUP BY 提供的正常行,還包含匯總行。按層次構(gòu)造順序,從組的最低級(jí)別到最高級(jí)別匯總組。組的層次構(gòu)造取決于指定分組列時(shí)所使用的順序。更改分組列的順序會(huì)影響在結(jié)果集生成的行數(shù)。重要提示:使用 CUBE 或 ROLLUP 時(shí),不支持區(qū)分聚合,如 AVG(DISTIN

43、CT column_name)、COUNT(DISTINCT column_name) 和 SUM(DISTINCT column_name)。如果使用這類聚合,SQL Server 將返回錯(cuò)誤信息并取消查詢。(18) HAVING <search_condition>: 指定組或聚合應(yīng)滿足的搜索條件。HAVING 通常與 GROUP BY 子句一起使用。當(dāng) HAVING 與 GROUP BY ALL 一起使用時(shí),HAVING 子句替代 ALL。如果不使用 GROUP BY 子句,HAVING 的行為與 WHERE 子句一樣。注:在HAVING子句中不能使用te*t、image和n

44、te*t數(shù)據(jù)類型。在SELECT語(yǔ)句中使用HAVING 子句不影響CUBE運(yùn)算符分組結(jié)果集和返回匯總聚合行的方式。(19) < table_source >中的參數(shù)說(shuō)明:table_name: 表名。FROM 關(guān)鍵字之后的表和視圖的順序并不影響返回的結(jié)果集。當(dāng) FROM 子句中出現(xiàn)重復(fù)名稱時(shí)將報(bào)告錯(cuò)誤。AS table_alias: table_name、view_name 或 rowset_function 的別名,為方便起見(jiàn)而使用,或用于區(qū)分自聯(lián)接或子查詢中的表或視圖。別名通常是一個(gè)縮短了的表名,用于在聯(lián)接中引用表中的特定列。如果聯(lián)接中的多個(gè)表中有一樣名稱的列存在,SQL Se

45、rver 要求必須使用表名或別名來(lái)限定列名。如果定義了別名則不能使用表名。WITH ( < table_hint > ) : 指定表掃描、查詢優(yōu)化器要使用的一個(gè)或多個(gè)索引或查詢優(yōu)化器要對(duì)此表、此語(yǔ)句使用的鎖定方法。有關(guān)更多信息,請(qǐng)參見(jiàn)"表提示"。view_name: 是視圖名稱。視圖是一個(gè)"虛擬表",通常創(chuàng)立為一個(gè)或多個(gè)表中列的子集。 WITH ( < view_hint > ) :指定索引視圖掃描。默認(rèn)情況下,視圖在查詢優(yōu)化器處理查詢之前展開(kāi)。視圖提示只能用在 SELECT 語(yǔ)句中,而不能用于 UPDATE、DELETE 或 I

46、NSERT 語(yǔ)句。rowset_function: 指定一個(gè)行集函數(shù),該函數(shù)返回可替代表引用的對(duì)象。user_defined_function : 指定用戶定義的函數(shù),該函數(shù)返回一個(gè)表。如果用戶定義的函數(shù)是一個(gè)置的用戶定義函數(shù),則前面必須加兩個(gè)冒號(hào),如:FROM :fn_liste*tendedpropertyderived_table: 是從數(shù)據(jù)庫(kù)中檢索行的子查詢。derived_table 用作對(duì)外部查詢的輸入。 column_alias: 替換結(jié)果集列名的可選別名。在選擇列表中放入每個(gè)列的一個(gè)別名,并將整個(gè)列別名列表用圓括號(hào)括起來(lái)。<joined_table>: 由兩個(gè)或更多

47、表的積組成的結(jié)果集,例如:SELECT * FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3 RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4 ON tab3.c1 = tab4.c1 ON tab2.c3 = tab4.c3對(duì)于多個(gè) CROSS 聯(lián)接,請(qǐng)使用圓括號(hào)來(lái)更改聯(lián)接的自然順序。<join_type>: 指定聯(lián)接操作的類型。INNER: 指定返回每對(duì)匹配的行。廢棄兩個(gè)表中不匹配的行。如果未指定聯(lián)接類型,則這是默認(rèn)設(shè)置。FULL OUTER: 指定在結(jié)果集中包含左表或右表中不滿足聯(lián)接條件

48、的行,并將對(duì)應(yīng)于另一個(gè)表的輸出列設(shè)為 NULL。這是對(duì)通常由 INNER JOIN 返回的所有行的補(bǔ)充。注:按此處指定的方法指定外聯(lián)接或在 WHERE 子句中使用舊式非標(biāo)準(zhǔn)的 *= 和 =* 運(yùn)算符都是可行的。不能在同一語(yǔ)句中同時(shí)使用這兩種方法。LEFT OUTER: 指定在結(jié)果集中包含左表中所有不滿足聯(lián)接條件的行,且在由聯(lián)接返回所有的行之外,將另外一個(gè)表的輸出列設(shè)為 NULL。RIGHT OUTER: 指定在結(jié)果集中包含右表中所有不滿足聯(lián)接條件的行,且在由聯(lián)接返回的所有行之外,將與另外一個(gè)表對(duì)應(yīng)的輸出列設(shè)為 NULL。<join_hint>: 指定 SQL Server 查詢優(yōu)化

49、器為在查詢的 FROM 子句中指定的每個(gè)聯(lián)接使用一個(gè)聯(lián)接提示或執(zhí)行算法。有關(guān)更多信息,請(qǐng)參見(jiàn)本主題下面的"聯(lián)接提示"。JOIN: 指明所指定的聯(lián)接操作應(yīng)在給定的表或視圖之間執(zhí)行。ON <search_condition>: 指定聯(lián)接所基于的條件。盡管經(jīng)常使用列和比較運(yùn)算符,但此條件可指定任何謂詞,例如:SELECT ProductID, Suppliers.SupplierID FROM Suppliers JOIN Products ON (Suppliers.SupplierID = Products.SupplierID)當(dāng)條件指定列時(shí),列不一定必須具有一

50、樣的名稱或數(shù)據(jù)類型;但是,如果數(shù)據(jù)類型不一致,則這些列要么必須相互兼容,要么是 Microsoft® SQL Server 能夠隱性轉(zhuǎn)換的類型。如果數(shù)據(jù)類型不能隱式轉(zhuǎn)換,則條件必須使用 CAST 函數(shù)顯式轉(zhuǎn)換數(shù)據(jù)類型。 在 ON 子句中可能有僅涉及一個(gè)聯(lián)接表的謂詞。這樣的謂詞也可能出現(xiàn)在查詢中的 WHERE 子句中。盡管這種謂詞的放置在 INNER 聯(lián)接中不會(huì)產(chǎn)生差異,但是在涉及 OUTER 聯(lián)接時(shí)可能會(huì)導(dǎo)致不同的結(jié)果。這是因?yàn)?ON 子句中的謂詞在應(yīng)用于聯(lián)接之前先應(yīng)用于表,而 WHERE 子句在語(yǔ)意上應(yīng)用于聯(lián)接結(jié)果。CROSS JOIN: 指定兩個(gè)表的矢量積。這將返回一樣的行,就好

51、似在舊式的非 SQL-92 式聯(lián)接中并沒(méi)有指定 WHERE 子句。2. 簡(jiǎn)單的SELECT查詢:SELECT語(yǔ)句在任何SQL語(yǔ)言中都是使用頻率最高的語(yǔ)句,是SQL的靈魂。最簡(jiǎn)單的SELECT查詢語(yǔ)法如下: SELECT column_name , n FROM tablename使用TOP關(guān)鍵字例:分別從course中檢索出前2條及前面67%的教師的信息。SELECT top 2 * FROM courseSELECT top 67 PERCENT * FROM course使用DISTINCT關(guān)鍵字使用計(jì)算列例:將teacher表中各教師的、教工號(hào)及工資按95%發(fā)放的信息,第2條語(yǔ)句將工資按

52、95%發(fā)放后列名改為預(yù)發(fā)工資。select 教工號(hào),工資*0.95 from teacherselect 教工號(hào),工資*0.95 AS 預(yù)發(fā)工資 from teacher操作查詢的列名SELECTo 課程序號(hào),ame 課程名稱, credit+1 修正學(xué)分 FROM course使用WHERE子句例:查詢course表,返回修正后的學(xué)分后仍然大于4的課程的代號(hào)、名稱以及原先的學(xué)分。SELECTo AS 序號(hào),ame AS課程名稱,credit AS 學(xué)分 FROM course WHERE course+1>4使用LIKE子句進(jìn)展模糊查詢例:從teacher表中分別檢索出姓伍的教師的資料

53、,或者的第2個(gè)字是壽或立的教師的資料。SELECT * FROM teacher WHERE LIKE 伍%SELECT * FROM teacher WHERE LIKE _壽,立%使用ORDER BY給數(shù)據(jù)排序例:從course表中查詢學(xué)分大于3的課程信息,并按升序排列。SELECTo AS 序號(hào),ame AS 課程名 , credit AS 學(xué)分 FROM courseWHERE credit>3 ORDER BY credit ASC3. 多表查詢數(shù)據(jù)庫(kù)各表中存放著不同的數(shù)據(jù),用戶經(jīng)常需要用多個(gè)表中的數(shù)據(jù)來(lái)組合提煉出所需要的信息,如果一個(gè)查詢需要對(duì)多個(gè)表進(jìn)展操作,就稱為關(guān)聯(lián)查詢,

54、關(guān)聯(lián)查詢的結(jié)果集或結(jié)果表稱為表之間的連接。關(guān)聯(lián)查詢實(shí)際上是通過(guò)各各表之間共同列的關(guān)聯(lián)來(lái)查詢數(shù)據(jù)的,它是關(guān)系數(shù)據(jù)庫(kù)查詢最根本的特征。連接查詢:如果需要對(duì)多表中的數(shù)據(jù)進(jìn)展查詢,稱之為連接查詢。等值和非等值連接查詢例:查詢每個(gè)學(xué)生及其選修課情況。SELECT student.*,sc.* FROM student,sc WHERE student.sno=sc.sno外連接例:以student表為主體列出每個(gè)學(xué)生的根本情況及其選課情況,假設(shè)沒(méi)有選課,只輸出其根本情況。SELECT student.sno,sname,se*,sbirth,sdept,sc.o,gradeFROM student,sc

55、 WHERE student.sno*=sc.sno復(fù)合條件連接例:查詢選修2號(hào)課程且成績(jī)?cè)?0分以上的學(xué)生信息。SELECT student.sno,sname,grade FROM student,sc WHERE student.sno=sc.sno AND sc.grade>80例:查詢每個(gè)學(xué)生的*、選修的課程及成績(jī)。SELECT student.sno,sname,ame,grade FROM student,sc,courseWHERE student.sno=sc.sno AND sc.o=course.o嵌套查詢帶有IN謂詞的子查詢例:在student數(shù)據(jù)庫(kù)中,查詢所有計(jì)算機(jī)系學(xué)生的*、選修課程號(hào)以及分?jǐn)?shù)。SELECT sno,o,grade FROM sc WHERE sno IN(SELECT sno FROM student WHERE sdept=計(jì)算機(jī)系)在嵌套查詢中使用E*ISTS關(guān)鍵字例:在student數(shù)據(jù)庫(kù)中,查詢所有計(jì)算機(jī)系學(xué)生的*、選修課程號(hào)以及分?jǐn)?shù)SELECT sno,o,gr

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論