第4章T-SQL與可編程對(duì)象_第1頁
第4章T-SQL與可編程對(duì)象_第2頁
第4章T-SQL與可編程對(duì)象_第3頁
第4章T-SQL與可編程對(duì)象_第4頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第4章章 T-SQL與可編程對(duì)象與可編程對(duì)象4.1 T-SQL4.1 T-SQL4.2 4.2 視圖視圖4.3 4.3 存儲(chǔ)過程存儲(chǔ)過程4.4 4.4 觸發(fā)器觸發(fā)器4.4.1 T-SQL1 T-SQL4.4.1.1 T-SQL1.1 T-SQL概述概述 SQL:結(jié)構(gòu)化查詢語言(Structure Query Language) 關(guān)系型數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言:按照ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì))的規(guī)定,最初由IBM公司在七十年代中期開發(fā)成功。 T-SQL語言是微軟公司在SQL Server中對(duì)SQL擴(kuò)展。 1. T-SQL1. T-SQL語言的特點(diǎn)語言的特點(diǎn) 1 1)非過程化)非過程化 面向過程

2、的程序設(shè)計(jì)語言,必須一步一步地將解題的全過程描述出來,不僅要告訴計(jì)算機(jī)“做什么”,而且還要告訴計(jì)算機(jī)“怎么做”。 非過程化語言,不必描述解決問題的全過程,只需提出“做什么”,至于“如何做”的細(xì)節(jié)則由語言系統(tǒng)本身去完成并給出操作的結(jié)果。2 2)兩種不同的使用方式)兩種不同的使用方式 聯(lián)機(jī)交互方式: SQL語言既可獨(dú)立使用嵌入程序設(shè)計(jì)語言中:例如C#程序設(shè)計(jì)語言中。 不論使用何種方式,不論使用何種方式,T-SQLT-SQL語言的語法結(jié)構(gòu)基本相同。語言的語法結(jié)構(gòu)基本相同。 3) 3) 高度一體化高度一體化 集數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)操縱語言(DML)、數(shù)據(jù)控制語言(DCL)和T-SQL增加的語言

3、元素于一體,可獨(dú)立完成數(shù)據(jù)庫生命周期的所有活動(dòng)。 4) 4) 語言簡(jiǎn)潔、易學(xué)易用語言簡(jiǎn)潔、易學(xué)易用2. T-SQL2. T-SQL語言的組成元素語言的組成元素 數(shù)據(jù)定義語言數(shù)據(jù)定義語言DDL(DataDDL(Data Definition Language) Definition Language)定義數(shù)據(jù)庫結(jié)構(gòu)、各對(duì)象及屬性的語句例如:Creat DATABASE Student 數(shù)據(jù)庫操縱語言數(shù)據(jù)庫操縱語言DML(DataDML(Data Manipulation Language) Manipulation Language)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫基本操作的語句,主要包括查詢、插入、修改、刪除等

