– 学生信息表
CREATE TABLE students(
studentid INT AUTO_INCREMENT PRIMARY KEY,-- 学号
studentName VARCHAR(20) NOT NULL,-- 姓名
gender CHAR(20),-- 性别
birthday DATE
)ENGINE=INNODB;
INSERT INTO students(studentname,gender,birthday) VALUES
(‘张三’,‘男’,‘1987-02-01’),
(‘李斯’,‘女’,‘1990-12-01’),
(‘王二’,‘男’,‘1988-09-01’),
(‘黎明’,‘男’,‘1991-08-01’);

– 老师信息表
CREATE TABLE teachers(
teacherid INT AUTO_INCREMENT NOT NULL PRIMARY KEY, – 老师编号
teacherName VARCHAR(20) NOT NULL-- 老师姓名
)ENGINE=INNODB;
INSERT INTO teachers(teacherName)
VALUES(‘张三’),(‘李四’),(‘王五’),(‘Jacky’),(‘Helen’),(‘Kevin’);

– 课程表
CREATE TABLE courses(
Courseid INT AUTO_INCREMENT NOT NULL, – 课程号
courseName VARCHAR(20) NOT NULL UNIQUE, – 课程名
TeacherID INT NOT NULL , – 教师编号
FOREIGN KEY (teacherID) REFERENCES teachers(teacherId),
PRIMARY KEY (courseid,teacherid)
)ENGINE=INNODB;
INSERT INTO courses(coursename, teacherID) VALUES
(‘pre’,4),(‘c’,4),(‘sql’,5),(‘java oo’,3),(‘oracle’,5),
(‘ooad’,3),(‘Web前端’,5),(‘Java web’,4),(‘Java EE’,3),(‘Android’,2),(‘毕业项目’,5),
(‘就业课’,1);

– 成绩表
CREATE TABLE scores(
studentid INT NOT NULL, – 学号
courseid INT NOT NULL, – 课程号
mark INT, – 成绩
PRIMARY KEY (studentid,courseid),
FOREIGN KEY (studentid) REFERENCES students(studentid),
FOREIGN KEY (courseid) REFERENCES Courses(CourseID)
)ENGINE=INNODB;
INSERT INTO scores(studentid,courseid,mark) VALUES
(1,1,60),(1,2,70),(1,3,80),(1,4,55),(1,5,100),(1,6,90),
(2,1,50),(2,2,70),(2,3,80),(2,4,55),(2,5,100),(2,6,90),(2,7,50),(2,8,70),(2,9,50),(2,10,55),(2,11,100),(2,12,30),
(3,1,90),(3,2,70),(3,3,80),(3,4,55),(3,5,100),(3,6,90),(3,7,90),(3,8,80),(3,9,90),(3,10,55),(3,11,100),(3,12,100),
(4,1,100),(4,2,70),(4,3,80),(4,4,55),(4,5,100),(4,6,90),(4,9,100),(4,10,90);

– 请编写SQL语句,完成如下任务:
– 1.查询课程"001"比课程"002"成绩高的所有学生的学号

SELECT s1.studentid as 学号 FROM (SELECT * FROM scores WHERE courseid=001)
s1 JOIN (SELECT * FROM scores WHERE courseid=002)
s2 ON s1.studentid=s2.studentid WHERE s1.mark>s2.mark

– 2.查询平均成绩大于60分的同学的学号和平均成绩
SELECT studentid AS 学号,AVG(mark) AS 平均成绩
FROM scores
GROUP BY studentid
HAVING AVG(mark)>60;

– 3.查询所有同学的学号、姓名、选课数、总成绩
SELECT xs.studentid AS 学号,xs.studentName AS 姓名,COUNT(cj.courseid) AS 选课数,SUM(cj.mark) AS 总成绩
FROM students xs JOIN scores cj ON xs.studentid=cj.studentid
GROUP BY xs.studentid;

– 4.查询姓“王”的老师的个数
SELECT COUNT(teacherid) AS 姓王的老师的个数
FROM teachers
WHERE teacherName LIKE ‘王%’;

