MySQL011:多表查询

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

SELECT *FROM film,`types`

MySQL011:多表查询
二,内连接
针对上面的数据我们要进行筛选,发现只要当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`

MySQL011:多表查询
案例:查询哪些会员喜欢哪些类型?
典型的三张表的多表查询,不管来多少表,都按那个格式走就对了。

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行数据

2,右外连接
3,全外连接

上一篇:MongoDB学习


下一篇:MongoDB 查询文档随笔