4、數(shù)據(jù)庫控制語言數(shù)據(jù)庫控制語言DCL(DataDCL(Data Control Language) Control Language)保證數(shù)據(jù)庫一致性和完整性 T-SQLT-SQL增加的語言元素增加的語言元素 變量、運(yùn)算符、函數(shù)、流程控制語句和注解等。 3. T-SQL3. T-SQL書寫規(guī)則書寫規(guī)則在T-SQL語句中,不區(qū)分字母大小寫。為閱讀方便,約定:(1) 用大寫字母書寫T-SQL語句中關(guān)鍵字;(2) 用小寫字母書寫語句中的標(biāo)識(shí)符、表達(dá)式以及各種參數(shù)。4. 4. 注釋注釋(2)單行注釋 (3)多行注釋 /*/4.4.1.2 1.2 數(shù)據(jù)定義語言數(shù)據(jù)定義語言DDLDDL 1. 數(shù)據(jù)定義語言用

5、于定義數(shù)據(jù)庫中的對(duì)象,包括數(shù)據(jù)庫、表、視圖、索引、存儲(chǔ)過程、觸發(fā)器等的建立或修改。 操作對(duì)象操作對(duì)象操作方式操作方式創(chuàng)建創(chuàng)建刪除刪除修改修改使用使用數(shù)據(jù)庫數(shù)據(jù)庫CREATE CREATE DATABASEDATABASEDROP DROP DATABASEDATABASEALTER ALTER DATABASEDATABASEUSE USE 基本表基本表CREATE TABLECREATE TABLEDROP TABLEDROP TABLEALTER TABLEALTER TABLE視圖視圖 CREATE VIEWCREATE VIEWDROP VIEWDROP VIEWALTER VIEWA

6、LTER VIEW索引索引CREATE INDEXCREATE INDEXDROP INDEXDROP INDEX存儲(chǔ)過程存儲(chǔ)過程CREATE CREATE PROCEDUREPROCEDUREDROP DROP PROCEDUREPROCEDUREALTER ALTER PROCEDUREPROCEDURE觸發(fā)器觸發(fā)器CREATE TRIGGERCREATE TRIGGERDROP TRIGGERDROP TRIGGERALTER TRIGGERALTER TRIGGER表表4-1 SQL4-1 SQL數(shù)據(jù)定義語言數(shù)據(jù)定義語言DDLDDL4.4.1.2 1.2 數(shù)據(jù)定義語言數(shù)據(jù)定義語言DDL

7、DDL2. 2. 使用使用SSMSSSMS生成生成SQLSQL腳本腳本(1)(1) 右擊要生成腳本的數(shù)據(jù)庫對(duì)象,在右鍵菜單右擊要生成腳本的數(shù)據(jù)庫對(duì)象,在右鍵菜單中選擇中選擇“編寫編寫腳本腳本”-“Create-“Create到到”- -“新查詢編輯窗口新查詢編輯窗口”(2)(2) 在在“查詢編輯查詢編輯”窗口中可查看、復(fù)制、保存窗口中可查看、復(fù)制、保存腳本腳本(3)(3) 使用使用“文件文件”-“-“打開打開”可打開腳本文件可打開腳本文件1)創(chuàng)建一個(gè)數(shù)據(jù)庫SchoolTest ;2)數(shù)據(jù)庫主數(shù)據(jù)文件SchoolTest,物理文件為“D:SchoolTest.mdf”, 大小為3MB;3)系統(tǒng)將

8、自動(dòng)在“D:”中創(chuàng)建大小為1MB、名為“SchoolTest_log.LDF”的日志文件。【例【例4-14-1】創(chuàng)建一個(gè)只有一個(gè)主數(shù)據(jù)文件創(chuàng)建一個(gè)只有一個(gè)主數(shù)據(jù)文件 SchoolTestSchoolTest的的數(shù)據(jù)庫數(shù)據(jù)庫(不指定該文件的大?。┎恢付ㄔ撐募拇笮。?。CREATE DATABASE SchoolTestON (NAME=SchoolTest,FILENAME=D:SchoolTest.MDF) 3 3常用常用DDLDDL語句語句 (1) (1) 創(chuàng)建數(shù)據(jù)庫語句(創(chuàng)建數(shù)據(jù)庫語句(CREATE DATABASECREATE DATABASE) 4.4.1.2 1.2 數(shù)據(jù)定義語言數(shù)

9、據(jù)定義語言DDLDDL(2 2)打開和刪除數(shù)據(jù)庫語句)打開和刪除數(shù)據(jù)庫語句 USE USE 數(shù)據(jù)庫名數(shù)據(jù)庫名 / /* *選擇當(dāng)前要操作的數(shù)據(jù)庫選擇當(dāng)前要操作的數(shù)據(jù)庫 * */ / USE USE SchoolTestSchoolTestDROP DATABASE DROP DATABASE 數(shù)據(jù)庫名數(shù)據(jù)庫名/ /* *刪除數(shù)據(jù)庫刪除數(shù)據(jù)庫 * */ / USE SchoolUSE School- - 當(dāng)前數(shù)據(jù)庫必須更改!當(dāng)前數(shù)據(jù)庫必須更改!DROP DATABASE DROP DATABASE SchoolTest4.4.1.2 1.2 數(shù)據(jù)定義語言數(shù)據(jù)定義語言DDLDDL(3 3)建立表語

10、句()建立表語句(CREATE TABLECREATE TABLE) 【例【例4-4-2 2】建立學(xué)生表建立學(xué)生表T_StudentTestT_StudentTest。CREATE TABLECREATE TABLE T_StudentTestT_StudentTest ( ( StudentCodeStudentCode CHAR(8) NOT NULL UNIQUE, CHAR(8) NOT NULL UNIQUE, StudentNameStudentName VARCHAR(16) NOT NULL, VARCHAR(16) NOT NULL, Sex CHAR(2) NOT NULL

11、, Sex CHAR(2) NOT NULL, LiveInDormLiveInDorm BIT DEFAULT 1, BIT DEFAULT 1, Constraint Constraint StudentPKStudentPK Primary Primary Key(StudentCodeKey(StudentCode) ) ) )在School數(shù)據(jù)庫中創(chuàng)建一個(gè)新的空表T_StudentTest。在字段的定義中確定StudentCode、StudentName、Sex不可取空值,LiveInDorm的默認(rèn)值為1,并將StudentCode設(shè)定為主鍵約束。4.4.1.2 1.2 數(shù)據(jù)定義語言

12、數(shù)據(jù)定義語言DDLDDL(4 4)刪除表語句()刪除表語句(DROP TABLEDROP TABLE)【例【例4-34-3】刪除刪除T_StudentTestT_StudentTest表表 DROP TABLEDROP TABLE T_StudentTest注意注意:刪除數(shù)據(jù)表要十分謹(jǐn)慎,因?yàn)楫?dāng)數(shù)據(jù)表被刪除時(shí),里面的數(shù)據(jù)也被全部刪除。4.4.1.2 1.2 數(shù)據(jù)定義語言數(shù)據(jù)定義語言DDLDDL(5 5)建立索引語句)建立索引語句( (CREATE INDEX)CREATE INDEX) CREATE INDEX CREATE INDEX 索引名索引名 ON ON 數(shù)據(jù)表名數(shù)據(jù)表名( (字段字段

13、 ASC|DESC)ASC|DESC)【例【例4-44-4】在在StudentStudent表的姓名(表的姓名(StudentNameStudentName)字段上建字段上建立升序索引。立升序索引。CREATE INDEXCREATE INDEX NameIndexNameIndex onon Student(StudentNameStudent(StudentName) ) (6 6)刪除索引語句)刪除索引語句( (DROP INDEX)DROP INDEX) 4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML 數(shù)據(jù)操縱語言實(shí)現(xiàn)對(duì)數(shù)據(jù)的查詢和更新,主要語句數(shù)據(jù)操縱語言實(shí)現(xiàn)對(duì)數(shù)據(jù)的查

