2019-12-17 Mysql数据库部分多表查询


多表查询涉及到笛卡尔积,使用内外连接可以消除笛卡尔积,还有很多种方法,这里就不一一列举了,主要是内连接和外连接,帮助大家,也是对自己加深印象

内连接

内连接分为隐式和显示

隐式内连接

因为这种查询方式是将两张表所有的信息先查出来,再进行筛选,所以效率低下
隐式内连接语法:SELECT 列名 FROM 表A ,表B WHERE 表A与表B之间的关系;
设计两张张产品表,产品信息表product和产品库存表product_stock

SELECT * FROM product p,product_stock ps WHERE p.id = ps.product_id;

很好理解,查询 product p,product_stock两张表,过滤条件就是表product中的id等于product_stock中的product_id,如果有一张表中有这个id,而另一张表中没有这个id,则不会查询出来
结果和下面一张图效果一样

显示内连接

因为这种查询方式是直接查询两张表的交集,所以效率相对较高
使用:SELECT 列名 FROM 表A (INNER) JOIN 表B ON 表A与表B之间的关系;
再设计一张产品分类表product_category
查询所有商品的名称和分类名称

SELECT p.product_name,pc.category_name FROM product p
INNER JOIN
product_category pc ON p.category_id = pc.id;

product_name和category_name分别是两张表特有的字段,结果如下,共20条数据:
在这里插入图片描述

外连接

外连接分为左外连接右外连接

左外连接

使用:
SELECT 列名 表A LEFT JOIN 表B ON 表A与表B之间的关系;
使用上面的产品表

SELECT * FROM product p
LEFT JOIN
product_stock ps ON p.id = ps.product_id;

在这里插入图片描述

左外连接,顾名思义,就是以LEFT JOIN左边的表为主,如果左边有一字段的值,而与他关联的表没有与之对应的值,那么会将左边表的所有信息全部查询出来,另一张表没有与之对应的值会用null代替

右外链接

右外连接和左外连接原理相同。这里展示代码和效果

SELECT * FROM product p
RIGHT JOIN
product_stock ps ON p.id = ps.product_id;

效果展示,共17条,因为从上图可以看出有3条是null,所以这里是以另一张表为主的:
在这里插入图片描述
另外,自连接查询和自连接查询我的理解就是内外连接的一个扩展,自连接查询就是将自己查出来的结果作为一张表,然后再与自己关联,子查询就是查询自己的结果作为一个过滤条件

以上就是我想记录的全部内容,如果有不对或改进的地方请指教…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值