转自:http://yuncode.net/code/c_58df7a8ca687e58

1、查询“1”课程比“2”课程成绩高的所有学生的学号;
SELECT t1.student_id
FROM
    (SELECT score, student_id FROM student_score WHERE course_id = 1 ) t1,
    (SELECT score, student_id FROM student_score WHERE course_id = 2 ) t2
WHERE t1.score > t2.score AND t1.student_id = t2.student_id
 
2、查询平均成绩大于60分的同学的学号和平均成绩:
select student_id, avg(score) from student_score group by student_id HAVING avg(score)>=60 ;
 
3、查询所有同学的学号、姓名、选课数、总成绩;
select ss.student_id, st.student_name, count(course_id), sum(score) from student_score ss
left join student st on ss.student_id=st.student_id
group by ss.student_id, st.student_name
order by ss.student_id
 
4、查询姓“李”的老师的个数;
select count(teacher_name) from teacher where teacher_name like '李%'
 
5、查询没学过“叶平”老师课的同学的学号、姓名;
select student_id,student_name from student where student_id not in (
    select ss.student_id from
    student_score ss
    left join course co on ss.course_id=co.course_id
    left join teacher te on te.teacher_id= co.teacher_id
    where te.teacher_name='叶平'
    group by ss.student_id
)
 
6、查询学过“1”并且也学过编号“2”课程的同学的学号、姓名;
select st.student_id,st.student_name from student st
inner join (select student_id from student_score where course_id=1) t1 on st.student_id=t1.student_id
inner join (select student_id from student_score where course_id=2) t2 on t1.student_id=t2.student_id
 
7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
SELECT
    st.student_id,st.student_name
FROM student_score ss
inner join student st on ss.student_id=st.student_id
inner join course co on ss.course_id=co.course_id
inner join teacher te on te.teacher_id=co.teacher_id
where te.teacher_name='叶平'
 
8、查询课程编号“2”的成绩比课程编号“1”课程低的所有同学的学号、姓名;
select st.student_id,st.student_name from student st
inner join (select student_id, score from student_score where course_id=1) t1 on st.student_id=t1.student_id
inner join (select student_id, score from student_score where course_id=2) t2 on t1.student_id=t2.student_id
where t2.score<t1.score
 
9、查询所有课程成绩小于60分的同学的学号、姓名;
SELECT st.student_id,st.student_name FROM student st WHERE st.student_id not in (
    SELECT DISTINCT ss.student_id FROM student_score ss
    WHERE ss.score>=60
)
 
10、查询没有学全所有课的同学的学号、姓名;
select st.student_id, st.student_name from student_score ss
inner join student st on st.student_id=ss.student_id
group by st.student_id,st.student_name
having count(ss.course_id)<(select count(course_id) from course)
 
11、查询至少有一门课与学号为“1”的同学所学相同的同学的学号和姓名;
select st.student_id,st.student_name from
student st inner join student_score ss on st.student_id=ss.student_id
where course_id in(select course_id from student_score where student_id=1)
group by st.student_id,st.student_name
 
14、查询和“1”号的同学学习的课程完全相同的其他同学学号和姓名;
select ss.student_id from student_score ss
inner join student st on ss.student_id=st.student_id
where ss.course_id in (select course_id from student_score where student_id=1)
group by ss.student_id
having count(ss.course_id)=(select count(course_id) from course)
 
17、按平均成绩从高到低显示所有学生的“语文”、“数学”、“英语”三门课程成绩
SELECT ss.student_id,
    avg(ss.score) as 平均成绩,
    (select score from student_score
    where course_id = (SELECT course_id FROM course  WHERE course_name ='语文')
    and student_id = ss.student_id) as 语文,
    (select score from student_score
    where course_id = (SELECT course_id FROM course  WHERE course_name ='数学')
    and student_id = ss.student_id) as 数学,
    (select score from student_score
    where course_id = (SELECT course_id FROM course  WHERE course_name ='英语')
    and student_id = ss.student_id) as 英语
FROM student_score ss
GROUP BY ss.student_id,语文,数学,英语
ORDER BY avg(ss.score)  DESC
 
18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分
SELECT course_id AS 课程id, MAX (score) AS 最高分, MIN (score) AS 最低分
FROM student_score
GROUP BY course_id
 
