SQL *** 作语句练习(二)

SQL *** 作语句练习(二),第1张

文章目录 考察数据库Student表SC表Course表 1.查询总成绩超过200分的学生,要求列出学号、总成绩。2.查询选修了“c002” 号课程的学生的姓名和所在系。3.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果。4.查询哪些学生没有选课,要求列出学号、姓名和所在系。5.查询与Java在同一学期开设的课程的课程名和开课学期。6.查询与李勇年龄相同的学生的姓名、所在系和年龄。7.用子查询实现如下查询:(1)查询选修了“c001” 号课程的学生的姓名和所在系。(2)查询数学系成绩80分以上的学生的学号、姓名、课程号和成绩。(3)查询计算机系考试成绩最高的学生的姓名。(4)查询数据结构考试成绩最高的学生的姓名、所在系、性别和成绩。 8.查询没有选修Java课程的学生的姓名和所在系。9.查询计算机系没有选课的学生的姓名和性别。10.创建一个新表, 表名为test_t,其结构为(COL1, COL2, COL3),其中:11.删除考试成绩低于50分的学生的选课记录。12.删除没有人选的课程记录。13.删除计算机系Java成绩不及格学生的Java选课记录。14.将第2学期开设的所有课程的学分增加2分。15.将Java课程的学分改为3分。16.将计算机系学生的年龄增加1岁。17.将信息系学生的“计算机文化学”课程的考试成绩加5分。18.查询每个系年龄大于等于20的学生人数,并将结果保存到一个新永久表Dept_Age中。19.查询计算机系每个学生的Java考试情况,列出学号、姓名、成绩和成绩情况,其中成绩情况的显示规则为:如果成绩大于等于90,则成绩情况为“好”;如果成绩在80-89,则成绩情况为“较好”;如果成绩在70-79,则成绩情况为“一般”;如果成绩在60-69,则成绩情况为“较差”;如果成绩小于60,则成绩情况为“差”。20.统计每个学生的选课门数(包括没有选课的学生),列出学号、选课门数和选课情况,其中选课情况显示规则为:如果选课门数大于等于6门,则选课情况为“多”;如果选课门数超过在3-5门,则选课情况为“般”:如果选课门数在1-2门, 则选课情况为“偏少”;如果没有选课,则选课情况为“未选课”。21.修改全部课程的学分,修改规则如下:如果是第1-2学期开设的课程,则学分增加5分;如果是第3-4学期开设的课程,则学分增加3分:如果是第5-6学期开设的课程,则学分增加1分;对其他学期开设的课程,学分不变。22.查询“李勇”和“王大力”所选的全部课程,列出课程名、开课学期和学分,不包括重复的结果。23.查询在第3学期开设的课程中,“李勇”选了但“王大力”没选的课程,列出课程名和学分。24.查询在学分大于3分的课程中,“李勇”和“王大力”所选的相同课程,列出课程名和学分。

考察

SQL语句的查询SELECT、插入INSERT INTO、修改UPDATE、删除DELETE、子查询、建表语句、TOP字句等等

数据库 Student表

SC表

Course表

1.查询总成绩超过200分的学生,要求列出学号、总成绩。

(1)代码实现:

SELECT Student.Sno, SUM(Grade) AS '总成绩' FROM Student
	JOIN SC ON SC.Sno = Student.Sno
	GROUP BY Student.Sno
	HAVING SUM(Grade) >200

(2)运行效果:

2.查询选修了“c002” 号课程的学生的姓名和所在系。

(1)代码实现:
[1]方法一:子查询

SELECT Student.Sno, Student.Sdept FROM Student
	JOIN SC ON SC.Sno = Student.Sno
	WHERE SC.Cno IN (
		SELECT Cno FROM SC
		WHERE SC.Cno = 'c002'
	)

[2]方法一:子多表连接

SELECT Student.Sno, Student.Sdept FROM Student
	JOIN SC ON SC.Sno = Student.Sno
	WHERE SC.Cno = 'c002'

(2)运行效果:

3.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果。

(1)代码实现:

SELECT Student.Sname, SC.Cno, SC.Grade FROM SC
	JOIN Student ON Student.Sno = SC.Sno
	WHERE SC.Grade > 80
	ORDER BY SC.Grade DESC

(2)运行效果:

4.查询哪些学生没有选课,要求列出学号、姓名和所在系。

(1)代码实现:

SELECT Student.Sno, Student.Sname, Student.Sdept FROM Student
	LEFT JOIN SC ON SC.Sno = Student.Sno
	WHERE SC.Cno IS NULL

(2)运行效果:

5.查询与Java在同一学期开设的课程的课程名和开课学期。

(1)代码实现:

SELECT Cname, Semester FROM Course
	WHERE Semester IN (
		SELECT Semester FROM Course WHERE Cname = 'Java')
	AND Cname != 'Java'

(2)运行效果:

6.查询与李勇年龄相同的学生的姓名、所在系和年龄。

