SQL语句中的多表设计和多表查询

一对多和一对一关系

使用外键来实现,但是一般开发环境不允许使用物理外键,容易产生数据库锁死、难维护等麻烦。

一般使用逻辑外键

多对多关系

使用第三方表来关联

多表查询

笛卡尔积

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;
  • 14
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值