14、詢和更新,主要語句及功能如下:及功能如下: 表表4-2 SQL4-2 SQL數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML命令功能SELECT從一個(gè)表或多個(gè)表查詢數(shù)據(jù)INSERT向一個(gè)表中添加一條記錄UPDATE修改表中某一個(gè)或幾個(gè)字段的值DELETE從一個(gè)表中刪除記錄 查詢數(shù)據(jù)庫表中的數(shù)據(jù)并返回符合用戶查詢條件的結(jié)果數(shù)據(jù)。數(shù)據(jù)查詢語句是SQL語言的核心。 Select語句由多個(gè)子句構(gòu)成,其語法形式為:SELECT SELECT 字段表字段表FROM FROM 表名表名WHERE WHERE 查詢條件查詢條件 GROUP BY GROUP BY 分組字段分組字段 HAVING HAVING 分組條件分組

15、條件ORDER BY ORDER BY 字段名字段名 ASC/DESCASC/DESC 表示可選項(xiàng)。 在書寫SELECT語句時(shí),字母大小寫意義完全相同。 語句可以寫在若干行上(如上述語法格式中的描述),也可以不換行。1 1查詢語句查詢語句SELECTSELECT 4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML(1)(1)字段表字段表 字段表位于關(guān)鍵字SELECT后面,這些字段將作為查詢的結(jié)果被顯示。使用字段表規(guī)則: 1) 1) 字段與字段之間用逗號(hào)分隔。字段與字段之間用逗號(hào)分隔。 【例【例4-54-5】使用使用SELECTSELECT語句查詢語句查詢StudentStudent表

16、中的學(xué)生姓名表中的學(xué)生姓名(StudentNameStudentName)和性別()和性別(SexSex)。)。 SELECT SELECT StudentNameStudentName, Sex , Sex FROM Student FROM Student 2) 2) 可以使用通配符可以使用通配符“ “ * * ” ”表示表中的所有字段。表示表中的所有字段。 【例【例4-64-6】 使用使用SELECTSELECT語句查詢語句查詢 StudentStudent表中所有字段表中所有字段的值。的值。 SELECT SELECT * * FROM Student FROM Student 4.4

17、.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML3) 如果字段名或表名中含有空格,則該字段名或表名必須用方括號(hào)括起。 4) 在字段表中,可以使用以下方式將原字段名以新的字段名顯示。 字段名字段名 AS AS 新字段名新字段名 【例【例4-74-7】 顯示顯示ClassInfoClassInfo表中班級(jí)代號(hào),并將表中班級(jí)代號(hào),并將ClassCodeClassCode字段改為字段改為Class NumberClass Number。 SELECT SELECT ClassCodeClassCode AS Class Number AS Class Number FROM FROM Class

18、InfoClassInfo 注意注意:字段別名Class Number含有空格,所以用方括號(hào)括起來 4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML(1 1)字段表)字段表5) 5) 在字段名前可加上一些范圍限制,以便進(jìn)一步優(yōu)化查詢?cè)谧侄蚊翱杉由弦恍┓秶拗疲员氵M(jìn)一步優(yōu)化查詢結(jié)果。常用的范圍關(guān)鍵字有:結(jié)果。常用的范圍關(guān)鍵字有: TOP n TOP n :顯示前:顯示前n n條記錄條記錄。 TOP m PERCENTTOP m PERCENT :顯示前:顯示前m%m%的記錄的記錄?!纠纠?-8】查詢查詢Course表中的前表中的前3條記錄。條記錄。 SELECT TOP 3 S

19、ELECT TOP 3 * * FROM Course FROM Course 【例【例4-9】查詢查詢Course表中前表中前30%的記錄。的記錄。 SELECT TOP 30 PERCENT SELECT TOP 30 PERCENT * * FROM Course FROM Course 4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML(1 1)字段表)字段表 DISTINCTDISTINCT:若多條記錄的字段值具有相同數(shù)據(jù),只顯若多條記錄的字段值具有相同數(shù)據(jù),只顯示一條記錄。示一條記錄。 【例【例4 4-10-10】查詢查詢CourseCourse表中開課的學(xué)院代碼表中開課

20、的學(xué)院代碼AcademyCodeAcademyCode(與所開課程無關(guān))。與所開課程無關(guān))。 SELECT DISTINCT SELECT DISTINCT AcademyCodeAcademyCode FROM Course FROM Course 4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML(1 1)字段表)字段表6) 6) 為了增強(qiáng)查詢功能,在為了增強(qiáng)查詢功能,在SELECTSELECT語句中還可以使用內(nèi)語句中還可以使用內(nèi)部聚合函數(shù),它們被用來進(jìn)行一些簡(jiǎn)單的統(tǒng)計(jì)或計(jì)算。部聚合函數(shù),它們被用來進(jìn)行一些簡(jiǎn)單的統(tǒng)計(jì)或計(jì)算。常用統(tǒng)計(jì)函數(shù)如下表所示。常用統(tǒng)計(jì)函數(shù)如下表所示。表4-1

