對學生數據庫進行查詢等操作
學生數據庫中有3張數據表,關系模型如下:
1、學生信息
字段名 | 數據類型 | 備注 |
---|---|---|
學號 | char(10) | primary key |
姓名 | nvarchar(10) | |
性別 | nchar(2) | |
出生日期 | date | |
專業 | nvarchar(10) |
2、課程信息
字段名 | 數據類型 | 備注 |
---|---|---|
課程序號 | char(10) | primary key |
課程名稱 | nvarchar(20) | |
開課學期 | char(1) | |
學分 | smallint |
3、成績信息
字段名 | 數據類型 | 備注 |
---|---|---|
學號 | char(10) | primary key, foreign key |
課程序號 | char(10) | primary key, foreign key |
成績 | tinyint |
查詢“計算機科學與技術”專業的學生人數,顯示字段名為學生人數
select count(*) 學生人數 from 學生信息
where 專業 = "計算機科學與技術"
group by 專業
查詢與“劉晨”在同一個專業學習的學生,顯示學號、姓名。
注意:結果中不包括劉晨
select 學號,姓名 from 學生信息
where 專業 in (select 專業 from 學生信息 where 姓名 = "劉晨") and 姓名!="劉晨"
查詢選修了課程名為“操作系統”的學生,顯示學號,姓名
select a.學號,a.姓名 from 學生信息 a
inner join 成績信息 b on a.學號 = b.學號
inner join 課程信息 c on b.課程序號 = c.課程序號
where c.課程名稱 = "操作系統"
建立一個計算機科學與技術專業,且年齡不大於19歲的學生的視圖,字段包括學生學號,姓名,出生日期,視圖名字為 學生年齡視圖
提示1 :如何利用出生日期結合系統函數計算年齡
DATEDIFF(datepart,startdate,enddate)
返回兩個指定日期的日期和時間邊界數(差值),datepart 規定了用日期的哪一部分(year、month、day、week、hour等)來計算差額。
提示2 :獲得當前時間GETDATE()
create view 學生年齡視圖 as
select 學號,姓名,出生日期 from 學生信息
where DATEDIFF(yy,出生日期,GETDATE())<=19 and 專業 = "計算機科學與技術"
通過剛建立的 學生年齡視圖,查詢計算機科學與技術專業年齡不大於19歲的學生學號,姓名
select 學號,姓名 from 學生年齡視圖
建立一個既選修了課程1又選修了課程2的學生視圖,名為 學生課程視圖 ,包含字段學號、姓名、專業
create view 學生課程視圖 as
select a.學號,a.姓名,a.專業 from 學生信息 a
inner join 成績信息 b on a.學號 = b.學號
where b.課程序號 = "1"
union
select a.學號,a.姓名,a.專業 from 學生信息 a
inner join 成績信息 b on a.學號 = b.學號
where b.課程序號 = "2"
通過剛建立的學生課程視圖,查詢學生學號,姓名
select 學號,姓名 from 學生課程視圖