《数据库原理与应用》(第三版) 第 6 章 数据操作语句 基础 习题参考答案
1.簡單說明SELECT語句中,FROM、WHERE、GROUP BY、HAVING子句的作用。
答:FROM子句指定數據來自的表,WHERE子句指定行數據的篩選條件,GROUP BY子句指定用于分組的列,HAVING子句用于對分組后的統計值進行篩選。
2.簡單說明COUNT()與COUNT(列名)的區別。
答:COUNT()用于統計行的個數,并且不忽略NULL;COUNT(列名)用于統計該列中非空值個數,這個函數會去掉NULL。
3.在聚合函數中,不忽略空值的函數是哪個?
答:COUNT(*)
4.哪些數據類型的列可以使用SUM(列名)和AVG(列名)函數?
答:數值類型的列
5.外連接和內連接的區別是什么?
答:外連接結果會包含連接中一個表的全部數據,內連接結果是只包含兩個表中滿足連接條件的數據。
6.TOP子句的作用是什么?
答:限定取查詢結果中的前若干行數據。
7.DISTINCT子句的作用是去掉表中的重復行數據,這個說法對嗎?
答:應該是去掉查詢結果中的重復行數據。
8.簡單說明嵌套子查詢的執行順序。
答:嵌套子查詢是先執行子查詢,然后在根據子查詢結果執行外層查詢。
上機練習
1.查詢學生選課表中的全部數據。
答:select * from SC
2.查詢計算機系的學生姓名、年齡。
答:select sname, sage from student where sdept = ‘計算機系’
3.查詢成績在70~80分之間的學生學號、課程號和成績。
答:select sno,cno,grade from sc
where grade between 70 and 80
4.查詢計算機系年齡在18~20且性別為“男”的學生姓名、年齡。
答:select sname,sage from student
where sdept = ‘計算機系’
and sage between 18 and 20
and ssex = ‘男’
5.查詢“c01”課程最高分。
答:select max(grade) from sc where cno = ‘C01’
6.查詢計算機系學生的最大年齡和最小年齡。
答:select max(sage) as max_age, min(sage) as min_age
from student
where sdept = ‘計算機系’
7.統計每個系的學生人數。
答:select sdept, count(*) 學生人數 from student
group by sdept
8.統計每個學生的選課門數和考試總成績,并按選課門數升序顯示結果(不包括沒選課的學生)。
答:select sno,count() 選課門數, sum(grade) 考試總成績
from sc
group by sno
order by count() asc
9.查詢總成績超過200分的學生,列出學號、總成績。
答:select sno,sum(grade) 總成績 from sc
group by sno
having sum(grade) > 200
10.查詢選了“c02”課程的學生姓名和所在系。
答:select sname,sdept
from student s join sc on s.sno = sc.sno
where cno = ‘C02’
11.查詢成績80分以上的學生姓名、課程號和成績,并按成績降序排列結果。
答:select sname,cno,grade
from student s join sc on s.sno = sc.sno
where grade > 80 order by grade desc
12.查詢哪些學生沒有選課,要求列出學號、姓名和所在系。
答:select s.sno, sname, sdept
from student s left join sc on s.sno = sc.sno
Where sc.sno is null
13.統計每門課程的選課人數,列出課程號和選課人數。( 包括沒人選的課程)
答:select c.cno,count(sc.cno) 選課人數
from course c left join sc on c.cno = sc.cno
Group by c.cno
14.查詢與VB在同一學期開設的課程的課程名和開課學期。
答:select c2.cname,c2.semester
from course c1 join course c2 on c1.semester = c2.semester
Where c1.cname = ‘VB’ and c1.cname != ‘VB’
15.查詢與李勇年齡相同的學生的姓名、所在系和年齡。
答:select S2.Sname,S2.Sdept, S2.sage
from student s1 join student s2 on s1.sage = s2.sage
Where s1.sname = ‘李勇’ and s2.sname != ‘李勇’
16.查詢計算機系年齡最小的2名學生的姓名和年齡。
答:select top 2 with ties sname, sage
from student
Where sdept = ‘計算機系’
Order by sage asc
17.查詢VB成績最高的前2名學生的姓名、所在系和VB成績,包括并列的情況。
答:select top 2 with ties sname, sdept, grade
from student s join sc on s.sno = sc.sno
Join course c on c.cno = sc.cno
Where cname = ‘VB’
Order by grade desc
18.查詢選課門數最多的前2名學生的學號和選課門數,包括并列的情況。
答:select top 2 with ties sno, count() 選課門數
from sc
Group by sno
Order by count() desc
19.查詢學生人數最多的系,列出系名和人數。
答:select top 1 with ties sdept, count() 人數
from student
Group by sdept
Order by count() desc
20.用子查詢實現如下查詢:
(1) 查詢選修了“c01”號課程的學生姓名和所在系。
答:select sname, sdept from student where sno in(
select sno from sc where cno = ’ C01’)
(2) 查詢數學系成績80分以上的學生學號、姓名、課程號和成績。
答:select sno,sname,cno,grade
from student s join sc on s.sno = sc.sno
where s.sno in(
select sno from sc where grade > 80)
and sdept = ‘數學系’
(3) 查詢計算機系考試成績最高的學生姓名。
答:select sname from student
where sno in(
select top 1 sno from sc join student s on s.sno = sc.sno
where sdept = ‘計算機系’
Order by grade desc )
(4) 查詢數據結構考試成績最高的學生姓名、所在系、性別和成績。
答:select sname,sdept,ssex,grade
from student s join sc on s.sno = sc.sno
where s.sno in(
Select top 1 sno from sc join course c on c.cno = sc.cno
Where cname = ‘數據結構’
Order by grade desc )
21.查詢沒選VB課程的學生姓名和所在系。
答:select sname,sdept from student
Where sno not in (
Select sno from sc join course c on c.cno = sc.cno
Where cname = ‘VB’ )
22.查詢計算機系沒選課的學生的姓名和性別。
答:select sname,ssex from student
Where sdept = ‘計算機系’
And sno not in (
Select sno from sc )
23.查詢計算機系考試平均成績最低的學生的姓名及所選的課程名。
答:select sname,cname from student s join sc on s.sno = sc.sno
Join course c on c.cno = sc.cno
where s.sno in (
Select top 1 sno from sc
Where sdept = ‘計算機系’
Group by sno
Order by avg(grade) asc )
24.查詢1~5學期中,選課人數最少的課程的課程名、開課學期和學分。
答:select cname,semester,credit from course
Where semester between 1 and 5
And cno in (
Select top 1 cno from sc
Group by cno
Order by count(*) desc )
25.查詢計算機系每個學生的考試情況,列出姓名、課程名和考試成績,并將查詢結果保存到一個新表中。新表名為:Computer_Dept
答:select sname,cname,grade into Computer_Dept
from student s join sc on s.sno = sc.sno
Join course c on c.cno = sc.cno
Where sdept = ‘計算機系’
26.創建一個新表,表名為test_t,其結構為:(COL1, COL 2, COL 3),其中:
COL1:整型,允許空值。
COL2:普通編碼字符型,長度為10 ,不允許空值。
COL3:普通編碼字符型,長度為10 ,允許空值。
試寫出按行插入如下數據的語句(空白處表示空值)。
COL1 COL2 COL3
B1
1 B2 C2
2 B3
答:create table test_t(
Col1 int,
Col2 char(10) not null,
Col3 char(10)
)
Insert into test_t values(null,‘B1’,null)
Insert into test_t values(1,‘B2’,‘C2’)
Insert into test_t values(2,‘B3’’,null)
27.刪除考試成績低于50分的學生的選課記錄。
答:delete from sc where grade < 50
28.刪除沒有人選的課程。
答:delete from course where cno not in(
Select cno from sc )
29.刪除計算機系VB成績不及格學生的VB選課記錄。
答:delete from sc
From student s join sc on s.sno = sc.cno
Join course c on c.cno = sc.cno
where sdept = ‘計算機系’ and cname = ‘VB’
and grade < 60
30.刪除VB考試成績最低的學生的VB選課記錄。
答:delete from sc
From course c join sc on c.cno = sc.cno
Where cname = ‘VB’
And grade = (
Select min(grade) from sc
Join course c on c.cno = sc.cno
Where cname = ‘VB’)
31.將第2學期開設的所有課程的學分增加2分。
答:update course set credit = credit + 2
Where semester = 2
32.將VB課程的學分改為3分。
答:update course set credit = 3
Where cname = ‘VB’
33.將計算機系學生的年齡增加1歲。
答:update student set sage = sage + 1
where sdept = ‘計算機系’
34.將信息系學生的“計算機文化學”課程的考試成績加5分。
答:update sc set grade = grade + 5
From student s join sc on s.sno = sc.sno
Join course c on c.cno = sc.cno
Where sdept = ‘信息系’
And cname = ‘計算機文化學’
35.將選課人數最少的課程的學分降低1分。
答:update course set credit = credit - 1
Where cno in (
Select top 1 cno from sc
Group by cno
Order by count(*) asc )
總結
以上是生活随笔為你收集整理的《数据库原理与应用》(第三版) 第 6 章 数据操作语句 基础 习题参考答案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《数据库原理与应用》(第三版) 第 5
- 下一篇: 《数据库原理与应用》(第三版) 第7章