21、3 常用聚合函數(shù)函數(shù)名函數(shù)功能AVG( ALL | DISTINCT expression )計(jì)算某一字段的平均值(此字段的值必須是數(shù)值型)COUNT( ALL | DISTINCT expression )統(tǒng)計(jì)某一字段的個(gè)數(shù)MAX( ALL | DISTINCT expression )查找某一字段的最大值MIN( ALL | DISTINCT expression )查找某一字段的最小值SUM( ALL | DISTINCT expression )計(jì)算某一字段的總和(此字段的值必須是數(shù)值型)表表4-3 4-3 常用聚合函數(shù)常用聚合函數(shù)4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DML

22、DML(1 1)字段表)字段表【例【例4-11】計(jì)算學(xué)生的總分、平均分、最高分、最低分及計(jì)算學(xué)生的總分、平均分、最高分、最低分及學(xué)生選課數(shù)。學(xué)生選課數(shù)。 SELECT Sum (Grade) as SELECT Sum (Grade) as 總分總分, , AvgAvg (Grade) as (Grade) as 平均分平均分, , Max (Grade) as Max (Grade) as 最高分最高分, , Min (Grade) as Min (Grade) as 最低分最低分, , Count (Count (StudentCodeStudentCode) as ) as 課程人數(shù)課程

23、人數(shù) FROM Grade FROM Grade 表4-13 常用聚合函數(shù)4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML(1 1)字段表)字段表4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML(1 1)字段表)字段表7 7)使用)使用SELECTSELECT語句復(fù)制新表。在字段名后加上語句復(fù)制新表。在字段名后加上INTO INTO 表表名可將查詢結(jié)果復(fù)制到一張新表中。名可將查詢結(jié)果復(fù)制到一張新表中。 【例【例】將將StudentStudent表中所有記錄的學(xué)生姓名表中所有記錄的學(xué)生姓名、出生日期兩出生日期兩個(gè)字段復(fù)制一張新表個(gè)字段復(fù)制一張新表NewTableNewTa

24、ble。 SELECT SELECT StudentNameStudentName, , BirthDayBirthDay INTO INTO NewTableNewTable FROM Student FROM Student 運(yùn)行后,產(chǎn)生一張表名為NewTable的新表。4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML(1 1)字段表)字段表(2) FROM(2) FROM子句子句 FROM FROM 表名表名1 1 ,表名,表名2 2,表名,表名n n 1) 1) 在在FROMFROM子句中,表的先后次序可以任意排列。子句中,表的先后次序可以任意排列。2) 2) FROMFR

25、OM子句中若包含多個(gè)表名,且不同的表中具有相同的子句中若包含多個(gè)表名,且不同的表中具有相同的字段,那么字段,那么SELECTSELECT子句的字段名必須表示成子句的字段名必須表示成 “ “ .” ” ?!纠?-124-12】查詢查詢StudentStudent表和表和GradeGrade表,報(bào)告表,報(bào)告StudentCodeStudentCode、 StudentNameStudentName、 CourseCodeCourseCode和和GradeGrade。SELECT SELECT StudentCodeStudentCode, , StudentNameStudentName, ,

26、CourseCodeCourseCode, Grade , Grade FROM Student, GradeFROM Student, Grade 正確語句:正確語句: SELECT SELECT Student.StudentCodeStudent.StudentCode, , StudentNameStudentName, , CourseCodeCourseCode, Grade , Grade FROM Student, Grade FROM Student, Grade 4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML (3) WHERE(3) WHERE子句子句 設(shè)置

27、查詢的條件,它是一個(gè)可選的子句。在使用時(shí),設(shè)置查詢的條件,它是一個(gè)可選的子句。在使用時(shí),WHEREWHERE子句必須在子句必須在FROMFROM子句的后面。子句的后面。 WHEREWHERE子句的語法格式:子句的語法格式: WHERE WHERE 查詢條件查詢條件 查詢條件是一個(gè)邏輯表達(dá)式。常用的運(yùn)算符有:查詢條件是一個(gè)邏輯表達(dá)式。常用的運(yùn)算符有: 表4-14 T-SQL中常用的關(guān)系和邏輯運(yùn)算查詢條件謂詞比較、=、=、=(等于)、(不等于)確定范圍BETWEEN AND、NOT BETWEEN AND確定集合IN、NOT IN字符匹配LIKE、NOT LIKE空值IS NULL、IS NOT

28、NULL否定NOT邏輯運(yùn)算AND、OR【例例4-144-14】查詢未住校的女學(xué)生的情況。查詢未住校的女學(xué)生的情況。 SELECT StudentCode, StudentName, Sex, LiveInDormFROM StudentWHERE Sex=女 and LiveInDorm=01) 比較和邏輯運(yùn)算比較和邏輯運(yùn)算 比較運(yùn)算用于比較兩個(gè)表達(dá)式的值;邏輯運(yùn)算用來比較運(yùn)算用于比較兩個(gè)表達(dá)式的值;邏輯運(yùn)算用來連接多個(gè)查詢條件。連接多個(gè)查詢條件?!纠?-134-13】在在StudentStudent表中查詢所有女同學(xué)的姓名。表中查詢所有女同學(xué)的姓名。SELECT StudentCode,

