美文网首页
16、两表全连接查询报价单

16、两表全连接查询报价单

作者: 小碧小琳 | 来源:发表于2018-12-05 22:12 被阅读0次

一、背景知识:

1.1、笛卡尔积

1.2、表与集合的关系

一张表就是一个集合。
每一行就是一个元素。

可以理解为,拥有相同字段特性的元素都放到同一个集合中。

比如,下图中,表test10有3个元素,表test11有2个元素:

疑问:集合不能重复,但是有可能两行数据完全一样?
答:不可能,MySQL中每一行还有一个row_id的。

1.3、表与表之间的操作

问:既然说表是一个集合,那么笛卡尔积的操作在表与表之间如何体现?
答:直接用“,”(逗号)隔开表名,查询即可。如下图:

可见,上图中查询得到的结果,就是两个表中不同元素之间的组合,共有2*3个结果。

两表做全相乘
从行的角度看:就是两表每一行,两两组合。
从列的角度看:相乘以后结果集中的列,是两表列名的相加。

1.4、有重复列名时的情况

mingoods表来自于goods表的前三行

作全相乘时,如果觉得列比较多,也可以有针对的取出几列。比如只取几列,但是如果有重复的列,会出错:

如果在多表联查时,某一列名,在2张或2张以上表都有,则需要在列名前,指定表名。即“表名.列名”。
如上图中,需要用mingoods.cat_id,category.cat_id来确定列名属于哪里。如下图:

前三列来自于mingoods表,后两列来自于category表。对于每一行来说,结果来自于笛卡尔积。
比如第一行,KD876属于第4个cat_id,手机类型是第一个cat_id的名称。但是这一行,感觉没有太大的意义呀~
图中最后一行中,感觉有意义,KD876正好也属于cat_id=4的3G手机。

说白了,我们希望mingoods.cat_id = category.cat_id时,是我们所认为有意义的。如下:

图1

我们找到了每个商品对应的cat_id以及cat_name。

二、两表全相乘做报价单

根据图1中的查询语句,我们可以舍弃上一篇中的1+N模式了。只需要两表全乘以后,再在where后面加一个判断语句即可。(跟图1的查询语句一样)

在上一篇中的php语言中,用sql的全相乘,再用where做一个筛选,即可得到想要的结果。

至此,往前进了一步,只用了一条sql语句就查出来了。
但是,两表全相乘的效率是很低的,在内存中会生成一个非常大的数据。比如A表一万行,B表一万行,做一个全相乘,就崩了。

由此,引出了左连接。

相关文章

  • 16、两表全连接查询报价单

    一、背景知识: 1.1、笛卡尔积 1.2、表与集合的关系 一张表就是一个集合。每一行就是一个元素。可以理解为,拥有...

  • 多表查询

    两张表: 左连接: 左表全部查询,以左表为基准 右连接: 右表全部查询,以右表为基准 内连接: 找交集

  • MySQL连接查询:交叉连接、内连接

    连接查询 所谓连接查询就是指两个或两个以上的表连接成为一个表进行查询。实际上,两个表的完全连接是指:A表的每一行和...

  • MySQL元数据获取基础笔记day05

    多表连接查询 1、作用 业务需要的数据来自多张表时 2、多表连接查询基本语法 ??内连接? 外链接全链...

  • 数据库自关联,视图,事务

    自关联:自连接查询其实等同于连接查询,需要两张表,只不过它的左表(父表)和右表(子表)都是自己。做自连接查询的时候...

  • sql99: 连接

    内连接用于查询两个表都有外连接用于查询一个表有,另一个表没有

  • Mysql--连接查询和子查询

    连接查询和子查询 一、连接查询 1.1 概念 连接查询:也可以叫跨表查询,需要关联多个表进行查询 1.2 根据年代...

  • mysql的用法3

    -- ==============连接查询==================-- 1.连接查询: 同时查询多个表...

  • 2018-08-15 视图 事务 自关联查询

    自关联查询 自关联:自连接查询其实等同于连接查询, 需要两张表,只不过它的左表(父表)和右表(子表) 都是自己。做...

  • 连接查询;外键

    连接查询 连接查询(join)分类:内连接、外连接、自然连接、交叉连接 使用方式:左表 join 右表 交叉连接(...

网友评论

      本文标题:16、两表全连接查询报价单

      本文链接:https://www.haomeiwen.com/subject/kddwcqtx.html