数据库常用查询语句(多表查询,面试必问)

支付宝程序员隐藏福利,使用支付宝搜索下方数字可领取现金,每天都可以使用下方号码领取,已经领了二百多:

568076896

–1.学生表

Student(S#,Sname,Sage,Ssex) –

–2.课程表

Course(C#,Cname,T#) –

–3.教师表

Teacher(T#,Tname) –

–4.成绩表

SC(S#,C#,score) –

完成下列查询需求:

#查询"01"课程比"02"课程成绩高的学生的信息及课程分数

select s.*,b.score 课程1,c.score 课程2 from student s, sc b,sc c

where s.s_id=b.s_id and b.s_id=c.s_id and b.c_id=158 and c.c_id=55 and b.score>c.score;

#查询平均成绩大于等于60分的同学的学生编号、学生姓名和平均成绩

select s.s_id 编号,s.sname 姓名,avg(sc.score) 平均成绩 from student s ,sc

where s.s_id=sc.s_id

group by s.s_id ,s.sname

having avg(sc.score)>=60;

#查询平均成绩小于60分的同学的学生编号、学生姓名和平均成绩

select s.s_id 编号,s.sname 姓名,avg(sc.score) 平均成绩 from student s ,sc

where s.s_id=sc.s_id

group by s.s_id ,s.sname

having avg(sc.score)<60;

#查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩

select s.s_id 编号,s.sname 姓名,count(sc.c_id) 选课总数,SUM(sc.score) 总成绩 from student s ,sc

where s.s_id=sc.s_id

group by s.s_id ,s.sname;

#查询"李"姓老师的数量

select COUNT(*) FROM teacher

where tname like ‘李%’;

#查询学过"张三"老师所授课程的同学的信息

SELECT * FROM student WHERE s_id IN (SELECT s_id FROM sc WHERE c_id IN

(SELECT c_id FROM course WHERE t_id IN

(SELECT t_id FROM teacher WHERE tname LIKE ‘蓝老师’)));

#查询没学过"张三"老师所授课程的同学的信息

select * from student where s_id not in

(select distinct s_id FROM sc

where c_id=(select c_id from course where t_id=

(select t_id from teacher where tname like ‘蓝老师’)));

#查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息

方法一:

select * from student

where s_id in(select s.s_id from sc s,sc c

where s.s_id=c.s_id and s.c_id=158 and c.c_id=155);

方法二:

select * from student s

where s.s_id in(select s_id from sc

where c_id=2) and s.s_id in(select s_id from sc

where c_id=1);

#查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息

方法一:

select * from student s

where s.s_id not in(select s_id from sc

where c_id=155) and s.s_id in(select s_id from sc

where c_id=158);

#查询没有学全所有课程的同学的信息

select * from student

where s_id in (select s_id from sc

group by s_id

having count(c_id)<(select COUNT(c_id) from course));

#查询至少有一门课与学号为"01"的同学所学的课程相同的同学的信息

select * from student

where s_id in (

select DISTINCT(s_id) from sc

where c_id in (select c_id from sc

where s_id=1) and s_id<>1);

#查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列

SELECT avg(score)FROM sc

GROUP BY c_id

ORDER BY avg(score) DESC ,c_id ASC ;

#查询平均成绩大于等于70分的所有学生的学号、姓名和平均成绩

SELECT s.s_id ,s.sname, avg(sc.score)FROM student s,sc

WHERE sc.s_id=s.s_id

GROUP BY s.s_id

HAVING avg(score)>70;

#查询课程名称为"数学",且分数低于60分的学生姓名和分数

SELECT s.sname, sc.score FROM student s,sc,course c

WHERE s.s_id=sc.s_id

  AND c.cname LIKE 'java'

  AND sc.c_id=c.c_id

  AND sc.score>60;

#查询所有学生的课程及分数情况

SELECT s.sname ,c.cname,sc.score FROM student s, sc,course c WHERE s.s_id=sc.s_id AND sc.c_id=c.c_id; #查询任何一门课程成绩在70分以上的姓名、课程名称和分数 SELECT s.sname 姓名,c.cname 课程名称,sc.score 分数 FROM student s,sc,course c WHERE c.c_id=sc.c_id AND sc.s_id=s.s_id AND sc.score>70; #查询不及格的学生信息 SELECT * FROM student s,sc WHERE s.s_id=sc.s_id AND sc.score<60; #查询课程编号为01且课程成绩在80分以上的学生的学号和姓名 SELECT * FROM student s,sc WHERE s.s_id=sc.s_id AND c_id=158 AND sc.score>80; #求每门课程的学生人数 select s.c_id,cou.cname,count(s.s_id) 人数 from SC s,course cou where s.c_id=cou.c_id GROUP BY s.c_id,cou.cname; #检索"01"课程分数小于60分的同学的信息,结果按分数降序排列 select s.s_id,s.sname,sc.score from STUDENT s ,sc where sc.s_id=s.s_id and sc.c_id=155 and sc.score<60 order by sc.score desc;

支付宝程序员隐藏福利,使用支付宝搜索下方数字可领取现金,每天都可以使用下方号码领取,已经领了二百多:

568076896​​​​

猜你喜欢

转载自blog.csdn.net/weixin_43806074/article/details/85048916