29、StudentName, Sex, LiveInDormFROM StudentWHERE Sex=女4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML2)2)確定范圍確定范圍BETWEEN ANDBETWEEN AND BETWEEN BETWEEN 值值1 AND 1 AND 值值2:2:查詢值在值查詢值在值1 1至值至值2 2之間的記錄之間的記錄 NOT BETWEEN NOT BETWEEN 值值1 AND 1 AND 值值2:2:查詢不在指定范圍中的記錄查詢不在指定范圍中的記錄【例例4-154-15】在在GradeGrade表中查詢課程代號(hào)(表中查詢課程代號(hào)(CourseC

30、odeCourseCode)為)為“110001”110001”、成績(jī)(、成績(jī)(GradeGrade)在)在7070分到分到9090分之間的學(xué)生分之間的學(xué)生代號(hào)(代號(hào)(StudentCodeStudentCode)及成績(jī)。)及成績(jī)。SELECT SELECT StudentCodeStudentCode, , CourseCodeCourseCode, Grade , Grade FROM GradeFROM GradeWHERE WHERE CourseCodeCourseCode=110001 =110001 AND Grade BETWEEN 70 AND 90AND Grade BET

31、WEEN 70 AND 90 此例的此例的WHEREWHERE子句也可改為:子句也可改為:WHERE WHERE CourseCodeCourseCode=110001 =110001 AND Grade= 70 AND Grade= 70 AND Grade=90【例例4-164-16】查詢查詢StudentStudent表中不在表中不在19861986年到年到19951995年中出生年中出生的學(xué)生學(xué)號(hào)和姓名。的學(xué)生學(xué)號(hào)和姓名。SELECT SELECT StudentCodeStudentCode, , StudentNameStudentName, Birthday , Birthday

32、 FROM StudentFROM StudentWHERE Birthday NOT BETWEEN 1986-01-01 AND WHERE Birthday NOT BETWEEN 1986-01-01 AND 1995-12-121995-12-124.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML3)3)確定集合確定集合ININ運(yùn)算運(yùn)算使用使用ININ運(yùn)算可查詢某些字段值是否包含在所列出的指定值運(yùn)算可查詢某些字段值是否包含在所列出的指定值的記錄的記錄. .【例例4-174-17】查詢查詢StudentStudent表中班號(hào)(表中班號(hào)(ClassCodeClassCode)為

33、)為“153030301”153030301”、“153030302”153030302” 的學(xué)生。的學(xué)生。SELECT SELECT StudentCodeStudentCode, , StudentNameStudentName, Sex, , Sex, ClassCodeClassCodeFROM StudentFROM StudentWHERE WHERE ClasscodeClasscode IN ( IN (153030301153030301,153030302153030302)此例的此例的WHEREWHERE子句也可以改為:子句也可以改為:WHERE WHERE ClassC

34、odeClassCode=153030301153030301 OR OR ClassCodeClassCode=153030302153030302 4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML4)4)字符匹配字符匹配LIKE LIKE 指定字段的值是否包含在給定的字符串中,其結(jié)果是滿指定字段的值是否包含在給定的字符串中,其結(jié)果是滿足字符串匹配的數(shù)據(jù)記錄。足字符串匹配的數(shù)據(jù)記錄。 通配符通配符“_”_”表示任意單個(gè)字符;表示任意單個(gè)字符;“%”%”表示包含零個(gè)或表示包含零個(gè)或更多字符的任意字符串。更多字符的任意字符串?!纠?-184-18】查詢查詢CourseCourse表

35、中課程名稱(表中課程名稱(CourseNameCourseName)中包)中包含含“化學(xué)化學(xué)”兩個(gè)字的課程代號(hào)(兩個(gè)字的課程代號(hào)(CourseCodeCourseCode)及課程)及課程名稱。名稱。SELECT SELECT CourseCode,CourseNameCourseCode,CourseName FROM CourseFROM CourseWHERE WHERE CourseNameCourseName LIKE % LIKE %化學(xué)化學(xué)%4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML5)5)聯(lián)接查詢聯(lián)接查詢 查詢操作中涉及多表的查詢也稱為聯(lián)接查詢。查詢操作中涉及多

36、表的查詢也稱為聯(lián)接查詢??梢杂脙煞N方法實(shí)現(xiàn)可以用兩種方法實(shí)現(xiàn): :在在WHEREWHERE子句中設(shè)置查詢條件子句中設(shè)置查詢條件。 【例【例4-194-19】查詢未住校學(xué)生的選課及成績(jī)情況查詢未住校學(xué)生的選課及成績(jī)情況 SELECT SELECT StudentNameStudentName, , CourseCodeCourseCode, Grade, , Grade, LiveinDormLiveinDormFROM Grade, StudentFROM Grade, StudentWHERE WHERE LiveInDormLiveInDorm=0 AND =0 AND Grade.Stu

37、dentCodeGrade.StudentCode= =Student.StudentCodeStudent.StudentCode4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML5)5)聯(lián)接查詢聯(lián)接查詢?cè)谠贔ROMFROM子句中使用子句中使用聯(lián)接關(guān)鍵字聯(lián)接關(guān)鍵字將表與表聯(lián)接在一起。將表與表聯(lián)接在一起。 T-SQLT-SQL查詢嵌套在語言中使用時(shí),多采用該方法查詢嵌套在語言中使用時(shí),多采用該方法 。語。語法格式:法格式: FROM FROM 表表1 1 聯(lián)接關(guān)鍵字聯(lián)接關(guān)鍵字 表表2 2 ON ON 表表1.1.字段名字段名1 1 表表2.2.字段名字段名2 2 其中:其中: 表表1