– 5.查询没学过"张三"老师课的同学的学号、姓名
SELECT DISTINCT studentid AS 学号,studentName AS 姓名
FROM students
WHERE studentid NOT IN(
SELECT studentid FROM scores WHERE courseid IN(
SELECT kc.Courseid FROM courses kc JOIN teachers ls ON ls.teacherid=kc.TeacherID
WHERE ls.teacherName=‘张三’));

– 6.查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
SELECT studentid AS 学号,studentName AS 姓名, FROM students
WHERE studentid IN(
SELECT s001.studentid FROM
(SELECT studentid FROM scores WHERE courseid=001) s001 JOIN
(SELECT studentid FROM scores WHERE courseid =002) s002
ON s001.studentid=s002.studentid
);

– 7.查询学过“Jacky”老师所教的所有课的同学的学号、姓名
SELECT stu.studentid AS 学号,stu.studentName AS 名称,zsstu.选了几门
FROM students stu JOIN
查询那些人选了Jacky的课选了几门计数
(SELECT studentid AS 学号,COUNT(courseid) AS 选了几门 FROM scores
WHERE courseid IN (-- 查询Jacky教了那些课输出编号表
SELECT Courseid FROM courses
WHERE TeacherID=(SELECT teacherid FROM teachers
WHERE teacherName=‘Jacky’)
)
GROUP BY studentid) zsstu ON stu.studentid=zsstu.学号
WHERE zsstu.选了几门=(-- 查询Jacky教了那些课输出编号表计数
SELECT COUNT(Courseid) FROM courses
WHERE TeacherID=(SELECT teacherid FROM teachers
WHERE teacherName=‘Jacky’)
)

– 8.查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名
SELECT DISTINCT xs.studentid AS 学号,xs.studentName AS 姓名
FROM students xs JOIN scores cj ON xs.studentid=cj.studentid
WHERE xs.studentid IN(
SELECT s1.studentid FROM (SELECT * FROM scores WHERE courseid=002) s1 JOIN (SELECT * FROM scores WHERE courseid=001) s2 ON s1.studentid=s2.studentid
WHERE s1.mark>s2.mark)

– 9.查询所有课程的成绩小于60分的同学的学号、姓名
SELECT xs.studentid AS 学号,xs.studentName AS 姓名
FROM students xs JOIN scores cj ON xs.studentid=cj.studentid
WHERE cj.studentid NOT IN(SELECT DISTINCT studentid FROM scores WHERE mark>=60)

– 10.列出sql成绩大于等于 所有学生sql平均成绩的学生
SELECT xs.studentName AS 姓名, cj.mark AS 成绩
FROM students xs JOIN scores cj ON xs.studentid=cj.studentid
WHERE cj.mark>=(SELECT AVG(mark) FROM scores WHERE courseid=(SELECT Courseid FROM courses WHERE courseName=‘sql’))
AND cj.courseid=(SELECT Courseid FROM courses WHERE courseName=‘sql’);

– 11.列出没有上过“就业课”的同学
SELECT xs.studentName AS 姓名
FROM students xs JOIN scores cj ON xs.studentid=cj.studentid
WHERE xs.studentid NOT IN(SELECT studentid FROM scores WHERE courseid=(SELECT Courseid FROM courses WHERE courseName=‘就业课’))
GROUP BY xs.studentid;

– 12.列出“王五”老师 所教授的课程有哪些?(列出课程名字,和老)师名字
SELECT kc.courseName AS 课程,ls.teacherName AS 老师姓名
FROM courses kc JOIN teachers ls ON kc.TeacherID=ls.teacherid
WHERE ls.teacherName=‘王五’;

– 13.列出被学生得到100分的课程有哪些?
SELECT DISTINCT kc.courseName AS 课程名,cj.mark AS 分数
FROM scores cj JOIN courses kc ON cj.courseid=kc.Courseid
WHERE cj.mark=100;

– 14.列出所有学生每门课程的考试成绩
SELECT xs.studentName AS 姓名,kc.courseName AS 课程,cj.mark AS 分数
FROM students xs,scores cj,courses kc
WHERE xs.studentid=cj.studentid AND cj.courseid=kc.Courseid
ORDER BY xs.studentid;

