ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL011:多表查询

2019-05-19 21:55:25  阅读:280  来源: 互联网

标签:10 多表 SELECT 查询 MySQL011 types tid film likes


前面我们给一张电影表设置外键之后,跨表查只能查到电影类型对应的数字,但是具体查不到电影的具体类型,还是拿着这个序号去电影类型表去查,我们想在一张表上就把电影类型显示出来,就要用到多表查询。
一,交叉连接:也叫卡迪尔积,自然连接
比如:同时查两张表中的信息,第一张表有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行数据

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

标签:10,多表,SELECT,查询,MySQL011,types,tid,film,likes
来源: https://blog.csdn.net/weixin_44699728/article/details/90347924

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有