19、按各科平均成绩从低到高和及格率的百分数从高到低顺序
SELECT
    co.course_name AS 科目名称,
    avg (ss.score) as 平均成绩,
    CAST (CAST (SUM(case WHEN COALESCE(ss.score,0)>=60 THEN ELSE ENDAS FLOAT)/
    (SELECT COUNT(*) FROM course) AS DECIMAL (10, 2))
FROM
    student_score ss
INNER JOIN course co ON ss.course_id = co.course_id
GROUP BY
    co.course_name
 
或者
 
SELECT
    student_id,
    CAST (AVG(score) AS DECIMAL(10, 2)) AS 平均成绩,
    CAST (CAST (COUNT(*) AS FLOAT) / (SELECT COUNT(*) FROM course) AS DECIMAL (10, 2)) AS 及格率
FROM student_score
WHERE   score >= 60
GROUP BY student_id
ORDER BY AVG (score),CAST (CAST (COUNT(*) AS FLOAT) / (SELECT COUNT(*) FROM course) AS DECIMAL (10, 2)) desc
 
24、查询学生平均成绩及其名次
SELECT 1 + (
        SELECT COUNT (DISTINCT 平均成绩)
        FROM
            SELECT student_id, AVG (score) AS 平均成绩 FROM student_score GROUP BY student_id ) AS T1
        WHERE 平均成绩 > T2.平均成绩
    AS 名次,
    student_id AS 学生学号,
    平均成绩
FROM
    SELECT student_id, AVG (score) 平均成绩 FROM student_score GROUP BY   student_id ) AS T2
ORDER BY
    平均成绩 DESC;
 
25、查询各科成绩前三名的记录:(不考虑成绩并列情况)
SELECT ss.student_id, ss.course_id, ss.score
FROM student_score ss
GROUP BY ss.student_id,     ss.course_id, ss.score
HAVING student_id in (select student_id from student_score where ss.course_id=course_id LIMIT  3)
ORDER BY ss.course_id, ss.score
 
26、查询每门课程被选修的学生数
SELECT course_id, COUNT (course_id)
FROM student_score
GROUP BY    course_id
ORDER BY    course_id
 
27、查询出只选修了一门课程的全部学生的学号和姓名
SELECT ss.student_id,st.student_name, COUNT (ss.course_id)
FROM student_score ss
inner join student st on st.student_id=ss.student_id
GROUP BY    ss.student_id,st.student_name
having COUNT (ss.course_id)=1
ORDER BY    ss.student_id
 
28、查询男生、女生人数
SELECT student_sex, COUNT (student_id)
FROM student
GROUP BY student_sex
 
29、查询姓“张”的学生名单
SELECT FROM   student WHERE student_name LIKE '张%'
 
30、查询同名同性学生名单,并统计同名人数
SELECT student_name,count(*) FROM   student group by student_name having count(*)>1
 
32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列
select course_id,avg(score) from student_score group by course_id order by avg(score) asc,course_id
 
33、查询平均成绩大于70的所有学生的学号、姓名和平均成绩
SELECT ss.student_id,st.student_name, AVG (ss.score)
FROM student_score ss
inner join student st on ss.student_id=st.student_id
GROUP BY ss.student_id,st.student_name
ORDER BY AVG (ss.score) ASC, ss.student_id
 
34、查询课程名称为“语文”,且分数低于60的学生姓名和分数
select st.student_name,ss.score
from student_score ss
inner join student st on ss.student_id=st.student_id
inner join course co on ss.course_id=co.course_id
where co.course_name='语文' and ss.score<60
 
35、查询所有学生的选课情况;
select st.student_name,co.course_name,ss.score
from student_score ss
inner join student st on ss.student_id=st.student_id
inner join course co on ss.course_id=co.course_id
 
36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;
select st.student_name,co.course_name,ss.score
from student_score ss
inner join student st on ss.student_id=st.student_id
inner join course co on ss.course_id=co.course_id
where ss.score>70
 
40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩
select st.student_name,co.course_name,te.teacher_name,ss.score
from student_score ss
inner join student st on ss.student_id=st.student_id
inner join course co on ss.course_id=co.course_id
inner join teacher te on co.teacher_id=te.teacher_id
where te.teacher_name='叶平'
order by ss.score desc
limit 1
 
41、查询各个课程及相应的选修人数
select course_id,count(course_id) from student_score group by course_id order by course_id
 
43、查询每门功成绩最好的前两名
SELECT
    t0.student_id, t0.course_id, t0.score
FROM student_score t0
WHERE
    t0.student_score_id IN (
        SELECT student_score_id
        FROM student_score
        WHERE t0.course_id = course_id
        ORDER BY    score DESC
        limit 2
    )
 
44、统计每门课程的学生选修人数,要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人    数相同,按课程号升序排列
select course_id,count(student_id) from student_score group by course_id order by count(student_id) desc, course_id
 
45、检索至少选修两门课程的学生学号
select student_id,count(*)
from student_score
group by student_id
having count(*)>=2
order by count(*) desc, student_id
 
46、查询全部学生都选修的课程的课程号和课程名
SELECT co.course_id, co.course_name
FROM student_score ss
INNER JOIN course co ON co.course_id = ss.course_id
GROUP BY co.course_id, co.course_name
HAVING COUNT(co.course_id) = (SELECT COUNT (student_id) FROM student)
 
