(4)检索选修课程号为 C2或C4的学生学号;
SELECT Sno
FROM SC
WHERE Cno= C2' OR Cno= ‘ C4';
设教学数据库Education有三个关系:
学生关系 S( SNO SNAMEAGE SEX, SDEP)学习关系 SC( SNQ CNO GRADE;课程关系 C (CNO CNAME CDEPT TNAME 查询问题:
(1)检索计算机系的全体学生的学号,姓名和性别;
(2)检索学习课程号为 C2的学生学号与姓名;
(3)检索选修课程名为“ DS'的学生学号与姓名;
(4)检索选修课程号为 C2或C4的学生学号;
(5)检索至少选修课程号为 C2和C4的学生学号;
(6)检索不学C2课的学生姓名和年龄;
(7)检索学习全部课程的学生姓名;
(8)查询所学课程包含学生 S3所学课程的学生学号。
(1)检索计算机系的全体学生的学号,姓名和性别;
SELECT Snq Sname Sex
FROM S
WHERE Sdept =' CS ;
(2)检索学习课程号为 C2的学生学号与姓名;
1.SELECT Sno,Sname FROM S WHERE Sno IN (SELECT Sno FROM SC WHERE Cno= ‘ C2') | 2.SELECT S.Sno,Sname FROM S,SC WHERE S.Sno=SC.Sno AND SC.Cno= ‘ C2 ; |
(3)检索选修课程名为“ DS的学生学号与姓名
本查询涉及到学号、姓名和课程名三个属性,分别存放在 S
和C表中,但S和C表没有直接联系,必须通过 SC表建立它们
二者的联系。C T SC T S
基本思路:
(1)首先在C表中出“ DS课程的课程号Cno;
(2)然后在SC表中出Cno等于第一步给出的 Cno集合中的某 个元素Cno;
(3)最后在S关系中选出Sno等于第二步中Sno集合中某个元 素的元组,取出Sno和Sname送入结果表列。
SELECT Sno Sname FROM S
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno IN
(SELECT Cno
FROM C
WHERE Cname= ‘ DS));
(5)检索至少选修课程号为 C2和C4的学生学号;
SELECT Sno
FROM SC X SC Y
WHERE X.Sno=Y.Sno AND X.Cno= 'C2‘ AND Y.Cno=' C4'
(6)检索不学C2课的学生姓名和年龄;
1.SELECT Sname | 2.SELECT Sname,Sage | |
FROM S | FROM S | |
WHERE Sno NOT IN | WHERE NOT EXISTS | |
(SELECT Sno | (SELECT * | |
FROM SC | FROM SC | |
WHERE Cno= ‘ C2'); | WHERE SC.Sno=S.Sno | |
AND Cno= ‘ C2'); | ||
(7)检索学习全部课程的学生姓名;
在表S中学生,要求这个学生学了全部课程。换言之,在 S表 中学生,在 C中不存在一门课程,这个学生没有学。
SELECT Sname
FROM S
WHERE NOT EXISTS
(SELECT *
FROM C
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE SC.Sno=S.Sno AND SC.Cno=C.Cno ));
(8)查询所学课程包含学生 S3所学课程的学生学号。
分析:不存在这样的课程 Y,学生S3选了 Y,而学生X没有选。
SELECT DISTINCT Sno
FROM SC X
WHERE NOT EXISTS
(SELECT *
FROM SC Y
WHERE Y.Sno= ‘S3’ AND NOT EXISTS
(SELECT *
FROM SC Z
WHERE Z.Sno=X.Sno AND Z.Cno=Y.Cno ));
设教学数据库 Education 有三个关系: 学生关系 S( SNO, SNAM,E AGE, SEX, SDEPT); 学习关系 SC( SNO,CNO,GRAD)E; 课程关系 C( CNO, CNAM,E CDEPT, TNAM)E 查询问题:
1:查所有年龄在 20 岁以下的学生姓名及年龄。 2:查考试成绩有不及格的学生的学号
3:查所年龄在 20 至 23 岁之间的学生姓名、系别及年龄。 4:查计算机系、数学系、信息系的学生姓名、性别。 5:查既不是计算机系、数学系、又不是信息系的学生姓名、性 别
6:查所有姓“刘”的学生的姓名、学号和性别。 7:查姓“上官”且全名为 3 个汉字的学生姓名。 8:查所有不姓“张”的学生的姓名。
9:查 DB_Design 课程的课程号。 10:查缺考的学生的学号和课程号。 11:查年龄为空值的学生的学号和姓名。
12:查计算机系 20 岁以下的学生的学号和姓名。 13:查计算机系、数学系、信息系的学生姓名、性别。
14:查询选修了 C3 课程的学生的学号和成绩,其结果按分数的 降序排列。
15:查询全体学生的情况,查询结果按所在系升序排列,对同一 系中的学生按年龄降序排列。
16:查询学生总人数。 17:查询选修了课程的学生人数。
18:计算选修了 C1 课程的学生平均成绩。 19:查询学习 C3 课程的学生最高分数。 20:查询各个课程号与相应的选课人数。 21:查询计算机系选修了 3 门以上课程的学生的学号。
22:求基本表S中男同学的每一年龄组(超过50人)有多少人? 要求查询结果按人数升序排列,人数相同按年龄降序排列。 23:查询每个学生及其选修课程的情况。
24:查询选修了 C2课程且成绩在90分以上的所有学生。
25:查询每个学生选修的课程名及其成绩。 26:统计每一年龄选修课程的学生人数。
27:查询选修了 C2课程的学生姓名。 28:查询与“张三”在同一个系学习的学生学号、姓名和系别。 29:查询选修课程名为“数据库”的学生学号和姓名。 30:查询与“张三”在同一个系学习的学生学号、姓名和系别。 31:查询选修课程名为“数据库”的学生学号和姓名。
32:查询选修了 C2课程的学生姓名。
33:查询所有未选修 C2课程的学生姓名。
34:查询与“张三”在同一个系学习的学生学号、姓名和系别。 35:查询选修了全部课程的学生姓名。
36:查询所学课程包含学生 S3所学课程的学生学号
( 1 )比较
例 1:查所有年龄在 20 岁以下的学生姓名及年龄。
SELECT Sname ,Sage
FROM S
WHERE Sage<20; (NOT age>=20)
例 2: 查考试成绩有不及格的学生的学号
SELECT DISTINCT Sno
FROM SC
WHERE grade<60 ;
(2) 确定范围
例 3: 查所年龄在 20 至 23 岁之间的学生姓名、系别及年龄。
SELECT Sname, Sdept,Sage
FROM S
WHERE Sage BETWEEN 20 AND 23;
( 3)确定集合 例 4: 查计算机系、数学系、信息系的学生姓名、性别。
SELECT Sname ,Ssex
FROM S
WHERE Sdept IN ('CS', ‘IS', ‘MATH ') ;
例 5: 查既不是计算机系、数学系、又不是信息系的学生姓名、 性别
SELECT Sname, Ssex
FROM S
WHERE Sdept NOT IN ('CS', ‘IS', ‘MA TH ') ;
( 4)字符匹配
例 6: 查所有姓“刘”的学生的姓名、学号和性别。
SELECT Sname, Sno,Ssex
FROM S
WHERE Sname LIKE ‘刘 %';
例 7: 查姓“上官”且全名为 3 个汉字的学生姓名。
SELECT Sname
FROM S
WHERE Sname LIKE ‘上官 _ _';
sql语句查询不包含例 8: 查所有不姓“张”的学生的姓名。
SELECT Sname,Sno, Ssex
FROM S
WHERE Sname NOT LIKE ‘张 %';
例 9: 查 DB_Design 课程的课程号。
SELECT Cno
FROM C
WHERE Cname LIKE ‘DB\_Design ' ESCAPE ‘ ';
(5) 涉及空值的查询
例 10:查缺考的学生的学号和课程号。
SELECT Sno, Cno
FROM SC
WHERE Grade IS NULL ; (不能用 =代替)
{ 有成绩的 WHERE Grade IS NOT NULLL ; }
例 11: 查年龄为空值的学生的学号和姓名。
SELECT Sno , Sname
FROM S
WHERE Sage IS NULL ;
(6)多重条件查询
例 12:查计算机系 20 岁以下的学生的学号和姓名。
SELECT Sno , Sname
FROM S
WHERE Sdept=‘ CS' AND Sage<20;
例 13: 查计算机系、数学系、信息系的学生姓名、性别。
SELECT Sname, Ssex
FROM S
WHERE Sdept ='CS'OR Sdept =‘ IS' OR Sdept ='MA TH ');
3、对查询结果排序
例14:查询选修了 C3课程的学生的学号和成绩,其结果按分数 的降序排列。
SELECT Sno, Grade
FROM SC
WHERE Cno=‘ C3'
ORDER BY Grade DESC;
例 15:查询全体学生的情况,查询结果按所在系升序排列,对同 一系中的学生按年龄降序排列。
SELECT *
FROM S
ORDER BY Sdep, Sage DESC;
4.聚合函数的使用
例 16:查询学生总人数。
SELECT COUNT ( *)
FROM S
例 17:查询选修了课程的学生人数。
SELECT COUNT(DISTINCT Sno )
FROM SC
例 18: 计算选修了 C1 课程的学生平均成绩。
SELECT AVG( Grade)
FROM SC
WHERE Cno= ‘ C1 ';
例19:查询学习C3课程的学生最高分数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论