【MySQL】多表查询


多表连接语法:

where链接:略
from链接:略


例子:

教职工表Teacher(Tno, TName, age, sal, mgr, DNo),TNo为教职工编号,TName为教职工姓名,age年龄,sal为月薪,mgr为教职工的上一级领导的职工号,DNo为部门号;
课程表Course(Cno, CName, CCredits, CTno),Cno为课程编号,CName为课程名字,CCredits为课程学分, CTno为该课程上课老师的编号,其中外键CTno来自表Teacher的Tno键;
学生表Student(Sno, CLno, SName, SSex, SBir, Email),其中Sno为学生学号,CLno为系别编号,SName为学生姓名,SSex为学生性别,SBir为学生出生日期;
学生选课表SC(Sno, Cno, Score)。


  1. 查询选修了数据库的学生的学号
    【MySQL】多表查询_第1张图片
  2. 查询JAVA成绩不及格的学生学号姓名成绩
    【MySQL】多表查询_第2张图片
  3. 使用内连接查询每个学生及其选修课程情况;
    【MySQL】多表查询_第3张图片
  4. 使用左连接查询查询每个学生及其选修课程情况,并讨论和上一题结果的区别;
    在这里插入图片描述
    左连接:student表左连接sc表,意味着查询结果集中必须包含student表的全部记录,然后student表按学号与sc表连接,因为00005~00007号无sc表信息,所以插入NULL值代替。
  5. 使用连接查询选修了张三老师所授课程的学生学号姓名
SELECT student.SNo,SName
FROM student INNER JOIN sc ON student.SNo=sc.SNo 
INNER JOIN course ON sc.CNo=course.CNo 
INNER JOIN teacher ON course.CTno=teacher.Tno 
WHERE TName='张三'

【MySQL】多表查询_第4张图片
6. 查询和马行空在同一个系的学生名字
在这里插入图片描述【MySQL】多表查询_第5张图片
7. 查询001号课程的最高分学生学号姓名
【MySQL】多表查询_第6张图片
8. 使用IN查询教师张七的下属教师名字
【MySQL】多表查询_第7张图片
9. 使用NOT IN查询未选修”数据库”课程的学生学号
【MySQL】多表查询_第8张图片
10. 使用EXISTS查询00014号选修的课程名
【MySQL】多表查询_第9张图片
11. 使用NOT EXISTS查询00014号未选修的课程名
【MySQL】多表查询_第10张图片
12. 查询选修了两名课程及以上的学生姓名学号
【MySQL】多表查询_第11张图片
13. 查询选修了所有课程的学生学号姓名
【MySQL】多表查询_第12张图片
14. 在选修课001中,使用ALL查询比学号00001和学号00004的成绩都低的学生学号

SELECT SNO
FROM SC 
WHERE CNo='001' AND score<ALL
(SELECT score 
FROM SC WHERE (SNO='00001' OR SNO='00004') AND CNo='001')

在这里插入图片描述

  1. 在选修课001中,使用ANY查询比学号00001或学号00004的成绩低的学生学号
SELECT SNO
FROM SC 
WHERE CNo='001' AND score<ANY
(SELECT score 
FROM SC WHERE (SNO='00001' OR SNO='00004') AND CNo='001')

在这里插入图片描述

  1. 在选修课001中,查询最高分的学生学号
    【MySQL】多表查询_第13张图片
  2. 查询系号为01成绩都及格的学生的姓名平均成绩,按平均成绩降序排序;
    【MySQL】多表查询_第14张图片
  3. 分别查询选修了001号课程的学生学号和选修了002号课程的学生学号,使用UNION和UNION ALL把两个查询结果合并起来,并讨论查询结果异同;
    【MySQL】多表查询_第15张图片
    在这里插入图片描述
    【MySQL】多表查询_第16张图片
    在这里插入图片描述
    因为union将多个查询结果合并起来时,系统自动去掉重复元组;union all将多个查询结果合并起来时,保留重复元组 ,所以上面结果集中的sno值出现重复。
  4. 查询课程名以英文字母开头的课程信息。
    【MySQL】多表查询_第17张图片
  5. 查询课程名纯英文字母的课程信息
select * 
from course
where CName regexp '^[a-z]*[a-z]$';

在这里插入图片描述

你可能感兴趣的:(笔记,学习)