38、 1、表、表2 2是被聯(lián)接的表名;是被聯(lián)接的表名; 字段名是被聯(lián)接的字段。必須有相同的數(shù)據(jù)類型并包字段名是被聯(lián)接的字段。必須有相同的數(shù)據(jù)類型并包含同類數(shù)據(jù),但不需要有相同的名稱。含同類數(shù)據(jù),但不需要有相同的名稱。 比較運(yùn)算符:比較運(yùn)算符:= =、 、=、 聯(lián)接關(guān)鍵字用于確定聯(lián)接的方式,常用的有聯(lián)接關(guān)鍵字用于確定聯(lián)接的方式,常用的有INNER INNER JOIN JOIN (內(nèi)聯(lián)接)、(內(nèi)聯(lián)接)、LEFT OUTER JOINLEFT OUTER JOIN(左外聯(lián)接)、(左外聯(lián)接)、RIGHT OUTER JOINRIGHT OUTER JOIN(右外聯(lián)接)、(右外聯(lián)接)、CROSS JOIN

39、CROSS JOIN(交(交叉聯(lián)接);叉聯(lián)接);4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML INNER JOININNER JOININNER JOININNER JOIN:查詢結(jié)果僅包含兩個(gè)表中:查詢結(jié)果僅包含兩個(gè)表中每對(duì)聯(lián)結(jié)匹配的行。內(nèi)連接是系統(tǒng)默認(rèn)的,可以將關(guān)鍵每對(duì)聯(lián)結(jié)匹配的行。內(nèi)連接是系統(tǒng)默認(rèn)的,可以將關(guān)鍵字字INNERINNER省略。省略?!纠?-204-20】使用內(nèi)聯(lián)接查詢未住校學(xué)生的選課及成績(jī)情況。使用內(nèi)聯(lián)接查詢未住校學(xué)生的選課及成績(jī)情況。SELECT SELECT StudentNameStudentName, , CourseCodeCourseCode,

40、 Grade, , Grade, LiveinDormLiveinDormFROM Student FROM Student INNER JOININNER JOIN Grade Grade ONON Student.StudentCodeStudent.StudentCode = = Grade.StudentCodeGrade.StudentCode WHERE WHERE LiveInDormLiveInDorm=0=0本句的查詢結(jié)果與本句的查詢結(jié)果與【例例4-194-19】結(jié)果完全相同。結(jié)果完全相同。4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDMLLEFT OUTER JO

41、INLEFT OUTER JOIN左外聯(lián)接,查詢結(jié)果除了包含兩左外聯(lián)接,查詢結(jié)果除了包含兩張表中符合連接條件的記錄外,還包含左表(寫在關(guān)鍵字張表中符合連接條件的記錄外,還包含左表(寫在關(guān)鍵字LEFT OUTER JOINLEFT OUTER JOIN左邊的表)中不符合聯(lián)接條件、但符合左邊的表)中不符合聯(lián)接條件、但符合WHEREWHERE條件的全部記錄。條件的全部記錄。 【例【例4-214-21】使用左外聯(lián)接查詢未住校學(xué)生的選課及成績(jī)情況。使用左外聯(lián)接查詢未住校學(xué)生的選課及成績(jī)情況。SELECT SELECT StudentNameStudentName, , CourseCodeCourseC

42、ode, Grade, , Grade, LiveInDormLiveInDormFROM Student FROM Student LEFT OUTER JOINLEFT OUTER JOIN Grade Grade ONON Student.StudentCodeStudent.StudentCode = = Grade.StudentCodeGrade.StudentCodeWHERE WHERE LiveInDormLiveInDorm=0=0本句的查詢結(jié)果中有些記錄的本句的查詢結(jié)果中有些記錄的CourseCodeCourseCode和和GradeGrade字段的值字段的值為為NULL

43、NULL,也就是說這些記錄是不符合聯(lián)接條件的(即在,也就是說這些記錄是不符合聯(lián)接條件的(即在GradeGrade中沒有找到有相同中沒有找到有相同StudentCodeStudentCode的記錄),但由于使的記錄),但由于使用了左外聯(lián)接的查詢方法,所以左表(用了左外聯(lián)接的查詢方法,所以左表(StudentStudent)中的符合)中的符合WHEREWHERE子句條件的全部記錄顯示在查詢結(jié)果中。子句條件的全部記錄顯示在查詢結(jié)果中。 4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML RIGHT OUTER JOINRIGHT OUTER JOIN右外聯(lián)接,查詢結(jié)果除了包含右外聯(lián)接,查詢

44、結(jié)果除了包含兩張表中符合聯(lián)接條件的記錄,還包含右表(寫在關(guān)鍵兩張表中符合聯(lián)接條件的記錄,還包含右表(寫在關(guān)鍵字字RIGHTT OUTER JOINRIGHTT OUTER JOIN右邊的表)中不符合聯(lián)接條件、右邊的表)中不符合聯(lián)接條件、但符合但符合WHEREWHERE條件的全部記錄。條件的全部記錄。 【例【例4-224-22】使用右外聯(lián)接查詢未住校學(xué)生的選課及成績(jī)情使用右外聯(lián)接查詢未住校學(xué)生的選課及成績(jī)情況。況。SELECT SELECT StudentNameStudentName, , CourseCodeCourseCode, Grade, , Grade, LiveInDormLive