MySQL数据库-子查询-表联接(内/外)-综合练习相关推荐

  1. mysql数据库子查询的使用_MySQL数据库使用子查询方式更新数据优化及思考

    [环境介绍] 云数据库MySQL 5.7 [背景描述] 业务需要:需要对16370077的表数据进行更新部分数据操作 UPDATE P_MOXXXX_REXXXX SET FISAVAILABLE = ...

  2. MySQL数据库子查询#where、from、exists三大类型子查询总结

    1.什么是子查询? 当一个查询嵌套了另一个查询,把嵌套在里面的查询先执行的查询就称为子查询. 2.什么情况下会使用到子查询? 当一个查询要完成时,需要用到另一个查询的结果才能继续操作,那么这个查询的s ...

  3. MySQL数据库---子查询insert,update,delete语句中嵌套子查询

    十.子查询的使用(重点) 1.子查询:指的是查询语句,嵌套查询语句---->一般是放在where子句中,表示条件. 2.子查询的应用使用场景: 2.1查询过程中,虽然给了条件,但是条件的结果并不 ...

  4. MySQL数据库——子查询

    目录 第1关 带比较运算的子查询 一.本关任务:查询大于所有平均年龄的员工姓名与年龄. 子查询 二.编程要求 三.预期输出: 四.代码 第2关 关键字子查询 一.本关任务:根据要求使用关键字进行查询. ...

  5. MySQL数据库子查询

    1. 子查询的介绍 在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句,外部那个select语句则称为主查询. 主查询和子查询的关系: ...

  6. mysql数据库子查询练习_子查询以及sql练习

    无详细内容 无 --1列出emp表中各部门的部门号,最高工资,最低工资--先分组,后计算,SELECT e.deptno AS 部门号, MAX(e.sal) AS 最高工资, MIN(e.sal) ...

  7. mysql联合查询怎么加子查询_MySQL数据库 —子查询,联合查询

    编程之家收集整理的这篇文章主要介绍了MySQL数据库 -子查询,联合查询,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考. <MySQL数据库 -子查询,联合查询>要点: 本文 ...

  8. 4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)

     mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...

  9. mysql外连接基准表_4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)...

     mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...

最新文章

  1. python traceback安装_Python错误:Traceback (most recent call last):感觉是软件出了问题
  2. CVPR 2021 | 基于帧场学习的多边形建筑提取
  3. 16张思维导图+学习路线图,囊括所有Python基础,可打印
  4. 敏捷个人纸质书:第一章 源于生活和工作的敏捷个人
  5. 分布式消息通信ActiveMQ原理-持久化策略-笔记
  6. webpack-dev-server启动后,localhost:8080返回index.html的原理
  7. Java RESTful API集成测试
  8. Redis中数据结构和编码详细图解(应用场景及优缺点)
  9. android studio上拉加载,AndroidStudio的PullToRefreshListView简单使用
  10. 使用 matlab 数字图像处理(七)—— 频率域处理
  11. win7休眠设置在哪里_win7电脑不休眠怎么设置
  12. MATLAB数组生成、引用
  13. Enolsoft PDF Converter with OCR激活版
  14. 戴尔服务器2012系统密钥,戴尔恢复密钥在哪里找
  15. 程序员必学电脑计算机专业英语词汇 12 (153 单词)(完)
  16. Leetcode:799. 香槟塔
  17. 在动态表格中智能搜索框JS实现(layui的智能搜索不能手动输入的问题解决)
  18. c语言若输入错误的是,C语言新人常见问题与错误
  19. Shell脚本读取mysql结果集各数据项的值
  20. 如何在keil中将文件封装为lib库文件

热门文章

  1. C/C++开源项目资源,值得学习。
  2. 电子计算机对会计工作的影响,会计毕业论文会计电算化对会计工作的影响分析...
  3. 三星S10系列首销告捷:热度高涨超前代 供不应求也要“拧螺丝”
  4. word2003实现页脚插入页码第几页以及在特定的页插入页脚
  5. 构造函数执行多少次?
  6. 荣耀MagicBook X14怎么样(好不好用)
  7. 【bzoj1038】[ZJOI2008]瞭望塔【模拟退火】
  8. 未来电器递交注册:年营收4.59亿 莫文艺家族色彩浓厚
  9. Python 正则表达式-基础操作
  10. PPP HOWTO 中译版