MySql多表查询

创建测试表TEACHER(教师表)、COURSE(课程表)、STUDENT(学生表)

TEACHER:

TNO 教工号
TNAME 教师姓名
CNO 课程号
SAL 工资
DNAME 所在系
TSEX 性别
AGE 年龄

COURSE:

CNO 课程号
CNAME 课程名
TIME 课时
SCOUNT 人数
CTEST 考试时间

STUDENT:

SNO 学生号
SNAME 学生性名
DNAME 系名
SSEX 性别
CNO 课程号
MARK 成绩
TYPE 课程类型

二表连接

  • 查询所有教师姓名、系名、课程名及考试时间

多表连接

  • 查询所有学生姓名、所在系、课程名、考试时间、考试成绩及老师姓名

AS别名

自连接

  • 查询所有考试成绩大于60的学生姓名、所在系、课程号及考试成绩

自然连接

  • 将表中具有相同名称的列自动进行记录匹配,等同于WHERE的等值连接,但是WHERE更加灵活。

  • 这里匹配两个表中的CNO和DNAME列,当两列均相同,才能连接起来。如果只需要匹配CNO则需要WHERE

上述自然连接等同于如下WHERE等值连接

内连接

  • 返回两个表中所有相匹配的数据,舍弃掉不匹配的数据

  • 返回所有学生姓名、系名、课程号和教师姓名

  • INNER JOIN 一次只能连接两个表,多个表需要多次连接

  • 返回所有学生姓名、系名、课程名、考试时间、考试成绩和老师姓名

外连接

  • 匹配不仅包含符合条件的行,还包括左表(左外连接)、右表(右外连接)或两个连接表(全外连接)中的所有数据行
表R A B C 表S C D
a1 b1 c1 c1 d1
a2 b2 c2 c2 d2
a3 b3 c3 c4 d3

左外连接

  • R left outer join S on R.C = S.C
A B C C D
a1 b1 c1 c1 d1
a2 b2 c2 c2 d2
a3 b3 c3 null null
  • 查询所有同学的学号、姓名、课程号、课程名、考试时间和成绩信息

右外连接

  • R right outer join S on R.C = S.C
A B C C D
a1 b1 c1 c1 d1
a2 b2 c2 c2 d2
null null null c4 d3
  • 查询所有学生的学号、姓名、课程号、课程名、考试时间和成绩信息

交叉连接

  • 返回两个表的所有数据行的笛卡尔积

  • R cross join S

A B R.C S.C D
a1 b1 c1 c1 d1
a1 b1 c1 c2 d2
a1 b1 c1 c4 d3
a2 b2 c2 c1 d1
a2 b2 c2 c2 d2
a2 b2 c2 c4 d3
a3 b3 c3 c1 d1
a3 b3 c3 c2 d2
a3 b3 c3 c4 d3

UNION

  • 对集合进行关系并运算

  • 分别取出课程号为1和10的学生号、学生姓名和系名然后进行并运算

UNION全外连接

  • 全外连接包括匹配行外,还包括左右表不匹配行。MySql没有全外连接我们可以用UNION来实现。

  • 全外连接

A B R.C S.C D
a1 b1 c1 c1 d1
a2 b2 c2 c2 d2
a3 b3 c3 null null
null null null c4 d3

原文地址:https://www.cnblogs.com/chenjy1225/p/11362234.html