实验三mysql查询_实验三 数据库的查询实验
一、 實驗?zāi)康暮鸵?/p>
(1)掌握SQL Server查詢分析器的使用方法,加深對SQL和Transact-SQL語言的查詢語句的理解。
(2)熟練掌握簡單表的數(shù)據(jù)查詢、數(shù)據(jù)排序和數(shù)據(jù)連接查詢的操作方法。
(3)熟練掌握數(shù)據(jù)查詢中的分組、統(tǒng)計、計算和組合的操作方法。
二、 實驗內(nèi)容和原理
1. 簡單查詢操作
該實驗包括投影、選擇條件表達、數(shù)據(jù)排序、使用臨時表等。
2. 連接查詢操作
該實驗包括等值連接、自然連接、求笛卡爾積、一般連接、外連接、內(nèi)連接、左連接、右連接和自連接等。
3. 在SQL Server查詢分析器中使用IN、比較符、ANY或ALL和EXISTS操作符進行嵌套查詢操作。
4. 分組查詢實驗。該實驗包括分組條件表達、選擇組條件的表達方法。
5. 使用函數(shù)查詢的實驗。該實驗包括統(tǒng)計函數(shù)和分組統(tǒng)計函數(shù)的使用方法。
6. 組合查詢實驗。
7. 計算和分組計算查詢的實驗。
三、 實驗環(huán)境
硬件:計算機
軟件:Windows 2000和SQL Server 2000
四、 算法描述及實驗步驟
1. 基本操作實驗
用Transact-SQL語句表示下列操作.在學(xué)生-課程庫中實現(xiàn)其數(shù)據(jù)查詢操作:
(1)求數(shù)學(xué)系學(xué)生的學(xué)號和姓名。
select sno,sname
from student
where sdept ='MA'
(2)求選修了高等數(shù)學(xué)的學(xué)生學(xué)號、姓名和成績。
select sc.sno,sname,grade
from student,sc,course
where sc.cno=course.cno and cname='數(shù)學(xué)' and student.sno
=sc.sno
(3)求選修C1課程的學(xué)生學(xué)號和成績,并要求對查詢結(jié)果按成績降序排列,如果成績相同則按學(xué)號升序排列。
select sno,grade
from sc
where cno ='1'
order by grade desc,sno asc
(4)獲選修課程C1且成績在80~90分之間的學(xué)生學(xué)號、姓名及成績,并將成績乘以系數(shù)0.8輸出。
select student.sno,sname,grade*0.8
"grade*0.8"
from sc,student
where cno ='1'and grade between 80 and 90 and student.sno
=sc.sno
(5)求數(shù)學(xué)系或計算機系姓張的學(xué)生的信息。
select *
from student
where (sdept ='CS' or sdept ='MA') and sname like'張%'
(6)求缺少了成績的學(xué)生的學(xué)號和課程號。
select sno,cno
from sc
where grade is null
(7)求C1課程的成績高于張三的學(xué)生學(xué)號和成績。
select sno,cno
from sc
where cno ='1'and
grade >
(select grade
from sc,student
where sname ='張三' and student.sno =sc.sno and cno ='1')
(8)求其他系中比計算機系學(xué)生年齡都小的學(xué)生。
select *
from student
where sdept !='cs' and sage <
(
select min(sage)
from student
where sdept ='cs'
)
(9)查詢選修了全部課程的學(xué)生的姓名。
select Sname
from student
where Sno IN
(select Sno from SC
group by Sno
having count(*) = (select count(*) from course )
)
(10)求至少選修了學(xué)生“張三”所選修的全部課程的學(xué)生學(xué)號和姓名。
select distinct scx.sno,sname
from sc scx,student
where scx.sno =student.sno and not exists
(select *
from sc scy,student
where sname ='張三'and scy.sno =student.sno and not exists
(select *
from sc scz
where scx.sno =scz.sno and scy.cno =scz.cno))
(11)查詢每一門課的間接先行課(即先行課的先行課)。
select c1.cno,c2.cpno
from course c1,course c2
where c1.cpno =c2.cno
在圖書-圖書庫中實現(xiàn)其查詢操作。
(1)查找這樣的圖書類別:要求類別中最高的圖書定價不低于全部按類別分組的圖書平均定價的2倍。
select 類別
from 圖書
group by 類別
having max(定價)>=all
(select avg(定價)*2
from 圖書
group by 類別)
(2)求機械工業(yè)出版社出版的各類圖書的平均定價,用GROUP BY表示。
select distinct 類別, avg(定價) '平均定價'
from 圖書
where 出版社 ='機械工業(yè)出版社'
group by 類別
(3)列出計算機類圖書的書號、名稱及價格,最后求出冊數(shù)和總價格。
SELECT 書號,書名,定價
FROM 圖書
WHERE 類別='計算機' ORDER BY 書號 ASC
COMPUTE count (書號),SUM(定價)
(4)列出計算機類圖書的書號、名稱及價格,并求出各出版社這類書的總價格,最后求出全部冊數(shù)和總價格。
select 書號,書名,定價
from 圖書
where 類別='計算機'
order by 出版社
compute sum(定價) by 出版社
(5)查詢計算機類和機械工業(yè)出版社出版的圖書。
select 書號,書名
from 圖書
where 類別='計算機'and 出版社 ='機械工業(yè)出版社'
(6)在圖書-借閱庫中實現(xiàn)其查詢操作:將計算機類的書存入永久的計算機圖書表中,將借書日期在1999年以前的借閱記錄存入臨時的超期借閱表。
SELECT *
INTO 計算機圖書
FROM 圖書
WHERE 類別='計算機'
GO
SELECT *
INTO #超期借閱
FROM 借閱
WHERE 借閱日期< '1999-01-01'
GO
(1)按表1的格式,建立職工部門庫和職工表、部門,并向表中輸入數(shù)據(jù)。
表1 職工和部門表數(shù)據(jù)
職工表 部門表
職工號
姓名
性別
年齡
部門
1010
李勇
男
20
11
1011
劉晨
女
19
1012
王敏
女
22
12
1013
張立
男
21
13
部門號
部門名稱
電話
11
生產(chǎn)科
566
12
計劃科
578
13
一車間
467
14
科研所
(2)用Transact-SQL語句表示職工和部門之間的內(nèi)連接、左外部連接和右外部連接,在職工部門庫中實現(xiàn)其數(shù)據(jù)內(nèi)連接和各種外查詢操作。
1.等值連接
select 職工表.*,部門表.*
from 職工表,部門表
where 職工表.部門=部門表.部門號
2.自然連接
select 職工號,姓名,性別,年齡,部門,部門名稱
from 職工表,部門表
where 職工表.部門=部門表.部門號
3.左外連接
select 職工號,姓名,性別,年齡,部門,部門名稱
from 職工表
left outer join 部門表 on(職工表.部門=部門表.部門號)
4.右外連接
select 職工號,姓名,性別,年齡,部門,部門名稱
from 職工表
right outer join 部門表 on(職工表.部門=部門表.部門號)
五、 調(diào)試過程
1、 在查詢求數(shù)學(xué)系或計算機系姓張的學(xué)生的信息時,出現(xiàn)如下錯誤提示:
代碼如下:
select *
from student
where sdept ='CS' or sdept ='MA' and sname like'張%'
分析下,明白了代碼應(yīng)該改為如下:
select *
from student
where (sdept ='CS' or sdept ='MA') and sname like'張%'
2、 在查詢求缺少了成績的學(xué)生的學(xué)號和課程號時,出現(xiàn)如下錯誤提示:
代碼如下:
select sno,cno
from sc
where grade = null
分析下原因,原來是 =和is的差別,改代碼如下:
select sno,cno
from sc
where grade is null
六、 實驗結(jié)果
1. 基本操作實驗
用Transact-SQL語句表示下列操作.
在學(xué)生-課程庫中實現(xiàn)其數(shù)據(jù)查詢操作:
(1)求數(shù)學(xué)系學(xué)生的學(xué)號和姓名。
(2)求選修了高等數(shù)學(xué)的學(xué)生學(xué)號、姓名和成績。
(3)求選修C1課程的學(xué)生學(xué)號和成績,并要求對查詢結(jié)果按成績降序排列,如果成績相同則按學(xué)號升序排列。
(4)獲選修課程C1且成績在80~90分之間的學(xué)生學(xué)號、姓名及成績,并將成績乘以系數(shù)0.8輸出。
(5)求數(shù)學(xué)系或計算機系姓張的學(xué)生的信息。
(6)求缺少了成績的學(xué)生的學(xué)號和課程號。
(7)求C1課程的成績高于張三的學(xué)生學(xué)號和成績。
(8)求其他系中比計算機系學(xué)生年齡都小的學(xué)生。
(9)查詢選修了全部課程的學(xué)生的姓名。
(10)求至少選修了學(xué)生“張三”所選修的全部課程的學(xué)生學(xué)號和姓名。
(11)查詢每一門課的間接先行課(即先行課的先行課)。
在圖書-圖書庫中實現(xiàn)其查詢操作。
(1)查找這樣的圖書類別:要求類別中最高的圖書定價不低于全部按類別分組的圖書平均定價的2倍。
(2)求機械工業(yè)出版社出版的各類圖書的平均定價,用GROUP BY表示。
(3)列出計算機類圖書的書號、名稱及價格,最后求出冊數(shù)和總價格。
(4)列出計算機類圖書的書號、名稱及價格,并求出各出版社這類書的總價格,最后求出全部冊數(shù)和總價格。
(5)查詢計算機類和機械工業(yè)出版社出版的圖書。
(6)在圖書-借閱庫中實現(xiàn)其查詢操作:將計算機類的書存入永久的計算機圖書表中,將借書日期在1999年以前的借閱記錄存入臨時的超期借閱表。
2. 提高操作實驗
(1)按表1的格式,建立職工部門庫和職工表、部門,并向表中輸入數(shù)據(jù)。
(2)用Transact-SQL語句表示職工和部門之間的內(nèi)連接、左外部連接和右外部連接,在職工部門庫中實現(xiàn)其數(shù)據(jù)內(nèi)連接和各種外查詢操作。
1.等值連接
2.自然連接
3.左外連接
4.右外連接
七、 總結(jié)
這次數(shù)據(jù)庫實驗主要是考察我們對簡單查詢和連接查詢的掌握。雖然在理論學(xué)習(xí)的時候覺得很簡單,憑空的去想想結(jié)果是什么樣子的,但是不能夠?qū)嵺`。從這次實驗中,讓我們將理論知識應(yīng)用到實踐中來,通過編寫一些命令語句,結(jié)果就能呈現(xiàn)在我們眼前。
這次實驗中要寫的語句雖然很多,但是當我把它們一個一個的寫出來,并運行成功的時候,覺得很有成就感。不過因為自己的粗心還有對一些語句書寫的不夠熟練,做實驗用了很長時間。在這很長時間中,增加了我們對各種情況下查找命令語句的熟悉程度,使實驗報告順利的完成,覺得非常值得。
總結(jié)
以上是生活随笔為你收集整理的实验三mysql查询_实验三 数据库的查询实验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: remoting 最简单的一个例子
- 下一篇: linux cmake编译源码,linu