45、InDormFROM Student FROM Student RIGHT OUTER JOINRIGHT OUTER JOIN Grade Grade ONON Student.StudentCodeStudent.StudentCode = = Grade.StudentCodeGrade.StudentCodeWHERE WHERE LiveInDormLiveInDorm=0=0本句的查詢結(jié)果與使用內(nèi)聯(lián)接完全相同,但含義不同。結(jié)果本句的查詢結(jié)果與使用內(nèi)聯(lián)接完全相同,但含義不同。結(jié)果相同是由于在表設(shè)計(jì)時(shí),在表相同是由于在表設(shè)計(jì)時(shí),在表StudentStudent和和GradeGrade之

46、間通過外鍵之間通過外鍵建立了參照完整性約束,表建立了參照完整性約束,表GradeGrade中的所有中的所有StudentCodeStudentCode必須必須是是StudentStudent中出現(xiàn)的值。中出現(xiàn)的值。4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML【例【例4-234-23】查詢化工學(xué)院開設(shè)的課程的選修學(xué)生和考試成查詢化工學(xué)院開設(shè)的課程的選修學(xué)生和考試成績(jī)。績(jī)。SELECT Course.CourseCode, Course.CourseName, SELECT Course.CourseCode, Course.CourseName, StudentCode, Aca

47、demyName, GradeStudentCode, AcademyName, GradeFROM Grade RIGHT JOIN Course FROM Grade RIGHT JOIN Course ON Grade.CourseCode = Course.CourseCodeON Grade.CourseCode = Course.CourseCodeJOIN Academy ON JOIN Academy ON Course.AcademyCode=Academy.AcademyCodeCourse.AcademyCode=Academy.AcademyCodeWHERE Acad

48、emyName=WHERE AcademyName=化工學(xué)院化工學(xué)院 4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML CROSS JOINCROSS JOIN(交叉聯(lián)接):查詢結(jié)果是將兩個(gè)表進(jìn)行拼接,(交叉聯(lián)接):查詢結(jié)果是將兩個(gè)表進(jìn)行拼接,即第一個(gè)表的每行與第二個(gè)表的每一行進(jìn)行拼接,查詢結(jié)即第一個(gè)表的每行與第二個(gè)表的每一行進(jìn)行拼接,查詢結(jié)果的行數(shù)等于兩個(gè)表行數(shù)之積。果的行數(shù)等于兩個(gè)表行數(shù)之積?!纠?-244-24】使用交叉聯(lián)接列出所有學(xué)生需選的所有課程情況。使用交叉聯(lián)接列出所有學(xué)生需選的所有課程情況。 SELECT SELECT StudentNameStudentName,

49、 , CourseCodeCourseCode FROM Student CROSS JOIN Course FROM Student CROSS JOIN Course 多表聯(lián)接嵌套:在多表查詢時(shí),所涉及的數(shù)據(jù)表在多表聯(lián)接嵌套:在多表查詢時(shí),所涉及的數(shù)據(jù)表在3 3張以張以上,形成聯(lián)接嵌套。嵌套的格式如下:上,形成聯(lián)接嵌套。嵌套的格式如下: FROM FROM 表表1 1 JOIN JOIN 表表2 ON 2 ON 表表1.1.字段字段1 1 表表2.2.字段字段1 1 JOIN JOIN 表表3 ON 3 ON 表表2.2.字段字段2 2 表表3.3.字段字段2 2 JOIN JOIN 表表

50、n ON n ON 表表n-1.n-1.字段字段n n 表表n.n.字段字段nn4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML【例例4-254-25】查詢班號(hào)是查詢班號(hào)是“051011”051011”的學(xué)生姓名、所選課的學(xué)生姓名、所選課程名稱和成績(jī)。程名稱和成績(jī)。使用使用WHEREWHERE子句設(shè)置查詢條件:子句設(shè)置查詢條件:SELECT SELECT StudentNameStudentName, , CourseNameCourseName, Grade , Grade FROM Student, FROM Student, Course,GradeCourse,Grade

51、WHERE WHERE Course.CourseCodeCourse.CourseCode = = Grade.CourseCodeGrade.CourseCode AND AND Student.StudentCodeStudent.StudentCode = = Grade.StudentCodeGrade.StudentCode AND AND ClassCode=ClassCode=153030301153030301 使用聯(lián)接關(guān)鍵字的語句:使用聯(lián)接關(guān)鍵字的語句: SELECT SELECT StudentNameStudentName, , CourseNameCourseName

52、, Grade, GradeFROM StudentFROM Student JOIN JOIN Grade Grade ONON Student.StudentCode = Grade.StudentCode Student.StudentCode = Grade.StudentCode JOINJOIN Course Course ON ON Grade.CourseCode = Grade.CourseCode = Course.CourseCodeCourse.CourseCodeWHERE WHERE ClassCodeClassCode=153030301=1530303014.4

