一对多和一对一关系
使用外键来实现,但是一般开发环境不允许使用物理外键,容易产生数据库锁死、难维护等麻烦。
一般使用逻辑外键
多对多关系
使用第三方表来关联
多表查询
笛卡尔积
select * from tb_1, tb_2
!注意
请不要尝试在数据量多的时候尝试这么干
笛卡尔积会产生大量的记录,数量为1表记录数 * 2表记录数
容易卡死
where消除笛卡尔积中的无效记录
一对多和多对多的情况下,有效记录不可能是笛卡尔积记录,就像一个人不可能又男又女。所以可以通过如下方法:
select * from tb_1, tb_2 where tb_1.id = tb_2.tid
这样就可以只查询到id与tid字段值相等的链接数据。
内连接
隐式内连接select 字段 from 表1,表2 where 条件
,
select *
from tb_emp, tb_dept
where tb_emp.dept_id = tb_dept.id;
显示内连接select 字段 from 表1 join 表2 on 链接条件
。
select *
from tb_emp
inner join tb_dept
on tb_emp.dept_id = tb_dept.id;
外连接
外连接与内连接的区别在于外连接可以插叙到两表没有关系的数据,内连接只能查询到两表有关系的数据。
外连接分为两种,左外连接和右外连接。
左外连接
是指数据包括内连接部分和1表的单独部分(没有与2表产生连接的记录)其中2表的字段值会为null
,例如:
select tb_dept.name, tb_emp.name
from tb_emp
left join tb_dept
on tb_emp.dept_id = tb_dept.id;
效果:返回tb_emp.dept_id = tb_dept.id
的记录以及表tb_emp中与表tb_dept表没有关系的记录
右外连接
与左外连接差不多显示表2的部分,代码结构如下:
select tb_dept.name, tb_emp.name
from tb_emp
right join tb_dept
on tb_emp.dept_id = tb_dept.id;