48、查询两门以上不及格课程的同学的学号及其平均成绩
select student_id,avg(score) from student_score where score<60 group by student_id having count(1)>=2

学生表、课程表、 成绩表 、教师表sql练习的更多相关文章

  1. 学生表 课程表 成绩表 教师表 50个常用sql语句

    原文:http://www.cnblogs.com/zengxiangzhan/archive/2009/09/23/1572276.html Student(S#,Sname,Sage,Ssex) ...

  2. 面试题: 数据库 sql优化 sql练习题 有用 学生表,课程表,成绩表,教师表 练习

    什么是存储过程?有哪些优缺点? 什么是存储过程?有哪些优缺点? 存储过程就像我们编程语言中的函数一样,封装了我们的代码(PLSQL.T-SQL). 存储过程的优点: 能够将代码封装起来 保存在数据库之 ...

  3. sql面试题(学生表_课程表_成绩表_教师表)

    原帖链接:http://bbs.csdn.net/topics/280002741 表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程 ...

  4. 经典sql面试题(学生表_课程表_成绩表_教师表)

    转载:https://www.cnblogs.com/qixuejia/p/3637735.html 表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cna ...

  5. SQL常见面试题(学生表_课程表_成绩表_教师表)

    表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师 ...

  6. MySQL(学生表、教师表、课程表、成绩表)多表查询

    1.表架构 student(sid,sname,sage,ssex) 学生表 course(cid,cname,tid) 课程表 sC(sid,cid,score) 成绩表 teacher(tid,t ...

  7. SQL Server 基础之《学生表-教师表-课程表-选课表》(二)

    表结构 --学生表tblStudent(编号StuId.姓名StuName.年龄StuAge.性别StuSex) --课程表tblCourse(课程编号CourseId.课程名称CourseName. ...

  8. SQL Server 基础之《学生表-教师表-课程表-选课表》

    一.数据库表结构及数据 建表 CREATE TABLE Student ( S# INT, Sname ), Sage INT, Ssex ) ) CREATE TABLE Course ( C# I ...

  9. SQL Server 基础之《学生表-教师表-课程表-选课表》(一)

    数据库表结构及数据 建表 CREATE TABLE Student ( S# INT, Sname ), Sage INT, Ssex ) ) CREATE TABLE Course ( C# INT ...

随机推荐

  1. NOI模拟(3.3)螺旋序列(出题人一定是月厨)

    Description S也想寻求真正的智慧,然而由于“抑制力”的存在,她必须先解决一系列询问.有一个长度为n的序列a,一个长度为m序列b被称为螺旋序列当且仅当b1=bm且对于1<=i<= ...

  2. Oracle on Azure

    价格列表 https://azure.microsoft.com/en-us/marketplace/partners/msopentech/oracle-db-12c/ Oracle-Base 安装 ...

  3. xtu summer individual 6 E - Find Metal Mineral

    Find Metal Mineral Time Limit: 1000ms Memory Limit: 65768KB This problem will be judged on HDU. Orig ...

  4. POJ1094 字母排序(拓扑排序)

    该题题意明确,就是给定一组字母的大小关系判断他们是否能组成唯一的拓扑序列.是典型的拓扑排序,但输出格式上确有三种形式: 1.该字母序列有序,并依次输出: 2.该序列不能判断是否有序: 3.该序列字母次 ...

  5. [K/3Cloud] 关于单据转换的问题

    1. 单据转换,是否支持重复下推,支持新增下推和更新下推? 答:支持重复下推,是否允许下推受以下因素: 1).源分录是否是有效状态(源单单头状态会自动影响分录,下同),例如已审核.未关闭.未作废: 2 ...

  6. Charm Bracelet-POJ3624(01背包)

    http://poj.org/problem?id=3624 Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  7. 权限框架之Shiro详解(非原创)

    文章大纲 一.权限框架介绍二.Shiro基础介绍三.Spring Boot整合Shiro代码实战四.项目源码与资料下载五.参考文章   一.权限框架介绍 1. 什么是权限管理   权限管理属于系统安全 ...

  8. mysql配置文件my.ini的修改问题

    修改innodb_buffer_pool_size这个参数一般都没问题,但是修改innodb_log_file_size这个参数如果过大,mysql日志就会提示: Error: log file .\ ...

  9. MongoDB小结24 - 索引简介2

    索引的名字 集合中每个索引都有一个字符串类型的名字,来唯一标识索引. 服务器通过名字来操作或者删除索引. 要注意的是,索引名有字符个数限制,所以索引创建时一定要用自定义的名字,如 db.user.en ...

  10. SaltStack及Multi-Master介绍

    1.先说下SaltStack是啥? SaltStack是基于Python开发的一套C/S架构配置管理工具(功能不仅仅是配置管理,如使用salt-cloud配置AWS EC2实例),它的底层使用Zero ...