53、.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML(3) GROUP BY(3) GROUP BY子句子句 將指定字段中具有相同值的記錄合并成一條記錄。將指定字段中具有相同值的記錄合并成一條記錄。語法格式:語法格式: GROUP BY GROUP BY 分組字段分組字段 HAVING HAVING 分組條件分組條件 HAVING HAVING子句與子句與WHEREWHERE子句的作用類似:在使用子句的作用類似:在使用GROUP BYGROUP BY完成分組后,顯示滿足完成分組后,顯示滿足HAVINGHAVING子句中分組條件的所有記錄。子句中分組條件的所有記錄。 【例例4-264-26】按

54、住校與否統(tǒng)計(jì)學(xué)生的平均成績(jī)。按住校與否統(tǒng)計(jì)學(xué)生的平均成績(jī)。SELECT SELECT LiveInDormLiveInDorm, STR(AVG(Grade),5,2) AS , STR(AVG(Grade),5,2) AS 平均成績(jī)平均成績(jī)FROM Student JOIN GradeFROM Student JOIN GradeON ON Student.StudentCodeStudent.StudentCode= =Grade.StudentCodeGrade.StudentCodeGROUP BY GROUP BY LiveInDormLiveInDorm4.4.1.3 1.3 數(shù)據(jù)

55、操縱語言數(shù)據(jù)操縱語言DMLDML【例例4-274-27】統(tǒng)計(jì)課程代號(hào)(統(tǒng)計(jì)課程代號(hào)(CourseCodeCourseCode)大于)大于“110006”110006”的各門課程的選課人數(shù)。的各門課程的選課人數(shù)。SELECT SELECT CourseCodeCourseCode, Count (, Count (StudentCodeStudentCode) AS ) AS 選課人數(shù)選課人數(shù)FROM GradeFROM GradeGROUP BY GROUP BY CourseCodeCourseCodeHAVING HAVING CourseCodeCourseCode 110006 110

56、006( (4) ORDER BY4) ORDER BY子句子句 按指定字段為查詢結(jié)果排序。通常是按指定字段為查詢結(jié)果排序。通常是 SQL SQL 語句語句最后一項(xiàng)。最后一項(xiàng)。 語法格式為:語法格式為: ORDER BY ORDER BY 字段名字段名 ASC/DESCASC/DESC 字段名是排序的依據(jù),也可以是含有字段名的表達(dá)式。字段名是排序的依據(jù),也可以是含有字段名的表達(dá)式。 ASCASC為升序排序?yàn)樯蚺判?Ascending)(Ascending),DESCDESC為降序?yàn)榻敌?Descending)(Descending)缺省排列次序?yàn)樯?。缺省排列次序?yàn)樯颉?.4.1.3 1.

57、3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML【例例4-284-28】按成績(jī)(按成績(jī)(GradeGrade)升序顯示)升序顯示GradeGrade表中的所有表中的所有數(shù)據(jù)。數(shù)據(jù)。 SELECT SELECT * * FROM Grade FROM Grade ORDER BY Grade ORDER BY Grade 可以指定多個(gè)排序的字段。多字段排序的規(guī)則是:首可以指定多個(gè)排序的字段。多字段排序的規(guī)則是:首先用指定的第一個(gè)字段對(duì)記錄排序,然后對(duì)此字段中先用指定的第一個(gè)字段對(duì)記錄排序,然后對(duì)此字段中具有相同值的記錄用指定的第二個(gè)字段進(jìn)行排序,依具有相同值的記錄用指定的第二個(gè)字段進(jìn)行排序,依此類推。此

58、類推。 若無若無ORDER BYORDER BY子句,則按原數(shù)據(jù)表的次序顯示數(shù)據(jù)。子句,則按原數(shù)據(jù)表的次序顯示數(shù)據(jù)?!纠?-294-29】按姓名(按姓名(StudentNameStudentName)升序)升序 班名班名(ClassNameClassName)降序查詢學(xué)生及其班級(jí)信息。)降序查詢學(xué)生及其班級(jí)信息。SELECT SELECT StudentCodeStudentCode, , StudentNameStudentName, , ClassNameClassName, Birthday, BirthdayFROM Student JOIN FROM Student JOIN Cl

59、assInfoClassInfoON Student.ClassCode=ClassInfo.ClassCodeON Student.ClassCode=ClassInfo.ClassCodeORDER BY ORDER BY StudentnameStudentname ASC, ASC, ClassNameClassName DESC DESC4.4.1.3 1.3 數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言DMLDML( (5) 5) 子查詢子查詢 當(dāng)一個(gè)查詢是另一個(gè)查詢的條件時(shí),稱該查詢?yōu)樽硬楫?dāng)一個(gè)查詢是另一個(gè)查詢的條件時(shí),稱該查詢?yōu)樽硬樵円脖环Q為嵌套查詢。詢也被稱為嵌套查詢。 可以構(gòu)造出一條含有多個(gè)子

60、查詢的可以構(gòu)造出一條含有多個(gè)子查詢的SQLSQL語句來完成很復(fù)語句來完成很復(fù)雜目的的查詢。雜目的的查詢。 【例例4-294-29】查詢查詢“張三張三”同班同學(xué)的學(xué)號(hào)、姓名。同班同學(xué)的學(xué)號(hào)、姓名。SELECT Student.StudentCode, Student.StudentName, SELECT Student.StudentCode, Student.StudentName, Student.ClassCodeStudent.ClassCodeFROM Student FROM Student WHERE WHERE Student.ClassCodeStudent.ClassCod

溫馨提示

  • 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)論