數據庫實驗——數據查詢by SixInNight

實驗目的

通過對實驗二建立的數據庫關係表和視圖的各種查詢的操作,
加深對 SQL 語言和 Transact SQL 查詢語言的瞭解,
掌握相關查詢語句的語法及使用方法。

實驗要求

  1. 分別用 Transact_SQL 語句完成以上操作;
  2. 要求學生獨立完成以上內容;
  3. 按照實驗步驟完成實驗後,撰寫報告內容。

實驗內容

  1. 簡單的查詢操作,包括單表的查詢、選擇條件、結果排序等的練習;
  2. 多表的連接查詢,包括等值連接、自然連接等;
  3. 複雜的查詢操作,包括使用分組等庫函數的查詢操作;
  4. 練習帶有 IN、比較符的嵌套查詢。

實驗步驟

  1. 簡單查詢:
    (1) 查詢班號爲“g09402”班的學生的學號和姓名;
    (2) 查詢“網絡技術與實踐”課程的周學時和學分;
    (3) 查詢選修了課程編號爲“dep04_s001”的學生的學號和成績,並將成績按降序輸出;
    (4) 查詢所有姓張的學生的信息;
    (5) 查詢出生在 1994 年和 1995 年間的學生信息;
    (6) 查詢 1992 年以後出生的女學生的學號、姓名、性別和出生日期,結果按年齡從小到大排序;
    (7) 顯示所有學生的相關信息,並彙總學生總人數。

  2. 在多表連接的查詢實驗中,在 SQL SERVER 提供的交互式語言環境下用 Transact SQL 語句完成以下查詢操作:
    (1) 查詢選修了課程編號爲“dep04_s002”且成績高於 85 分的學生的學號、姓名和成績;
    (2) 查詢所有學生的學號、姓名、選修的課程名稱和成績;
    (3) 查詢計算機科學系林紅同學選修的課程名稱、學分和成績(考試成績>=60 有學分,否則無學分);
    (4) 查詢每個教師的基本信息及教師類別;
    (5) 使用完全外聯接查看“學生選課”數據庫中每位教師的授課情況;
    (6) 查詢選課程最多的學生由高到低排序;
    (7) 查詢計算機系的教師授課課程的選修情況;
    (8) 查詢紀雲老師和喬紅老師教授的同 1 門課程並列出課程名稱;
    (9) 查詢由嚴爲老師授課而沒有由喬紅老師授課的課程;
    (10) 查詢至少選修了三門課程的學生的學號和姓名;
    (11) 查詢選修課程號爲“dep04_b001”的學生的平均成績;
    (12) 查詢所有學生的學號和其選修課程的最高成績,要求他的選修課程中沒有成績爲空的;
    (13) 查詢嚴爲老師 2011/2012 學年所授“軟件開發技術”課程的最高成績及此學生的學號、姓名、班級;
    (14) 查詢 SQL SERVER 數據庫開發技術課程用過的教材名稱,作者和出版社;
    (15) 查詢計算機科學系講授過“JAVA 程序設計與開發”的老師姓名和職稱。

  3. 在嵌套查詢實驗中,在 SQL SERVER 提供的交互式語言環境下用 Transact SQL 語句完成以下查詢操作,要求寫嵌套查詢語句:
    (1) 查詢所有已獲“副教授”職稱的女教師的姓名、性別;
    (2) 查詢開設了課程 ID 爲”dep01_s002”的課程的教師的相關信息;
    (3) 查詢選修了”dep01_s002”課程的學生學號、姓名;
    (4) 查詢課程考試不及格的學生的姓名、性別;
    (5) 查詢網頁設計課程不及格的學生姓名、性別和家庭地址;
    (6) 查詢選修了“計算機基礎”的學生的學號和姓名;
    (7) 查詢沒有選修 “計算機基礎”的學生的學號和姓名;
    (8) 查詢至少選修了學號爲“g0940201”的學生所選修的所有課程的學生的學號和姓名。

