1--多表关系
多表关系基本上分为三种:
一对多(多对一);
多对多;
一对一;
1-1--多对一
在多的一方建立外键,指向一的一方的主键;
1-2--多对多
建立第三张中间表,中间表至少包含两个外键,分别关联两方主键;
1-3--一对一
在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE);
2--多表查询分类
多表查询存在笛卡尔乘积的问题,可借助where语句实现多表查询;
# 借助 where 语句查询 emp 表和 dept 表
select * from emp, dept where emp.dept_id = dept.id;
多表查询分类:
连接查询:内连接、外连接、自连接;
子查询
2-1--内连接
内连接查询语法:隐式内连接和显式内连接;
内连接查询的是两张表交集的部分;
# 隐式内连接语法
SELECT 字段列表 FROM 表1, 表2 WHERE 条件...;
# 显式内连接语法
SELECT 字段列表 FROM 表1 [INNER] JOIN ON 连接条件...;
# 内连接案例
1. 查询每一个员工的姓名,以及关联的部门的名称,表结构为 emp 和 dept,连接条件是 emp.dept_id = dept.id;
# 隐式实例
select emp.name, dept.name from emp, dept where emp.dept_id = dept.id;
# 使用表别名
select e.name, d.name from emp e, dept d where e.dept_id = d.id;
# 显式实例
select e.name, d.name from emp e inner join dept d on e.dept_id = d.id;
# 省略 inner
select e.name, d.name from emp e join dept d on e.dept_id = d.id;