(1)代码实现:

SELECT Sname, Sdept, Sage FROM Student
	WHERE Sage IN (
		SELECT Sage FROM Student WHERE Sname = '李勇')
	AND Sname != '李勇'

(2)运行效果:

7.用子查询实现如下查询: (1)查询选修了“c001” 号课程的学生的姓名和所在系。

[1]代码实现:

SELECT DISTINCT Student.Sname, Student.Sdept FROM Student
	JOIN SC ON SC.Sno = Student.Sno
	WHERE SC.Sno IN(
		SELECT Sno FROM SC WHERE Cno = 'c001')

[2]运行效果:

(2)查询数学系成绩80分以上的学生的学号、姓名、课程号和成绩。

[1]代码实现:

SELECT Student.Sno, Student.Sname, SC.Cno, SC.Grade FROM Student
	JOIN SC ON SC.Sno = Student.Sno
	WHERE  SC.Sno IN (
		SELECT Sno FROM Student WHERE Sdept = '数学系')
	AND SC.Grade > 80

[2]运行效果:

(3)查询计算机系考试成绩最高的学生的姓名。

[1]代码实现:

SELECT  TOP 1 Student.Sname FROM SC
	JOIN Student ON SC.Sno = Student.Sno
	WHERE SC.Sno IN (
		SELECT Sno FROM Student WHERE Sdept = '计算机系')
	ORDER BY SC.Grade DESC

[2]运行效果:

(4)查询数据结构考试成绩最高的学生的姓名、所在系、性别和成绩。

[1]代码实现:

SELECT  TOP 1 Student.Sname, Student.Sdept, SC.Grade FROM SC
	JOIN Student ON SC.Sno = Student.Sno
	JOIN Course ON SC.Cno = Course.Cno
	WHERE SC.Cno IN (
		SELECT Cno FROM Course WHERE Cname = '数据结构')
	ORDER BY SC.Grade DESC

[2]运行效果:

8.查询没有选修Java课程的学生的姓名和所在系。

(1)代码实现:

SELECT DISTINCT Student.Sno, Student.Sdept FROM Student 
LEFT JOIN SC ON SC.Sno = Student.Sno
WHERE SC.Cno IS NULL
OR SC.Sno NOT IN (SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname = 'Java'))

(2)运行效果:

9.查询计算机系没有选课的学生的姓名和性别。

(1)代码实现:

SELECT DISTINCT Student.Sname, Student.Ssex FROM Student 
LEFT JOIN SC ON SC.Sno = Student.Sno
WHERE SC.Cno IS NULL
AND Student.Sdept = '计算机系'

(2)运行效果:

10.创建一个新表, 表名为test_t,其结构为(COL1, COL2, COL3),其中:

COL1:整型,允许空值。
COL2:字符型,长度为10,不允许空值。
COL3:字符型,长度为10,允许空值。
试写出按行插人如下数据的语句(空白处表示空值)

COL1COL2COL3
B1
1B2C2
2B3

(1)代码实现:

create table test_t(
	COL1 int null,
	COL2 varchar(10) not null,
	COL3 varchar(10) null
);

insert into test_t values (null, 'B1', null),(1, 'B2', 'C2'), (2, 'B3', null);

select * from test_t

(2)运行效果:

11.删除考试成绩低于50分的学生的选课记录。

(1)代码实现:

DELETE FROM SC WHERE Grade < 50
DELETE FROM SC WHERE Grade IS NULL
SELECT * FROM SC

(2)运行效果:

12.删除没有人选的课程记录。

(1)代码实现:

DELETE FROM Course WHERE Cno NOT IN (SELECT Cno FROM SC)

SELECT * FROM Course

(2)运行效果:

13.删除计算机系Java成绩不及格学生的Java选课记录。

(1)代码实现:

DELETE FROM SC
WHERE SC.Sno IN(SELECT Sno FROM StudeNt WHERE Sdept = '计算机系')
AND SC.Cno IN(SELECT Cno FROM Course WHERE Cname = 'Java')

SELECT * FROM SC

(2)运行效果:

14.将第2学期开设的所有课程的学分增加2分。

(1)代码实现:

UPDATE Course SET  Credit = Credit + 2 WHERE Semester = 2

SELECT * FROM Course

(2)运行效果:

15.将Java课程的学分改为3分。

(1)代码实现:

UPDATE Course SET Credit = 3 WHERE Cname = 'Java'

SELECT * FROM Course

(2)运行效果:

16.将计算机系学生的年龄增加1岁。

(1)代码实现:

UPDATE Student SET Sage = Sage + 1 WHERE Sdept = '计算机系'

SELECT * FROM Student

(2)运行效果:

17.将信息系学生的“计算机文化学”课程的考试成绩加5分。

(1)代码实现:

UPDATE SC SET Grade = Grade + 5
WHERE SC.Sno IN(SELECT Sno FROM Student WHERE Sdept = '信息系')
AND SC.Cno IN (SELECT Cno FROM Course WHERE Cname = '计算机文化学')

SELECT * FROM SC

(2)运行效果:

18.查询每个系年龄大于等于20的学生人数,并将结果保存到一个新永久表Dept_Age中。

(1)代码实现:

SELECT Sdept, COUNT(*) AS '人数' INTO Dept_Age
FROM Student WHERE Sage >= 20
GROUP BY Sdept

SELECT * FROM Dept_Age

(2)运行效果:

19.查询计算机系每个学生的Java考试情况,列出学号、姓名、成绩和成绩情况,其中成绩情况的显示规则为:如果成绩大于等于90,则成绩情况为“好”;如果成绩在80-89,则成绩情况为“较好”;如果成绩在70-79,则成绩情况为“一般”;如果成绩在60-69,则成绩情况为“较差”;如果成绩小于60,则成绩情况为“差”。

(1)代码实现:

SELECT Student.Sno AS '学号', Student.Sname AS '姓名', SC.Grade AS '成绩',
	CASE
	WHEN SC.Grade >= 90 THEN '好'
	WHEN SC.Grade BETWEEN 80 AND 89 THEN '较好'
	WHEN SC.Grade BETWEEN 70 AND 79 THEN '一般'
	WHEN SC.Grade BETWEEN 60 AND 69  THEN '较差'
	ELSE '差'
	END AS '成绩情况'
FROM SC
JOIN Student ON SC.Sno = Student.Sno
JOIN Course ON SC.Cno = Course.Cno
WHERE Student.Sdept = '计算机系' AND Course.Cname = 'Java'

(2)运行效果:

20.统计每个学生的选课门数(包括没有选课的学生),列出学号、选课门数和选课情况,其中选课情况显示规则为:如果选课门数大于等于6门,则选课情况为“多”;如果选课门数超过在3-5门,则选课情况为“般”:如果选课门数在1-2门, 则选课情况为“偏少”;如果没有选课,则选课情况为“未选课”。

(1)代码实现:

SELECT Student.Sno AS '学号', COUNT(SC.Cno) AS '选课门数',
	CASE
	WHEN COUNT(SC.Cno) >= 6 THEN '多'
	WHEN COUNT(SC.Cno) BETWEEN 3 AND 5 THEN '一般'
	WHEN COUNT(SC.Cno) BETWEEN 1 AND 2 THEN '偏少'
	WHEn COUNT(SC.Cno) = 0  THEN '未选课'
	END AS '选课情况'
FROM Student
LEFT JOIN SC ON SC.Sno = Student.Sno
GROUP BY Student.Sno

(2)运行效果:

21.修改全部课程的学分,修改规则如下:如果是第1-2学期开设的课程,则学分增加5分;如果是第3-4学期开设的课程,则学分增加3分:如果是第5-6学期开设的课程,则学分增加1分;对其他学期开设的课程,学分不变。

(1)代码实现:

UPDATE Course SET Credit = Credit +
	CASE 
	WHEN Semester BETWEEN 1 AND 2 THEN 5
	WHEN Semester BETWEEN 3 AND 4 THEN  3
	WHEN Semester BETWEEN 5 AND 6 THEN  1
	ELSE 0
	END

SELECT * FROM Course

(2)运行效果:

22.查询“李勇”和“王大力”所选的全部课程,列出课程名、开课学期和学分,不包括重复的结果。

(1)代码实现:

SELECT DISTINCT Student.Sname, SC.Cno, Course.Semester, Course.Credit
FROM SC 
JOIN Student ON Student.Sno = SC.Sno
JOIN Course ON Course.Cno =  SC.Cno
WHERE Student.Sname = '李勇' OR Student.Sname = '王大力'

(2)运行效果:

23.查询在第3学期开设的课程中,“李勇”选了但“王大力”没选的课程,列出课程名和学分。

(1)代码实现:

SELECT DISTINCT Course.Cname, Course.Credit
FROM Course,Student
WHERE Cno IN(SELECT Cno FROM SC JOIN Student ON SC.Sno = Student.Sno WHERE Student.Sname = '李勇' EXCEPT SELECT Cno FROM SC JOIN Student ON Student.Sno = SC.Sno WHERE Student.Sname = '王大力')
AND Course.Semester = 3

(2)运行效果:

24.查询在学分大于3分的课程中,“李勇”和“王大力”所选的相同课程,列出课程名和学分。

(1)代码实现:

SELECT DISTINCT Course.Cname, Course.Credit
FROM Course
WHERE Cno IN(SELECT Cno FROM SC JOIN Student ON SC.Sno = Student.Sno WHERE Student.Sname = '李勇' INTERSECT SELECT Cno FROM SC JOIN Student ON Student.Sno = SC.Sno WHERE Student.Sname = '王大力')
AND Course.Credit >= 3

(2)运行效果:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/991402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存