创建教材中的三张表格,并输入相应的数据
Create table student( Sno char(9), Same char(20), Ssex char(2), Sage smallint, Sdept char(20) ); Create table course( Cno char(4), Cname char(40), Cpno char(4), Ccredit smallint ); Create table sc( Sno char(9), Cno char(4), Grade smallint ); Insert into student values(‘200215121’,’李勇’,’男’,20,’cs’); Insert into student values(‘200215122’,’刘晨’,’女’,19,’cs’); Insert into student values(‘200215123’,’王敏’,’女’,18,’ma’); Insert into student values(‘200515124’,’张立’,’男’,19,’is’); Insert into course values (‘1’,’数据库’,’5’,4); Insert into course values (‘2’,’数学’,NULL,2); Insert into course values(‘3’,’信息系统’,’1’,4); Insert into course values(‘4’,’操作系统’,’6’,3); Insert into course values(‘5’,’数据结构’,’7’,4); Insert into course values(‘6’,’数据处理’,NULL,2); Insert into course values(‘7’,’pascal语言’,’6’,4); Insert into sc values(‘200215121’,’1’,92); Insert into sc values(‘200215121’,’2’,85); Insert into sc values(‘200215121’,’3’,88); Insert into sc values(‘200215122’,’2’,90); Insert into sc values(‘200215122’,’3’,80);
查询语句1:
1. 列出所有不姓李的所有学生;
select *FROMStudent
where SnameNOTLIKE '李%'
2. 列出姓“张”且全名为2个汉字的学生
select *FROMStudent
where SnameLIKE'张_'
3. 显示在1993年以后出生的学生的基本信息;
select *FROMStudent
where Sage<2015-1993
4. 查询出课程名含有“数据”字串的所有课程基本信息;
select *FromCourse
where CnameLIKE'%数据%'
5. 列出选修了‘1’课程的学生学号,按成绩的降序排列;
select SnoFROMSC
where Cno='1'ORDERBY Grade DESC
6. 列出课程表中全部信息,按先修课的升序排列;
select *FROMCourse ORDER BY CpnoASC
7. 列出年龄超过平均值的所有学生名单,按年龄的降序显示;
select *FROMStudent
where Sage>(SELECTAVG(Sage)
FROM Student)ORDERBY Sage DESC
8. 按照出生年份升序显示所有学生的学号、姓名、性别、出生年份及院系,在结果集中列标题分别指定为“学号,姓名,性别,出生年份,院系”;
select Sno学号,Sname 姓名,Ssex性别,2014-Sage出生年月,Sdept院系
FROM StudentORDERBY 2014-SageASC
9. 按照课程号、成绩降序显示课程成绩在80-90之间的学生的学号、课程号及成绩
selectSno,Cno,GradeFROMSC
where Gradebetween 80AND 90ORDER BY Cno DESC,GradeDESC
10.显示学生信息表中的学生总人数及平均年龄,在结果集中列标题分别指定为“学生总人数,平均年龄”;
select COUNT(DISTINCTSno)学生总人数,AVG(Sage)平均年龄
FROM Student
11.显示选修的课程数大于2的各个学生的选修课程数;
select Sno学号,COUNT(Sno)选修课程数
FROM SCGROUPBYSno HAVING COUNT(*)>2
12.显示平均成绩大于“2002151022”学生平均成绩的各个学生的学号、平均成绩;
select Sno,AVG(Grade)
from SC
Group by Sno
having AVG(Grade)>(selectAVG(Grade)fromSC
where Sno='200215122')
查询语句2:
1、查询所有学生的Sname、Cname和Grade列。
SELECT Sname,Cname,Grade
FROM Student,Course,SC
where Student.Sno=SC.SnoandSC.Cno=Course.Cno;
2、查询所有选修“数据库”课程的同学的成绩。
SELECT Student.Sno,Sname,Cname,Grade
FROM Student,Course,SC
where Cname='数据库'ANDCourse.Cno=sc.CnoANDStudent.Sno=sc.Sno;
3、查询和“李勇”同性别的同学Sname.
SELECT x.SnameFROMStudentx
where x.Ssex=(selectSsexFROM Student y WHEREy.Sname='李勇')ANDx.Sname!='李勇'
4、查询所有同学的基本情况和选课情况,包括未选课的同学。
/* SELECTStudent.*,SC.* FROM Student,SC where Student.Sno=sc.Sno */
SELECT Student.*,SC.*
FROM StudentLEFT OUTERJOINSC ON(Student.Sno=SC.Sno)
5、查询选修1号课程且成绩高于90分的同学的名字。
SELECT SnameFROMStudent,SC
WHERE Student.Sno=sc.SnoANDCno='1'ANDGrade>90
6、查询和学号为200215121的同学相同年龄的所有学生的Sno、Sname列。
由于该题学号为200215121时,没有其他同学与他年龄相同,故实验中把学号改为200215122。查询结果包括“刘晨”自己。
SELECT x.Sno,x.SnameFROMStudent x
where x.Sage=(SELECTy.SageFROMStudent y WHERE y.Sno='200215122')
7、查询刘晨同学所有的成绩。
SELECT Sname,Cno,Grade
FROM Student,SC
where Student.Sname='刘晨'ANDStudent.Sno=Sc.Sno
8、查询非计算机系的不超过计算机系所有学生的年龄的学生姓名。
SELECT x.SnameFROMStudentx
WHERE x.Sage<(SELECTMIN(y.Sage)
FROM Studenty WHEREy.Sdept='CS')ANDx.Sdept!='CS'
查询语句3
1 、使用带IN谓词的子查询
(1) 查询与刘晨在同一个系学习的学生的学号和性名。
select Sno,SnameFROM Student
WHERE SdeptIN(SELECTSdept From Student WHERE Sname='刘晨')
AND Sname!='刘晨'
(2) 查询选修了数据库课程的学生的学号和姓名。
SELECT Sno,SnameFrom Student
WHERE SnoIN(SELECTSno From SC WHERE Cno
IN(SELECTCno FROM Course WHERE CnameIN('数据库')))
(3) 查询选修了1号课程和2号课程的学生的学号和姓名。
SELECT Sno,SnameFROM Student
WHERE SnoIN(SELECTSno FROM SC WHERE CnoIN('1','2'))
2 、使用带比较运算的子查询
(4) 查询比男生平均年龄小的所有学生的信息。
SELECT *FROM Student /*因为AVG是采取舍去计数,故要加等号*/
WHERE Sage<=(SELECTAVG(Sage)FROM Student WHERE Ssex='男')
(5) 查询比王敏年龄大的所有学生的信息。
SELECT *FROM Student
WHERE Sage>(SELECTSage FROM Student WHERE Sname='王敏')
3 、使用带有ANY,ALL谓词的子查询
(6) 查询其它系中比计算机系CS所有学生年龄都要小的学生姓名和年龄。
SELECT Sname,SageFROM Student
WHERE Sdept!='CS'
AND Sage<=ALL(SELECTSage FROM Student WHERE Sdept='CS')
(7) 查询与计算机系所有学生的年龄均不同的学生学号,姓名和年龄
SELECT Sno,Sname,SageFROM Student
WHERE Sage!=ALL(SELECTSage FROM Student WHERE Sdept='CS')
4 、使用带Exists谓词的子查询和相关子查询
(8) 查询选修了数据库的学生的姓名和学号
SELECT Sname,SnoFROM Student
WHERE EXISTS(SELECT* FROM SC
WHERE Student.Sno=SnoAND Cno
IN(SELECTCno FROM Course WHERE Cname='数据库'))
(9) 查询没有选修数据库的学生姓名和学号
SELECT Sname,SnoFROM Student
WHERE NOTEXISTS(SELECT* FROM SC
WHERE Student.Sno=SnoAND Cno
IN(SELECTCno FROM Course WHERE Cname='数据库'))
(10)查询所有选修了1号课程的学生姓名。
SELECT SnameFROM Student
WHERE EXISTS(SELECT *FROM SC
WHERE Student.Sno=SnoAND Cno='1')
(11)查询没有人选修的课程的课程号和课程名。
SELECT Cno,CnameFROM Course
WHERE NOTEXISTS(SELECT* FROM SC WHERE Course.Cno=Cno)