1. 程式人生 > >實驗二 資料物件的定義、單表資料查詢

實驗二 資料物件的定義、單表資料查詢

實驗內容

1、建立資料庫Student_DB,並在此資料庫中用命令方式建立資料表(注意表中列的相關約束)

學生表:Student(Sno, Sname, Ssex, Sage, Sdept);

課程表:Course(Cno, Cname, Cpno, Ccredit);

學生選課表:SC(Sno, Cno, Grade)

學生表的邏輯設計:

欄位名

型別

長度

主碼/外碼

描述

是否可空

Sno

char

 9

主碼

學號

×

Sname

char

20

 

姓名

×

Ssex

char

2

 

性別

Sage

smallint

 

 

年齡

Sdept

char

20

 

系別

課程表的邏輯設計:

欄位名

型別

長度

主碼/外碼

描述

是否可空

Cno

char

4

主碼

課程號

×

Cname

char

40

 

課程名

×

Cpno

char

4

外碼

先修課程號

Ccredit

smallint

 

 

學分

選課表的邏輯設計:

欄位名

型別

長度

主碼/外碼

描述

是否可空

 Sno

char

9

外碼

學號

×

Cno

char

4

外碼

課程號

×

說明:選課表的主碼:(Sno, Cno)

2、用SQL語言完成如下的操作(請給出SQL語句及相應執行結果的截圖):

1)將學生表中年齡的資料型別改為整型。

 Alter table student alter column sage int;

2)向SC表中增加成績(Grade)列,其資料型別為短整型。

Alter table SC add Grade smallint;

3)用SSMS方式向三個表中填充資料(參照課本P79頁)(此題可不用給出結果圖)。

4)對Student表按學號降序建唯一索引。

 Create index stu_index on student( sno  desc);

5)對Student表按學生姓名列建聚集索引,觀察能否建立成功,如未成功請分析原因。

Create cluster index sname_index on student (sname) ;

6)刪除第(4)題建的索引。

Drop index stu_index;

3、用SQL語句完成如下對三個表的查詢(請給出SQL語句及執行結果的截圖):

1)查詢所有課程的課程號和課程名。

2)查詢全體學生的記錄。

3)查詢學生表中的所有的系。

4)查詢全體學生的姓名、出生年份和所在的院系,併為出生年份和所在院系兩列分別起別名為sbirth,department,並將系名全部轉換成小寫字母。

5)求數學系學生的學號和姓名。

6)查詢所有考試成績在80分以下的學生學號、課程號。

7)查詢學分在2~7之間的課程資訊。

8)查詢課程名為資料庫課程的課程號和學分。

9)查詢沒有先修課的課程號、課程名及學分。

10)查詢資訊系學生性別為男且年齡小於20歲的學生姓名。

11)查詢選修了3號課程的學生的學號及成績,並要求對查詢結果按成績的降序排列,如果成績相同按學號的升序排列。

12)查詢課程的總數。

13)查詢選修2號課程的學生平均成績和最高成績,並分別為平均成績和最高成績起別名為AVG,MAX。

14)查詢每個學生的選課門數,要求輸出學生學號及選課的門數。

15)查詢選修了2門及以上的課程的學生學號。


實驗過程、存在的問題及解決辦法:


2、用SQL語言完成如下的操作(請給出SQL語句及相應執行結果的截圖)

1)將學生表中年齡的資料型別改為整型。

Alter table student alter column sage int;

 

2)向SC表中增加成績(Grade)列,其資料型別為短整型。

Alter table SC add Grade smallint;

 

3SSMS方式向三個表中填充資料(參照課本P79頁)(此題可不用給出結果圖)。


4)對Student表按學號降序建唯一索引。

Create unique index stu_index on student( sno  desc);

 

5)對Student表按學生姓名列建聚集索引,觀察能否建立成功,如未成功請分析原因。

Create clustered index sname_index on student (sname) ;

 

原因分析:

聚集索引是通過設定主碼來完成的,每個表的主碼都是聚集索引,一個表只能有一個聚集索引,非聚集索引可以有多個。因此無法重複建立聚焦索引。

6)刪除第(4)題建的索引。

Drop index stu_index on student;

 

3、用SQL語句完成如下對三個表的查詢(請給出SQL語句及執行結果的截圖):

1)查詢所有課程的課程號和課程名。

select Cno,Cname

from Course

 

(2)查詢全體學生的記錄。

select *

from student

 

(3)查詢學生表中的所有的系。

select Sdept

from student

 

(4)查詢全體學生的姓名、出生年份和所在的院系,併為出生年份和所在院系兩列分別起別名為sbirth,department,並將系名全部轉換成小寫字母。

select Sname,2018-Sage as sbirth,

Sdept as department,Lower(Sdept) departments

from student

 

(5)求數學系學生的學號和姓名。

select Sno,Sname,Sdept

from Student

where Sdept='MA'

 

(6)查詢所有考試成績在80分以下的學生學號、課程號。

select Sno,Cno

from SC

where grade<=80

 

(7)查詢學分在2~7之間的課程資訊。

select Ccredit,Cname

from Course

where Ccredit between 2 and 7

 

(8)查詢課程名為資料庫課程的課程號和學分。

select Cno,Ccredit

from Course

where Cname='資料庫'

 

(9)查詢沒有先修課的課程號、課程名及學分。

select Cno,Ccredit,Cname

from Course

where Cpno is NULL

 

(10)查詢資訊系學生性別為男且年齡小於20歲的學生姓名。

select Sname

from Student

where Ssex='' and Sage<20 and Sdept='CS'

 

(11)查詢選修了3號課程的學生的學號及成績,並要求對查詢結果按成績的降序排列,如果成績相同按學號的升序排列。

select Sno,Grade

from SC

where Cno='3'

Order by Grade desc,Sno

 

(12)查詢課程的總數。

select COUNT(*) as 課程總數

from course

 

(13)查詢選修2號課程的學生平均成績和最高成績,並分別為平均成績和最高成績起別名為AVG,MAX。

select AVG(grade) as avg,MAX(Grade) as max

from sc

where cno='2'

 

(14)查詢每個學生的選課門數,要求輸出學生學號及選課的門數。

select Sno,COUNT(Cno) as 總門數

from sc

group by Sno

 

(15)查詢選修了2門及以上的課程的學生學號。

select Sno

from sc

group by Sno

having COUNT(*)>2


實驗總結:

1、掌握基本表的定義、結構的修改及刪除;

2、掌握索引的建立及刪除;

3、掌握Select語句的基本語法;

4、掌握Group By子句的作用和使用方法;

5、掌握聚集函式的使用;

6、掌握Order By子句的作用和使用方法;