【文章內(nèi)容簡介】
課程名稱⑤查詢所有學生的姓名、院系和年齡小知識:在指定列查詢過程中,所指定列的順序可以與表中定義的順序不一致。查詢?nèi)康牧腥绻樵儽碇械娜苛校梢允褂脙煞N方法。一種是在目標列名序列中列出所有的列名。另一種方法是簡單在目標列名序列中寫星號“*”。查詢?nèi)w學生的信息。①使用第一種方法,即目標列名序列中列出所有的列名。SELECT SNO, SNAME, SSEX, SAGE, SDEPT FROM STUDENT②使用第二種方法,即目標列名序列用星號“*”來代替。SELECT * FROM STUDENT動手做:③查詢選課表中的所有信息④查詢課程表中的全部信息查詢經(jīng)過計算的列①查詢?nèi)w學生的姓名及出生年份(提示:本年度(2006)—SAGE即為出生年份)SELECT SNAME,2006SAGE FROM STUDENT ②查詢?nèi)w學生的姓名和出生年份,并在年份前加一個列,此列的每行數(shù)據(jù)均為“出生年份是:”常量值。SELECT SNAME, 39。出生年份是:39。,2006SAGE FROM STUDENT注意:選擇列表中的常量和計算是對表中的每行進行的。改變列標題的語法格式為:列名 | 表達式 [AS] 列標題 或 列標題 = 列名 | 表達式 則查詢①可寫為:SELECT SNAME, 2004SAGE 出生年份FROM STUDENT 或SELECT SNAME, 2006SAGE AS 出生年份 FROM STUDENT查詢②可寫為:SELECT SNAME, 39。出生年份是:39。 AS 常量字段,2006SAGE AS 出生年份 FROM STUDENT二、選擇表中的若干元組DISTINCT和TOP的用法消除取值重復行的方法是使用DISTINCT語句。也可以使用TOP n 返回結(jié)果中的前n行數(shù)據(jù)。①查詢有選課的學生的學號SELECT DISTINCT SNO FROM SC ②查詢出前兩個選了課學生的學號SELECT DISTINCT TOP 2 SNO FROM SCWHERE 子句的使用(1)比較(比較運算符)動手做:①查詢管理系全體學生的姓名②查詢大于20歲學生的所有信息③查詢成績不及格的學生的學號④查詢年齡小于18歲的學生的姓名、院系⑤查詢學時小于40的全部課程信息(2)確定范圍動手做:①查詢年齡在20~22歲之間的學生的姓名、所在系和年齡思考問題:上面的查詢有幾種實現(xiàn)方法?②查詢課程的學時在4060分之間的課程信息(3)確定集合IN語法格式為:列名 [NOT] IN (常量1, 常量2, …, 常量n,) ①查詢管理系、經(jīng)濟系學生的姓名和性別 SELECT SNAME,SSEX FROM STUDENT WHERE SDEPT IN(39。管理系39。,39。經(jīng)濟系39。)②查詢不是管理系、經(jīng)濟系學生的姓名和性別SELECT SNAME,SSEX FROM STUDENT WHERE SDEPT NOT IN(39。管理系39。,39。經(jīng)濟系39。)動手做:③查詢年齡為19,22,38歲的所有學生的信息④查詢成績?yōu)?8,79,89分的選課信息⑤查詢課程名稱為數(shù)據(jù)庫原理,稅法,財務管理的課程信息(4)字符匹配動手做:①查詢姓“張”的學生的詳細信息②查詢學生表中姓“張”、姓“李”和姓“劉”的學生的情況③查詢名字中第2個字為“小”或“大”字的學生的姓名和學號④查詢所有不姓“劉”的學生的情況⑤查詢學生表中學生的學號最后一位不是2,3,5 學生的情況⑥查詢課程表中第一個字是數(shù),財?shù)恼n程信息⑦用SQL語句看看是否有人與你的第二個字相同⑧查詢學生姓名中帶有文字的學生信息⑨查詢學生的學號最后一位是/不是1,3,5,7,9的學生的學號和姓名小知識:如果在所要查找的字符中存在%或_應該如何去查找?如查找課程名稱為“DB_”開頭的課程。 解:使用轉(zhuǎn)意字符ESCAPE39。轉(zhuǎn)換字符39。SELECT * FROM COURSE WHERE CNAME LIKE 39。DB\_%39。 ESCAPE 39。\39。ESCAPE 39。\39。短語表示\為轉(zhuǎn)換字符,在表達示中\(zhòng)后面的_或%不再具有通配符的含義,轉(zhuǎn)義為普通的“_”字符。查詢情況如圖48所示。(5)多重條件(邏輯謂詞)AND表示只有在全部滿足所有條件時結(jié)果才為TRUE,OR表示只要滿足其中一個條件結(jié)果即為TRUE查詢管理系年齡在22歲以下的學生的姓名、年齡和學號SELECT SNAME,SAGE,SNO FROM STUDENT WHERE SDEPT=39。管理系39。 AND SAGE22三、排序排序的語法格式為:ORDER BY 列名[ASC|DESC] [,…n]動手做:①將學生按年齡的升序排序②查詢選修課程號為0503030502的學生的學號和成績,查詢結(jié)果按成績降序排序。③查詢?nèi)w學生的信息,查詢結(jié)果按院系名升序排序,同系的學生按年齡降序排序。④查詢選課的成績,結(jié)果按成績降序排列⑤查詢管理學院的女生信息,結(jié)果按年齡升序排序⑥查詢課程的所有信息,結(jié)果按學時降序排序,課程名升序排序?qū)嵱栁?數(shù)據(jù)表的高級查詢【實訓目的】(1)掌握計算函數(shù)的使用方法(2)掌握分組的含義及使用方法(3)掌握多表查詢的方式(4)理解子查詢的運用【實訓要求】(1)使用查詢分析器完成以下各種操作(2)按要求完成每一個實訓項目(3)及時保存SQL語句,實訓結(jié)束后統(tǒng)一上教源代碼【實訓學時】2學時 實訓教師可以根據(jù)學生實際情況進行適當?shù)恼{(diào)整,也可要求學生在課下完成部分實訓任務【實訓內(nèi)容與步驟】說明:本實訓使用信息管理與信息系統(tǒng)實訓室機器中已安裝好的數(shù)據(jù)庫XKDB,數(shù)據(jù)庫中存有與實訓二中相同的數(shù)據(jù)表。一、計算函數(shù)匯總數(shù)據(jù)動手做:①統(tǒng)計學生總?cè)藬?shù)②統(tǒng)計選修了課程的學生的人數(shù)③計算學號為“0305030128”的學生的考試各科成績之和④計算課程“0503030505”的學生的考試平均成績⑤查詢選修了課程“0503030505”的學生的最高分和最低分思考問題:計算函數(shù)能不能出現(xiàn)在WHERE子句中,例如查詢年齡最大學生的姓名是否可以寫成: SELECT SNAME STUDENT WHERE SAGE=MAX(SAGE)請通過上機驗證后說明。二、分組計算GROUP BY 語法格式為:GROUP BY 分組依據(jù)列 [,…n] HAVING組提取條件注意:分組依據(jù)列不能是text、ntext、image和bit類型的列。①統(tǒng)計每門課程的選課人數(shù),列出課程號和人數(shù)。SELECT CNO,COUNT(SNO)FROM SC GROUP BY CNO分析:該語句首先查詢結(jié)果按CNO的值分組,所有CNO值相同的元組歸為一組,然后再用COUNT函數(shù)對每一組進行計算,求得每組的學生人數(shù)。動手做:②查詢每名學生的選課門數(shù)和所有成績的平均值③查詢選修了3門以上課程的學生的學號④查詢選取課門數(shù)等于或大于4門的學生的平均成績和選課門數(shù)SELECT SNO,AVG(GRADE),COUNT(*) FROM SCGROUP BY SNO HAVING COUNT(*)三、多表聯(lián)接查詢內(nèi)連接內(nèi)連接的格式為:FROM 表1 [INNER JOIN] 表2 ON 連接條件內(nèi)聯(lián)接條件格式為:[表名1﹒][列名]比較運算符[表名2﹒][列名2]①查詢管理系學生的選課情況,要求列出學生的姓名、所修課的課號和成績。SELECT SNAME,CNO,GRADE FROM STUDENT JOIN SC ON = WHERE SDEPT=39。管理系39。下面的語句也可以實現(xiàn)上面的功能:SELECT SNAME,CNO,GRADE FROM STUDENT,SC WHERE = AND SDEPT=39。管理系39。動手做:②查詢管理學院選修“計算機網(wǎng)絡”課程的學生的姓名,課程名和成績。③查詢所有選修“計算機網(wǎng)絡”課程的學生的情況,要求列出學生的姓名和所在系。④查詢課程的成績情況,要求列出課程的名稱和成績自聯(lián)接它是一種特殊的內(nèi)聯(lián)接,它是指相互聯(lián)接的表在物理上為同一張表,但可以在連輯上分為兩張表。使用自聯(lián)接必須為表取兩個別名,使之在邏輯上成為兩張表。①查詢與李勇在同一個系學習的學生的姓名和所在的系SELECT , FROM STUDENT S1 JOIN STUDENT S2 ON =WHERE =’李勇’ AND != ’李勇’動手做:②查詢與你本人在一個學院學習的學生姓名、性別和年齡外連接ANSI方式的外連接的語法格式為:FROM 表1 LEFT|RIGHT [OUTER] JOIN 表2 ON 連接條件①查詢學生的選課情況(學號,姓名,課程號,成績),包括選課和沒有選課的學生。SELECT ,SNAME,CNO,GRADE FROM STUDENT LEFT OUTER JOIN SC ON =動手做:②查詢計算機學院學生的選課情況,包括選課和沒有選課的學生。思考問題:試比較三種聯(lián)接查詢方式不同之處及外聯(lián)接查詢中三種查詢方式的不同之處。四、子查詢使用子查詢進行基于集合的測試①查詢與吳賓在同一個系的學生SELECT SNO,SNAME,SDEPT FROM STUDNT WHERE SDEPT IN (SELECT SDEPT FROM STUDENT WHERE SNAME=39。吳賓39。)②查詢成績大于90分的學生的學號和姓名SELECT SNO,SNAME FROM STUDENT WHERE SNO IN (SELECT SNO FROM SC WHERE GRADE90)或SELECT SNO,SNAME FROM STUDENT,SC WHERE = AND GRADE90③查詢了選修了“數(shù)據(jù)庫原理及應用”課程的學生的學號和姓名。SELECT SNO,SNAME FROM STUDENT WHERE SNO IN (SELECT SNO FROM SC WHERE CNO IN (SELECT CNO FRON COURSE WHERE CNAME=39。數(shù)據(jù)庫原理及應用39。))或SELECT ,SNAME FROM STUDENT,SC,COURSE WHERE = AND = AND CNAME=39。數(shù)據(jù)庫原理及應用39。④查詢年齡最大學生的姓名SELECT SNAME FROM STUDENT WHERE SAGE IN (SELECT MAX(SAGE) FROM STUDENT)思考問題:這里的IN能不能用=來代替。使用子查詢進行比較測試使用子查詢進行比較測試時,要求子查詢語句必須是返回單值的查詢語句。①查詢選修了課程號為“0502050502”且成績高于此課程的平均成績的學生的學號和成績。SELECT SNO,GRADE FROM SC WHERE CNO=39。050205050239。 AND GRADE(SELECT AVG(GRADE) FROM SC WHERE CNO=39。050205050239。)動手做:②查詢學生年齡低于平均年齡的學生學號、姓名、性別和年齡。使用子查詢進行存在性測試小知識:由于帶EXISTS的子查詢只能返回真或假值,因此在子查詢中指定的列名是沒有意義的。所以在有EXISTS的子查詢中,其目標列名序列通常都用“*”。①查詢選修了課程“0502050502”的學生姓名和系。SELECT SNAME,SDEPT FROM STDENT WHERE EXISTS (SELECT * FROM SC WHERE SNO= AND CNO=39。050205050239。)②查詢沒有選修0502050502的學生的學號、姓名和所在系。SELECT SNO,SNAME,SDEPT FROM STUDENT WHERE NOT EXISTS(SELECT * FROM SC WHERE SNO= AND CNO=39。050205050239。) 實訓六 數(shù)據(jù)完整性約束【實訓目的】掌握數(shù)據(jù)完整性約束的作用及實現(xiàn)方法【實訓要求】(1)使用查詢分析器完成以下各種操作(2)自學本實訓中涉及到的相關內(nèi)容(3)根據(jù)實訓要求創(chuàng)建所用到的關系表【實訓學時】2學時 實訓教師可以根據(jù)學生實際情況進行適當?shù)恼{(diào)整,也可要求學生在課下完成部分實訓任務【實訓內(nèi)容與步驟】說明:本實訓使用信息管理與信息系統(tǒng)實訓室機器中已安裝好的數(shù)據(jù)庫XKDB。第一步:打開“查詢分析器”。建立下面的表USE XKDBGOCREATE TABLE student_p(Sno CHAR(10) NOT NULL,Sname CHAR (10) ,Ssex CHAR (2) ,Sage TINYINT ,S