多表查询的分类
内连接
隐式内连接
显式内连接
外连接
左外连接
右外连接
内连接
用左边表的记录去匹配右边表的记录, 如果符合条件的则显示. 如: 从表. 外键 = 主表. 主键
隐式内连接
隐式内连接: 看不到 JOIN 关键字, 条件使用 WHERE 指定
SELECT 字段名 FROM 左表, 右表 WHERE 条件
如:
创建一个学生个人信息表
- CREATE TABLE students(
- Id INT(30),
- Name VARCHAR(10),
- Age INT(4),
- Gender VARCHAR(25),
- PRIMARY KEY(Id)
- );
创建一个学习成绩表
- CREATE TABLE course(
- Id INT(30),
- Java INT(5),
- Python INT(5),
- MySQL INT(5),
- Hadoop INT(5),
- C INT(5),
- PHP INT(5),
- Linux INT(5),
- English INT(5),
- Math INT(5),
- CONSTRAINT id_course FOREIGN KEY(Id) REFERENCES students(Id)
- );
学习成绩表的外键连接学生个人信息表的主键. 这个时候, 如果我们想要查询学生的 Java 成绩,
SELECT name, Java FROM students, course WHERE course.Id = students.Id;
显式内连接
显示内连接: 使用 INNER JOIN ... ON 语句, 可以省略 INNER
SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 条件
如:
还是上面创建的 students 表和 course 表
SELECT * FROM students INNER JOIN course c ON students.Id = c.Id;
查询 students 表的所有信息, 按 ID 插入 course 表的数据, 一并查询出来.
外连接
左外连接
左外连接: 使用 LEFT OUTER JOIN ... ON,OUTER 可以省略
SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 条件
用左边表的记录去匹配右边表的记录, 如果符合条件的则显示; 否则, 显示 NULL . 可以理解为: 在内连接的基础上保证左表的数据全部显示.
右外连接
右外连接: 使用 RIGHT OUTER JOIN ... ON,OUTER 可以省略
SELECT 字段名 FROM 左表 RIGHT [OUTER] JOIN 右表 ON 条件
用右边表的记录去匹配左边表的记录, 如果符合条件的则显示; 否则, 显示 NULL. 可以理解为: 在内连接的基础上保证右表的数据全部显示.
来源: https://www.cnblogs.com/liyihua/p/12315445.html