Transact_SQL 語句 (和實驗步驟對應

  1. 簡單查詢:
	--1.1 查詢班號爲“g09402”班的學生的學號和姓名
	USE 學生選課
	SELECT 學生ID號, 學生姓名 FROM STUDENT
	WHERE 班級ID號='g09402'
	
	--1.2 查詢“網絡技術與實踐”課程的周學時和學分
	SELECT 周學時, 課程學分 FROM COURSE
	WHERE 課程名稱='網絡技術與實踐'
	
	--1.3 查詢選修了課程編號爲“dep04_s001”的學生的學號和成績,並將成績按降序輸出
	SELECT 學生ID號, 分數 FROM STUDENT_COURSE
	WHERE 課程ID號='dep04_s001' ORDER BY 分數 DESC
	
	--1.4 查詢所有姓張的學生的信息
	SELECT * FROM STUDENT
	WHERE 學生姓名 LIKE '張%'
	
	--1.5 查詢出生在1994年和1995年間的學生信息
	SELECT * FROM STUDENT
	WHERE 出生時間>'1994-01-01' AND 出生時間<'1995-12-31'
	
	--1.6 查詢1992年以後出生的女學生的學號、姓名、性別和出生日期,結果按年齡從小到大排序
	SELECT 學生ID號, 學生姓名, 性別, 出生時間 FROM STUDENT
	WHERE 出生時間>'1992-01-01' AND 性別='女' ORDER BY 出生時間
	
	--1.7 顯示所有學生的相關信息,並彙總學生總人數
	SELECT * FROM STUDENT
	SELECT COUNT(*) FROM STUDENT
  1. 在多表連接的查詢實驗中,在 SQL SERVER 提供的交互式語言環境下用 Transact SQL 語句完成以下查詢操作:
	--2.1 查詢選修了課程編號爲“dep04_s002”且成績高於85分的學生的學號、姓名和成績
	USE 學生選課
	SELECT STUDENT.學生ID號, STUDENT.學生姓名, STUDENT_COURSE.分數 FROM STUDENT, STUDENT_COURSE
	WHERE STUDENT.學生ID號=STUDENT_COURSE.學生ID號 AND STUDENT_COURSE.課程ID號='dep04_s002' AND STUDENT_COURSE.分數>85
	
	--2.2 查詢所有學生的學號、姓名、選修的課程名稱和成績
	SELECT STUDENT.學生ID號, STUDENT.學生姓名, STUDENT_COURSE.課程ID號, STUDENT_COURSE.分數 FROM STUDENT, STUDENT_COURSE
	WHERE STUDENT.學生ID號=STUDENT_COURSE.學生ID號
	
	--2.3 查詢計算機科學系林紅同學選修的課程名稱、學分和成績
	SELECT COURSE.課程名稱, STUDENT_COURSE.學分, STUDENT_COURSE.分數 FROM COURSE, STUDENT, STUDENT_COURSE
	WHERE STUDENT.學生姓名='林紅' AND STUDENT.學生ID號=STUDENT_COURSE.學生ID號 AND STUDENT_COURSE.課程ID號=COURSE.課程號
	
	--2.4 查詢每個教師的基本信息及教師類別
	SELECT TEACHER.*, 教師類別.類別名稱 FROM TEACHER, 教師類別
	WHERE TEACHER.類別編號=教師類別.類別編號
	
	--2.5 使用完全外聯接查看“學生選課”數據庫中每位教師的授課情況
	SELECT TEACHER.教師ID號, TEACHER.教師姓名, TEACHER_COURSE_CLASS.* FROM TEACHER FULL OUTER JOIN TEACHER_COURSE_CLASS
	ON TEACHER.教師ID號=TEACHER_COURSE_CLASS.教師編號
	
	--2.6 查詢選課程最多的學生由高到低排序
	SELECT STUDENT_COURSE.學生ID號, COUNT(STUDENT_COURSE.課程ID號) FROM STUDENT_COURSE 
	GROUP BY STUDENT_COURSE.學生ID號 ORDER BY COUNT(STUDENT_COURSE.課程ID號) DESC
	
	--2.7 查詢計算機系的教師授課課程的選修情況
	SELECT STUDENT_COURSE.* FROM TEACHER_COURSE_CLASS, TEACHER, STUDENT_COURSE
	WHERE TEACHER.部門ID號='dep_04' AND TEACHER.教師ID號=TEACHER_COURSE_CLASS.教師編號 AND TEACHER_COURSE_CLASS.課程號=STUDENT_COURSE.課程ID號
	
	--2.8 查詢紀雲老師和喬紅老師教授的同1門課程並列出課程名稱
	SELECT COURSE.課程名稱 FROM COURSE, TEACHER_COURSE_CLASS, TEACHER
	WHERE COURSE.課程號=TEACHER_COURSE_CLASS.課程號 AND TEACHER_COURSE_CLASS.教師編號=TEACHER.教師ID號 AND TEACHER.教師姓名='紀雲'
	AND EXISTS(
		SELECT COURSE.課程號 FROM TEACHER_COURSE_CLASS, TEACHER
		WHERE COURSE.課程號=TEACHER_COURSE_CLASS.課程號 AND TEACHER_COURSE_CLASS.教師編號=TEACHER.教師ID號 AND TEACHER.教師姓名='喬紅'
	)
	
	--2.9 查詢由嚴爲老師授課而沒有由喬紅老師授課的課程
	USE 學生選課
	SELECT COURSE.* FROM COURSE, TEACHER, TEACHER_COURSE_CLASS
	WHERE TEACHER.教師姓名='嚴爲' AND TEACHER.教師姓名!='喬紅' AND TEACHER.教師ID號=TEACHER_COURSE_CLASS.教師編號
		AND TEACHER_COURSE_CLASS.課程號=COURSE.課程號
	
	--2.10 查詢至少選修了三門課程的學生的學號和姓名
	SELECT STUDENT.學生ID號, STUDENT.學生姓名 FROM STUDENT, STUDENT_COURSE
	WHERE STUDENT.學生ID號=STUDENT_COURSE.學生ID號 GROUP BY STUDENT.學生ID號, STUDENT.學生姓名
	HAVING COUNT(STUDENT_COURSE.課程ID號)>=3
	
	--2.11 查詢選修課程號爲“dep04_b001”的學生的平均成績
	SELECT AVG(STUDENT_COURSE.分數) FROM STUDENT_COURSE
	WHERE STUDENT_COURSE.課程ID號='dep04_b001'
	
	--2.12 查詢所有學生的學號和其選修課程的最高成績,要求他的選修課程中沒有成績爲空的
	SELECT STUDENT_COURSE.學生ID號, MAX(STUDENT_COURSE.分數) FROM STUDENT_COURSE
	WHERE STUDENT_COURSE.分數>0 GROUP BY STUDENT_COURSE.學生ID號
	
	--2.13 查詢嚴爲老師2011/2012學年所授“軟件開發技術”課程的最高成績及此學生的學號、姓名、班級
	SELECT STUDENT.學生ID號, STUDENT.學生姓名, STUDENT.班級ID號 FROM STUDENT, TEACHER, TEACHER_COURSE_CLASS, STUDENT_COURSE, COURSE
	WHERE TEACHER.教師姓名='嚴爲' AND TEACHER.教師ID號=TEACHER_COURSE_CLASS.教師編號 AND TEACHER_COURSE_CLASS.學年='2011/2012'
		AND TEACHER_COURSE_CLASS.課程號=COURSE.課程號 AND COURSE.課程名稱='軟件開發技術' AND COURSE.課程號=STUDENT_COURSE.課程ID號
		AND STUDENT_COURSE.學生ID號=STUDENT.學生ID號 AND STUDENT_COURSE.分數>=ALL(
			SELECT STUDENT_COURSE.分數 FROM STUDENT_COURSE
			WHERE STUDENT_COURSE.課程ID號=COURSE.課程號 AND COURSE.課程名稱='軟件開發技術'
		)
	
	--2.14 查詢SQL SERVER數據庫開發技術課程用過的教材名稱,作者和出版社
	SELECT BOOK.教材名, BOOK.作者, BOOK.出版社 FROM BOOK, COURSE
	WHERE BOOK.教材ID號=COURSE.書號 AND COURSE.課程名稱='SQL Server數據庫開發技術'
	
	--2.15 查詢計算機科學系講授過“JAVA程序設計與開發”的老師姓名和職稱
	SELECT TEACHER.教師姓名, TEACHER.職稱或職業 FROM TEACHER, DEPARTMENT, COURSE, TEACHER_COURSE_CLASS
	WHERE DEPARTMENT.部門名稱='計算機科學' AND DEPARTMENT.部門ID號=TEACHER.部門ID號 AND TEACHER.教師ID號=TEACHER_COURSE_CLASS.教師編號
		AND TEACHER_COURSE_CLASS.課程號=COURSE.課程號 AND COURSE.課程名稱='JAVA程序設計與開發'
  1. 在嵌套查詢實驗中,在 SQL SERVER 提供的交互式語言環境下用 Transact SQL 語句完成以下查詢操作,要求寫嵌套查詢語句:
	--3.1 查詢所有已獲“副教授”職稱的女教師的姓名、性別
	USE 學生選課
	SELECT 教師姓名, 性別 FROM TEACHER
	WHERE 職稱或職業='副教授' AND 教師ID號 IN (
			SELECT 教師ID號 FROM TEACHER
			WHERE 性別='女')
	
	--3.2 查詢開設了課程ID爲”dep01_s002”的課程的教師的相關信息
	SELECT * FROM TEACHER
	WHERE 教師ID號 IN (
			SELECT 教師編號 FROM TEACHER_COURSE_CLASS
			WHERE 課程號='dep01_s002')
	
	--3.3 查詢選修了”dep01_s002”課程的學生學號、姓名
	SELECT SC.學生ID號, 學生姓名 FROM STUDENT, (
			SELECT 學生ID號 FROM STUDENT_COURSE
			WHERE 課程ID號='dep01_s002') AS SC
	WHERE SC.學生ID號=STUDENT.學生ID號
	
	--3.4 查詢課程考試不及格的學生的姓名、性別
	SELECT 學生姓名, 性別 FROM STUDENT
	WHERE 學生ID號 IN (
			SELECT 學生ID號 FROM STUDENT_COURSE
			WHERE 分數<60)
	
	--3.5 查詢網頁設計課程不及格的學生姓名、性別和家庭地址
	SELECT 學生姓名, 性別, 家庭住址 FROM STUDENT
	WHERE 學生ID號 IN (
			SELECT 學生ID號 FROM STUDENT_COURSE, COURSE
			WHERE 分數<60 AND 課程名稱='網頁設計' AND COURSE.課程號=STUDENT_COURSE.課程ID號)
	
	--3.6 查詢選修了“計算機基礎”的學生的學號和姓名
	SELECT 學生ID號, 學生姓名 FROM STUDENT
	WHERE 學生ID號 IN (
			SELECT STUDENT_COURSE.學生ID號 FROM COURSE, STUDENT_COURSE
			WHERE STUDENT_COURSE.課程ID號=COURSE.課程號 AND COURSE.課程名稱='計算機基礎')
	
	--3.7 查詢沒有選修 “計算機基礎”的學生的學號和姓名
	SELECT 學生ID號, 學生姓名 FROM STUDENT
	WHERE 學生ID號 NOT IN (
			SELECT STUDENT_COURSE.學生ID號 FROM COURSE, STUDENT_COURSE
			WHERE STUDENT_COURSE.課程ID號=COURSE.課程號 AND COURSE.課程名稱='計算機基礎')
	
	--3.8 查詢至少選修了學號爲“g0940201”的學生所選修的所有課程的學生的學號和姓名
	SELECT DISTINCT SC.學生ID號, S.學生姓名 FROM STUDENT S, STUDENT_COURSE SC
	WHERE SC.學生ID號=S.學生ID號 AND NOT EXISTS(
			SELECT * FROM STUDENT_COURSE SD
			WHERE SD.學生ID號='g0940201' AND NOT EXISTS(
				SELECT * FROM STUDENT_COURSE SE
				WHERE SE.課程ID號=SD.課程ID號 AND SE.學生ID號=SC.學生ID號))

實驗結果

截圖就不放了,本懶蛋溜了溜了(_ _(

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章