MySQL011:多表查询

前面我们给一张电影表设置外键之后,跨表查只能查到电影类型对应的数字,但是具体查不到电影的具体类型,还是拿着这个序号去电影类型表去查,我们想在一张表上就把电影类型显示出来,就要用到多表查询。
一,交叉连接:也叫卡迪尔积,自然连接
比如:同时查两张表中的信息,第一张表有8行,第二张表有15行,那么查他们的组合生成的表就有12*15=120行,这样有个缺点就是我们的15部电影都各自对应一个类型,应该有15行数据是有效的,但是它这足足多出来了120-15=115行垃圾数据。

SELECT *FROM film,`types`

在这里插入图片描述
二,内连接
针对上面的数据我们要进行筛选,发现只要当tid=tid,就是电影类型表的类型对应的tid等于电影表的tid,才是有效数据。

SELECT *FROM film,`types` WHERE types.tid=film.tid

发现只要加个条件就可以了,但这不是标准的内连接,下面才是

SELECT *FROM `types` INNER JOIN film ON types.tid=film.tid

而且这里的INNER可以省略,film和types谁在前面,就先显示谁的数据。
案例:查询所有电影名及对应的类型名

SELECT fname,tname FROM film JOIN  `types` ON film.`tid`=types.`tid`

在这里插入图片描述
案例:查询哪些会员喜欢哪些类型?
典型的三张表的多表查询,不管来多少表,都按那个格式走就对了。

SELECT vname,tname FROM vip,`types`,likes WHERE likes.`tid`= types.`tid`
AND likes.`vid` =vip.`vid`

内连接法

SELECT vname,tname FROM vip INNER JOIN `TYPES` INNER JOIN likes ON likes.`tid`= 	types.`tid`
AND likes.`vid` =vip.`vid`

三,外连接
1,左外连接
就是以左表为基准,事事依着左面,宛如一条舔狗。

比如左表有10行数据,右表有8行数据,那么左表10行数据全部显示,右表不够的用null补齐拼成10行
再比如左表有10行数据,右表有12行数据,那么左表10行数据全部显示,右表多余的删除掉,拼成10行数据

比如查询哪些会员喜欢哪些类型的电影?

SELECT vname,tname FROM vip INNER JOIN `types`
 INNER JOIN likes ON likes.`tid`= types.`tid`
AND likes.`vid` =vip.`vid`

2,右外连接
顾名思义,就是以右面为基准,处处为了右面。

比如右表有10行数据,左表有8行数据,那么右表10行数据全部显示,左表不够的用null补齐拼成10行
再比如右表有10行数据,左表有12行数据,那么由表10行数据全部显示,左表多余的删除掉,拼成10行数据

3,全外连接
MySQL暂时不支持全外连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值