![信息系統(tǒng)與數(shù)據(jù)庫技術(shù):4.3_SQL語言_第1頁](http://file4.renrendoc.com/view/8a5543210afe6975cead7514ddc8168b/8a5543210afe6975cead7514ddc8168b1.gif)
![信息系統(tǒng)與數(shù)據(jù)庫技術(shù):4.3_SQL語言_第2頁](http://file4.renrendoc.com/view/8a5543210afe6975cead7514ddc8168b/8a5543210afe6975cead7514ddc8168b2.gif)
![信息系統(tǒng)與數(shù)據(jù)庫技術(shù):4.3_SQL語言_第3頁](http://file4.renrendoc.com/view/8a5543210afe6975cead7514ddc8168b/8a5543210afe6975cead7514ddc8168b3.gif)
![信息系統(tǒng)與數(shù)據(jù)庫技術(shù):4.3_SQL語言_第4頁](http://file4.renrendoc.com/view/8a5543210afe6975cead7514ddc8168b/8a5543210afe6975cead7514ddc8168b4.gif)
![信息系統(tǒng)與數(shù)據(jù)庫技術(shù):4.3_SQL語言_第5頁](http://file4.renrendoc.com/view/8a5543210afe6975cead7514ddc8168b/8a5543210afe6975cead7514ddc8168b5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、4.3 Transact-SQL語言 4.3.1 T-SQL語言概述 SQL:結(jié)構(gòu)化查詢語言(Structure Query Language)關(guān)系型數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言:按照ANSI(美國國家標(biāo)準(zhǔn)協(xié)會(huì))的規(guī)定,最初由IBM公司在七十年代中期開發(fā)成功。T-SQL語言是微軟公司在SQL Server中對(duì)SQL擴(kuò)展。 4.1.2 T-SQL語言的特點(diǎn) 1)非過程化 面向過程的程序設(shè)計(jì)語言,必須一步一步地將解題的全過程描述出來,不僅要告訴計(jì)算機(jī)“做什么”,而且還要告訴計(jì)算機(jī)“怎么做”。非過程化語言,不必描述解決問題的全過程,只需提出“做什么”,至于“如何做”的細(xì)節(jié)則由語言系統(tǒng)本身去完成并給出操作
2、的結(jié)果。2)兩種不同的使用方式 聯(lián)機(jī)交互方式: SQL語言既可獨(dú)立使用嵌入程序設(shè)計(jì)語言中:例如VB.net程序設(shè)計(jì)語言中。不論使用何種方式,T-SQL語言的語法結(jié)構(gòu)基本相同。 3) 高度一體化:集數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)操縱語言(DML)、數(shù)據(jù)控制語言(DCL)和T-SQL增加的語言元素于一體,可獨(dú)立完成數(shù)據(jù)庫生命周期的所有活動(dòng)。 4) 語言簡潔、易學(xué)易用3)T-SQL語言的組成元素DDL(Data Definition Language)數(shù)據(jù)庫定義語言定義數(shù)據(jù)庫結(jié)構(gòu)、各對(duì)象及屬性的語句例如:Creat DATABASE StudentDML(Data Manipulation Langu
3、age)數(shù)據(jù)庫操縱語言實(shí)現(xiàn)對(duì)數(shù)據(jù)庫基本操作的語句,主要包括查詢、插入、修改、刪除等DCL(Data Control Language)數(shù)據(jù)庫控制語言保證數(shù)據(jù)庫一致性和完整性T-SQL增加的語言元素 變量、運(yùn)算符、函數(shù)、流程控制語句和注解等。 * T-SQL語言可在SQL Server查詢分析器中直接執(zhí)行并查看結(jié)果,即以交互方式使用。在T-SQL語句中,不區(qū)分字母大小寫。為閱讀方便,約定: 用大寫字母書寫T-SQL語句中關(guān)鍵字;(2) 用小寫字母書寫語句中的標(biāo)識(shí)符、表達(dá)式以及各種參數(shù)。菜單欄 對(duì)象瀏覽器:進(jìn)行數(shù)據(jù)庫維護(hù)和操作SQL語句編輯器 執(zhí)行結(jié)果顯示窗口 工具條 4.3.2 數(shù)據(jù)定義語言DD
4、L 數(shù)據(jù)定義語言主要是定義數(shù)據(jù)庫中的對(duì)象,包括數(shù)據(jù)庫、數(shù)據(jù)表、視圖、索引、存儲(chǔ)過程、觸發(fā)器等的建立或修改。 操作對(duì)象操作方式創(chuàng)建刪除修改使用數(shù)據(jù)庫CREATE DATABASEDROP DATABASEALTER DATABASEUSE 基本表CREATE TABLEDROP TABLEALTER TABLE視圖 CREATE VIEWDROP VIEWALTER VIEW索引CREATE INDEXDROP INDEX存儲(chǔ)過程CREATE PROCEDUREDROP PROCEDUREALTER PROCEDURE觸發(fā)器CREATE TRIGGERDROP TRIGGERALTER TRIG
5、GER表4-11 SQL數(shù)據(jù)定義語言DDL1)創(chuàng)建一個(gè)數(shù)據(jù)庫SchoolTest ;2) SchoolTest中只有一個(gè)數(shù)據(jù)文件SchoolTest_Data,它被默認(rèn)為該數(shù)據(jù)庫的主文件,該文件的大小與系統(tǒng)數(shù)據(jù)庫Model的主文件大小相同;3) SchoolTest數(shù)據(jù)庫所在的物理文件為“D:School_Data.mdf”4)系統(tǒng)將自動(dòng)在“D:”中創(chuàng)建一個(gè)名稱為“School_log.LDF”、大小等于主文件大小25%的日志文件。【例4-13】創(chuàng)建一個(gè)只有一個(gè)主數(shù)據(jù)文件 SchoolTest的數(shù)據(jù)庫(不指定該文件的大?。?。CREATE DATABASE SchoolTestON (NAME
6、=SchoolTest_Data, FILENAME=D: SchoolTest_Data.MDF) 1數(shù)據(jù)庫操作語句 (1) 創(chuàng)建數(shù)據(jù)庫語句(CREATE DATABASE) 例:CREATE DATABASE SchoolTest 該語句以系統(tǒng)數(shù)據(jù)庫model作為模板在SQL Server安裝文件夾的Data文件夾下建立數(shù)據(jù)庫文件和日志文件。(2)打開和刪除數(shù)據(jù)庫語句 USE 數(shù)據(jù)庫名 /*選擇當(dāng)前要操作的數(shù)據(jù)庫 */ DROP DATABASE 數(shù)據(jù)庫名/*刪除數(shù)據(jù)庫 */ 2數(shù)據(jù)表操作語句(1)建立表語句(CREATE TABLE) 【例4-14】建立學(xué)生表T_StudentTest。
7、CREATE TABLE T_StudentTest (StudentCode CHAR(8) NOT NULL UNIQUE, /*唯一性約束,不許取空值*/StudentName VARCHAR(16) NOT NULL,Sex CHAR(2) NOT NULL,LiveInDorm BIT DEFAULT 1, /*默認(rèn)值為1*/Constraint StudentPK Primary Key(StudentCode) /* StudentCode為主鍵約束*/)執(zhí)行上述語句后,在School數(shù)據(jù)庫中創(chuàng)建一個(gè)新的空表T_StudentTest,該表由StudentCode、Student
8、Name、Sex、LiveInDorm等字段組成。在字段的定義中確定StudentCode、StudentName、Sex不可取空值,LiveInDorm的默認(rèn)值為1,并將StudentCode設(shè)定為主鍵約束。(2)刪除表語句(DROP TABLE)當(dāng)數(shù)據(jù)表不再需要時(shí),可以使用DROP TABLE語句將其刪除?!纠?-16】刪除T_StudentTest表 DROP TABLE T_GradeTest【例4-15】建立成績表T_GradeTest。CREATE TABLE T_GradeTest(StudentCode CHAR(8) NOT NULL , /*不許取空值*/Grade REA
9、L DEFAULT 0 , /*默認(rèn)值為0*/Constraint GradeCK Check(Grade=0 AND Grade= Grade=100*/)注意:刪除數(shù)據(jù)表要十分謹(jǐn)慎,因?yàn)楫?dāng)數(shù)據(jù)表被刪除時(shí),里面的數(shù)據(jù)也被全部刪除。3索引的建立與刪除(1)建立索引語句(CREATE INDEX) 【例4-17】在T_Student表的姓名(StudentName)字段上建立升序索引。CREATE INDEX NameIndex on T_Student (StudentName) 【例4-18】在T_Student表的學(xué)號(hào)(StudentCode)字段上建立唯一降序索引。CREATE UNIQ
10、UE INDEX StudentCodeIndex on T_Student (StudentCode DESC)(2)刪除索引語句(DROP INDEX) 【例】刪除T_Student表中索引名稱分別為NameIndex和StudentCodeIndex的兩個(gè)索引。DROP INDEX T_Student.ManyIndex, T_Student.StudentCodeIndex 當(dāng)使用企業(yè)管理器創(chuàng)建數(shù)據(jù)庫對(duì)象時(shí)可以自動(dòng)生成其SQL語句(腳本),并可將其保存到一個(gè)擴(kuò)展名為.sql的文件中 ,在查詢分析器中可打開.sql文件,重新執(zhí)行相應(yīng)的SQL腳本。 SQL語句自動(dòng)生成方法 腳本生成方法:(
11、1) 選中要生成SQL腳本的數(shù)據(jù)庫或數(shù)據(jù)表,右擊后在彈出菜單中選擇“所有任務(wù)/生成SQL腳本”;(2) 使用復(fù)選框選擇要生成SQL腳本的對(duì)象,或者在左下部列表框中選擇對(duì)象加入到右下部列表框;(3) 依次進(jìn)入“設(shè)置格式”和“選項(xiàng)”選項(xiàng)卡,對(duì)對(duì)象的語句腳本選項(xiàng)進(jìn)行設(shè)置;(4) 在“常規(guī)”選項(xiàng)卡頁面,點(diǎn)擊【預(yù)覽】按鈕可查看和復(fù)制SQL腳本;(5)點(diǎn)擊“選項(xiàng)”選項(xiàng)卡頁面的【確定】按鈕,可生成一個(gè)擴(kuò)展名為“.sql”的用戶命名的文本文件用來存放這些SQL腳本。 圖4-32 選擇生成SQL腳本的對(duì)象圖4-34 預(yù)覽SQL腳本圖4-35 將腳本保存為文本文件圖4-33 SQL腳本的選項(xiàng)卡4.3.3 數(shù)據(jù)操縱
12、語言DML 數(shù)據(jù)操縱語言實(shí)現(xiàn)對(duì)數(shù)據(jù)的查詢和更新,主要語句及功能如下: 表4-12 SQL數(shù)據(jù)操縱語言DML命令功能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 字段表FROM 表名WHERE 查詢條件GROUP BY 分組字段 HAVING 分組條件ORDER BY 字段名 ASC/DESC 表示可選項(xiàng)。第2行至最后一行稱作SQL子句,不同的子句完成不同的功
13、能。在書寫SELECT語句時(shí),字母大小寫意義完全相同。語句可以寫在若干行上(如上述語法格式中的描述),也可以不換行。1查詢語句SELECT (1)字段表 字段表位于關(guān)鍵字SELECT后面,這些字段將作為查詢的結(jié)果被顯示。使用字段表規(guī)則: 1) 字段與字段之間用逗號(hào)分隔。 【例4-20】 【例4-20】使用SELECT語句查詢T_Student表中的學(xué)生姓名(StudentName)和性別(Sex)。 SELECT StudentName, Sex FROM T_Student 2) 可以使用通配符“ * ”表示表中的所有字段。 【例4-21】 使用SELECT語句查詢 T_Student表中所
14、有字段的值。 SELECT * FROM T_Student 3) 如果字段名或表名中含有空格,則該字段名或表名必須用方括號(hào)括起。 4) 在字段表中,可以使用以下方式將原字段名以新的字段名顯示。 字段名 AS 新字段名 【例4-22】 顯示T_Class表中班級(jí)代號(hào),并將ClassCode字段改為Class Number(注意,新字段名含有空格)。 SELECT ClassCode AS Class Number FROM T_Class (注意,字段別名Class Number含有空格,所以用方括號(hào)括起來) 5) 在字段名前可加上一些范圍限制,以便進(jìn)一步優(yōu)化查詢結(jié)果。常用的范圍關(guān)鍵字有:TO
15、P n | m PERCENT :顯示前n條記錄或前m%的記錄?!纠?-23】查詢T_Course表中的前3條記錄。 SELECT TOP 3 * FROM T_Course 【例4-24】查詢T_Course表中前20%的記錄。 SELECT TOP 20 PERCENT * FROM T_Course b) 使用DISTINCT的查詢結(jié)果a) 不使用DISTINCT的查詢結(jié)果DISTINCT:若多條記錄的字段值具有相同數(shù)據(jù),只顯示一條記錄。 【例4-25】查詢T_Course表中開課的學(xué)院名稱Academy(與所開課程無關(guān))。 SELECT DISTINCT Academy FROM T_
16、Course 由于每個(gè)學(xué)院都開設(shè)了多門課程,因此字段Academy具有部分相同的值。在SELECT語句的字段Academy前加上關(guān)鍵字DISTINCT,相同的學(xué)院名稱只顯示一個(gè)。 6) 為了增強(qiáng)查詢功能,在SELECT語句中還可以使用內(nèi)部聚合函數(shù),它們被用來進(jìn)行一些簡單的統(tǒng)計(jì)或計(jì)算。常用統(tǒng)計(jì)函數(shù)如表4-13所示。常用函數(shù)表: 【例4-26】計(jì)算學(xué)生的總分、平均分、最高分、最低分及學(xué)生選課數(shù)。 SELECT Sum (Grade) as 總分, Avg (Grade) as 平均分, Max (Grade) as 最高分, Min (Grade) as 最低分, Count (StudentCo
17、de) as 課程人數(shù) FROM T_Grade 表4-13 常用聚合函數(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-37 含有計(jì)算函數(shù)的查詢結(jié)果7)使
18、用SELECT語句復(fù)制新表。在字段名后加上INTO 表名可將查詢結(jié)果復(fù)制到一張新表中。 【例】將T_Student表中所有記錄的學(xué)生姓名、出生日期兩個(gè)字段復(fù)制一張新表NewTable。 SELECT StudentName, BirthDay INTO NewTable FROM T_Student運(yùn)行后,屏幕顯示一對(duì)話框,單擊【是】按鈕,產(chǎn)生一張表名為NewTable的新表 。 (2) FROM子句 指定一個(gè)或多個(gè)需要從中獲取數(shù)據(jù)的表(或查詢)。FROM子句一般在SELECT之后,其語法格式如下: FROM 表名1 ,表名2,表名n 1) 在FROM子句中,表的先后次序可以任意排列。2) F
19、ROM子句中若包含多個(gè)表名,且不同的表中具有相同的字段,那么SELECT子句的字段名必須表示成”.” ?!纠?-27】查詢T_Student表和T_Grade表,報(bào)告StudentCode、 StudentName、 CourseCode和Grade。 SELECT StudentCode, StudentName, CourseCode, Grade FROM T_Student,T_Grade 系統(tǒng)會(huì)顯示出錯(cuò)信息,所以應(yīng)將此語句改成: SELECT T_Student.StudentCode, StudentName, CourseCode, ,Grade FROM T_Student,T
20、_Grade 3.WHERE子句 設(shè)置查詢的條件,它是一個(gè)可選的子句。在使用時(shí),WHERE子句必須在FROM子句的后面。WHERE子句的語法格式: WHERE 查詢條件 查詢條件是一個(gè)邏輯表達(dá)式。常用的運(yùn)算符有: 表4-14 T-SQL中常用的關(guān)系和邏輯運(yùn)算查詢條件謂詞比較(大于)、=(大于等于)、(小于)、=(小于等于)、=(等于)、(不等于)、!(不大于)、!= 70 AND Grade=90【例4-31】查詢T_Student表中不在1986年到1995年中出生的學(xué)生學(xué)號(hào)和姓名。 SELECT StudentCode, StudentName, Birthday FROM T_Stude
21、nt WHERE Birthday NOT BETWEEN 1986-01-01 AND 1995-12-123)確定集合IN運(yùn)算 使用IN運(yùn)算可查詢某些字段值是否包含在所列出的指定值的記錄.【例4-32】查詢T_Student表中班號(hào)(ClassCode)為“061121”、“071221”、“081221”的學(xué)生。 SELECT StudentCode, StudentName, Sex, ClassCode FROM T_Student WHERE Classcode IN (061121,071221,081221)此例的WHERE子句也可以改為:WHERE ClassCode=061
22、121 OR ClassCode=071221 OR ClassCode=0812214)字符匹配LIKE 指定字段的值是否包含在給定的字符串中,其結(jié)果是滿足字符串匹配的數(shù)據(jù)記錄。通配符“_”表示任意單個(gè)字符;“%”表示包含零個(gè)或更多字符的任意字符串?!纠?-33】查詢T_Course表中課程名稱(CourseName)中包含“化學(xué)”兩個(gè)字的課程代號(hào)(CourseCode)及課程名稱。查詢結(jié)果如圖4-40所示。 SELECT CourseCode,CourseName FROM T_Course WHERE CourseName LIKE %化學(xué)%圖4-40包含“化學(xué)”兩字的課程5) 聯(lián)接查詢
23、 查詢操作中涉及多表的查詢也稱為聯(lián)接查詢??梢杂脙煞N方法實(shí)現(xiàn):在WHERE子句中設(shè)置查詢條件。 【例4-34】查詢未住校學(xué)生的選課及成績情況 SELECT StudentName, CourseCode, Grade, LiveinDorm FROM T_Grade, T_Student WHERE LiveInDorm=0 AND T_Grade.StudentCode=T_Student.StudentCode“T_Grade.StudentCode=T_Student.StudentCode”指明在T_Student表 和T_Grade表中StudentCode字段值相同的記錄相聯(lián)接。查
24、詢結(jié)果有13行,表示13人次的選課及成績。若無此聯(lián)結(jié)條件,系統(tǒng)會(huì)將T_Student 中LiveInDorm為0的記錄(共6條)和T_Grade表的任意記錄(共30條)全部聯(lián)結(jié),查詢結(jié)果包括180條信息,查詢結(jié)果是沒有意義的。在FROM子句中使用聯(lián)接關(guān)鍵字將表與表聯(lián)接在一起。 T-SQL查詢嵌套在語言中使用時(shí),多采用該方法 。語法格式: FROM 表1 聯(lián)接關(guān)鍵字 表2 ON 表1.字段名1 表2.字段名2 其中:表1、表2是被聯(lián)接的表名; 字段名是被聯(lián)接的字段。必須有相同的數(shù)據(jù)類型并包含同類數(shù)據(jù),但不需要有相同的名稱。 比較運(yùn)算符:=、=、聯(lián)接關(guān)鍵字用于確定聯(lián)接的方式,常用的有INNER J
25、OIN (內(nèi)聯(lián)接)、LEFT OUTER JOIN(左外聯(lián)接)、RIGHT OUTER JOIN(右外聯(lián)接)、CROSS JOIN(交叉聯(lián)接);INNER JOININNER JOIN:查詢結(jié)果僅包含兩個(gè)表中每對(duì)聯(lián)結(jié)匹配的行。內(nèi)連接是系統(tǒng)默認(rèn)的,可以將關(guān)鍵字INNER省略。【例4-35】使用內(nèi)聯(lián)接查詢未住校學(xué)生的選課及成績情況。SELECT StudentName, CourseCode, Grade, LiveinDormFROM T_Student INNER JOIN T_Grade ON T_Student.StudentCode = T_Grade.StudentCode WHERE
26、 LiveInDorm=0本句的查詢結(jié)果與【例4-34】結(jié)果完全相同。SELECT T_Grade.StudentCode, StudentName, CourseCode, Grade FROM T_Grade,T_Student WHERE LiveInDorm=0 ANDT_Grade.StudentCode=T_Student.StudentCode LEFT OUTER JOIN左外聯(lián)接,查詢結(jié)果除了包含兩張表中符合連接條件的記錄外,還包含左表(寫在關(guān)鍵字LEFT OUTER JOIN左邊的表)中不符合聯(lián)接條件、但符合WHERE條件的全部記錄。 【例4-36】使用左外聯(lián)接查詢未住校學(xué)
27、生的選課及成績情況。SELECT StudentName, CourseCode, Grade, LiveInDormFROM T_Student LEFT OUTER JOIN T_Grade ON T_Student.StudentCode = T_Grade.StudentCodeWHERE LiveInDorm=0 本句的查詢結(jié)果中有些記錄的CourseCode和Grade字段的值為NULL,也就是說這些記錄是不符合聯(lián)接條件的(即在T_Grade中沒有找到有相同StudentCode的記錄),但由于使用了左外聯(lián)接的查詢方法,所以左表(T_Student)中的符合WHERE子句條件的全部
28、記錄顯示在查詢結(jié)果中。 RIGHT OUTER JOIN右外聯(lián)接,查詢結(jié)果除了包含兩張表中符合聯(lián)接條件的記錄,還包含右表(寫在關(guān)鍵字RIGHTT OUTER JOIN右邊的表)中不符合聯(lián)接條件、但符合WHERE條件的全部記錄。 【例4-37】使用右外聯(lián)接查詢未住校學(xué)生的選課及成績情況。SELECT StudentName, CourseCode, Grade, LiveInDormFROM T_Student RIGHT OUTER JOIN T_Grade ON T_Student.StudentCode = T_Grade.StudentCodeWHERE LiveInDorm=0本句的查
29、詢結(jié)果與使用內(nèi)聯(lián)接完全相同,但含義不同。結(jié)果相同是由于在表設(shè)計(jì)時(shí),在表T_Student和T_Grade之間通過外鍵建立了參照完整性約束,表T_Grade中的所有StudentCode必須是T_Student中出現(xiàn)的值?!纠?-38】查詢化工學(xué)院開設(shè)的課程的選修學(xué)生和考試成績。SELECT T_Course.CourseCode, T_Course.CourseName, StudentCode, Academy, GradeFROM T_Grade RIGHT JOIN T_Course ON T_Grade.CourseCode = T_Course.CourseCodeWHERE Aca
30、demy=化工學(xué)院查詢結(jié)果中,左表T_Grade和右表T_Course中既符合聯(lián)接條件又符合WHERE子句條件的所有記錄都被顯示。右表T_Course中有2個(gè)記錄 “分析化學(xué)概論”和“物理化學(xué)”符合WHERE子句條件但不符合聯(lián)接條件,同樣被顯示在查詢結(jié)果中,說明這兩門課程目前沒有學(xué)生選修。CROSS JOIN(交叉聯(lián)接):查詢結(jié)果是將兩個(gè)表進(jìn)行拼接,即第一個(gè)表的每行與第二個(gè)表的每一行進(jìn)行拼接,查詢結(jié)果的行數(shù)等于兩個(gè)表行數(shù)之積。【例4-39】使用交叉聯(lián)接列出所有學(xué)生需選的所有課程情況。 SELECT StudentName, CourseCode FROM T_Student CROSS JOI
31、N T_Grade注意:交叉聯(lián)接不能有條件,且不能帶WHERE子句。多表聯(lián)接嵌套:在多表查詢時(shí),所涉及的數(shù)據(jù)表在3張以上,形成聯(lián)接嵌套。嵌套的格式如下:FROM 表1 INNER JOIN表2 ON 表1.字段1 表2.字段2 INNER JOIN 表3 ON 表2.字段1 表3.字段2 INNER JOIN表n ON 表n-1.字段1 表n.字段2 【例4-40】查詢班號(hào)是“051011”的學(xué)生姓名、所選課程名稱和成績。使用WHERE子句設(shè)置查詢條件:SELECT StudentName, CourseName, Grade FROM T_Student,T_Course,T_Grade W
32、HERE T_Course.CourseCode = T_Grade.CourseCode AND T_Student.StudentCode = T_Grade.StudentCode AND ClassCode=051011在INNER JOIN 之中,嵌套了一個(gè)INNER JOIN。使用聯(lián)接關(guān)鍵字的語句: SELECT StudentName, CourseName, GradeFROM T_Student JOIN T_Grade ON T_Student.StudentCode = T_Grade.StudentCode JOIN T_Course ON T_Grade.Course
33、Code = T_Course.CourseCodeWHERE ClassCode=051011(3) GROUP BY子句 將指定字段中具有相同值的記錄合并成一條記錄。語法格式: GROUP BY 分組字段 HAVING 分組條件 HAVING子句與WHERE子句的作用類似:在使用GROUP BY完成分組后,顯示滿足HAVING子句中分組條件的所有記錄。 圖4-45 GROUP BY子句查詢結(jié)果【例4-41】按住校與否統(tǒng)計(jì)學(xué)生的平均成績。查詢結(jié)果如圖4-45所示。SELECT LiveInDorm, STR(AVG(Grade),5,2) AS 平均成績FROM T_Student JOIN
34、 T_GradeON T_Student.StudentCode=T_Grade.StudentCodeGROUP BY LiveInDorm【例4-42】統(tǒng)計(jì)課程代號(hào)(CourseCode)大于“110006”的各門課程的選課人數(shù)。查詢結(jié)果如圖4-47所示。SELECT CourseCode, Count (StudentCode) AS 選課人數(shù)FROM T_GradeGROUP BY CourseCodeHAVING CourseCode 110006圖4-47 按課程代號(hào)統(tǒng)計(jì)并篩選(4) ORDER BY子句按指定字段為查詢結(jié)果排序。通常是 SQL 語句最后一項(xiàng)。 語法格式為: ORD
35、ER BY 字段名 ASC/DESC 字段名是排序的依據(jù),也可以是含有字段名的表達(dá)式。 ASC為升序排序(Ascending),DESC為降序(Descending)缺省排列次序?yàn)樯?。【?-43】按成績(Grade)升序顯示T_Grade表中的所有數(shù)據(jù)。 SELECT * FROM T_Grade ORDER BY Grade可以指定多個(gè)排序的字段。多字段排序的規(guī)則是:首先用指定的第一個(gè)字段對(duì)記錄排序,然后對(duì)此字段中具有相同值的記錄用指定的第二個(gè)字段進(jìn)行排序,依此類推。若無ORDER BY子句,則按原數(shù)據(jù)表的次序顯示數(shù)據(jù)?!纠?-44】按姓名(StudentName)升序 出生日期(Bir
36、thday)降序查詢學(xué)生及其班級(jí)信息。SELECT StudentCode, StudentName, ClassName, BirthdayFROM T_Student JOIN T_ClassON T_Student.ClassCode=T_Class.ClassCodeORDER BY Studentname ASC, Birthday DESC(5) 子查詢 當(dāng)一個(gè)查詢是另一個(gè)查詢的條件時(shí),稱該查詢?yōu)樽硬樵円脖环Q為嵌套查詢。可以構(gòu)造出一條含有多個(gè)子查詢的SQL語句來完成很復(fù)雜目的的查詢。 【例4-45】查詢“李佳婷”同班同學(xué)的學(xué)號(hào)、姓名。SELECT T_Student.Student
37、Code, T_Student.StudentName, T_Student.ClassCodeFROM T_Student WHERE T_Student.ClassCode= (SELECT T_Student.ClassCode FROM T_Student WHERE T_Student.StudentName=李佳婷)圖4-49 子查詢的示例如果子查詢結(jié)果返回多值則子查詢要與下面介紹的IN、EXIST等結(jié)合使用。 1) IN子查詢 IN子查詢用來判斷一個(gè)給定值是否在子查詢的結(jié)果集中?!纠?-46】查詢選修了課程代碼為“110001”的學(xué)生的學(xué)號(hào)、姓名和班級(jí)代號(hào)。SELECT Stud
38、entCode,StudentName, ClassCodeFROM T_Student WHERE StudentCode IN (SELECT StudentCode FROM T_Grade WHERE CourseCode=110001)圖4-50 IN子查詢示例2) EXISTS子查詢 EXISTS子查詢用于判斷一個(gè)子查詢的結(jié)果集是否為空,如果為空則返回TRUE,否則返回FALSE。NOT EXISTS的返回值與EXISTS相反。 用EXISTS子查詢【例4-46】查詢選修了課程代碼為“110001”的學(xué)生的學(xué)號(hào)、姓名和班級(jí)代號(hào)。SELECT StudentCode, Student
39、Name, ClassCodeFROM T_Student WHERE EXISTS (SELECT * FROM T_Grade WHERE T_Student.StudentCode=T_Grade.StudentCode AND T_Grade.CourseCode=110001).數(shù)據(jù)插入語句INSERT INTO 功能:在指定的表中添加一個(gè)新的記錄,或一次從其他表提取一組記錄插入到目標(biāo)表中。語法格式1:在指定的表中添加一個(gè)新的記錄。INSERT INTO 數(shù)據(jù)表(字段名1,字段名2)VALUES(表達(dá)式1,表達(dá)式2)字段可以是某幾個(gè)字段。表達(dá)式1、表達(dá)式2分別對(duì)應(yīng)字段名1、字段名2,它們是所要添加的記錄的值。當(dāng)插入一條完整的記錄時(shí),可省略字段名,但字段值次序要與表中字段的次序一一對(duì)應(yīng)。 【例4-47】向T_Class表插入一條記錄。 INSERT INTO T_Class VA
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度違約賠償協(xié)議書:智能穿戴設(shè)備生產(chǎn)違約賠償及售后服務(wù)合同
- 2025年度跨國電子產(chǎn)品國際采購合同磋商程序詳述
- 二零二五年度企業(yè)食堂檔口租賃合同與員工餐飲滿意度調(diào)查協(xié)議
- 液態(tài)農(nóng)藥罐車配送合同
- 大數(shù)據(jù)應(yīng)用開發(fā)合作合同
- 私人茶藝師茶藝教學(xué)合同
- 智能海洋資源開發(fā)利用項(xiàng)目合同
- 環(huán)保節(jié)能技術(shù)研發(fā)合同
- 網(wǎng)絡(luò)直播營銷推廣服務(wù)合同
- 電子商務(wù)行業(yè)交易糾紛解決合同
- 五年級(jí)上冊(cè)美術(shù)《傳統(tǒng)門飾》課件
- DL∕T 1309-2013 大型發(fā)電機(jī)組涉網(wǎng)保護(hù)技術(shù)規(guī)范
- 城鄉(xiāng)低保待遇協(xié)議書
- DL-T5153-2014火力發(fā)電廠廠用電設(shè)計(jì)技術(shù)規(guī)程
- 華為HCIA-Storage H13-629考試練習(xí)題
- 遼寧省撫順五十中學(xué)2024屆中考化學(xué)全真模擬試卷含解析
- 2024年中國科學(xué)技術(shù)大學(xué)少年創(chuàng)新班數(shù)學(xué)試題真題(答案詳解)
- 煤礦復(fù)工復(fù)產(chǎn)培訓(xùn)課件
- 眼科疾病與視覺健康
- 繪本分享《狐貍打獵人》
評(píng)論
0/150
提交評(píng)論