首先要介绍一下集合的概念:集合具有无序性、唯一性。

无序性:指集合内部元素没有相对顺序的概念,对于两个集合而言,只要元素值和元素个数相同则两个集合相等。

唯一性:指集合内部元素不存在值相等的元素。

上图所示集合是错误的,因为有2个‘3’违背了唯一性

上图所示的两个集合是相同的,集合元素是无序的

集合的运算:交集、并集、相乘

交集:两个集合公共元素组成的集合

并集:连个集合所有元素组成的集合

相乘:也成笛卡尔积,两个集合所有元素组合的集合

集合1*集合2的结果如下:

其中(1,3)是集合1中的‘1’和集合2中的‘3’的组合

一张表其实就相当于一个集合,每一行是集合的一个元素

现在有两表

goods表:包含商品ID,栏目ID,商品名

channel表:栏目ID,栏目名

现在想得到一张报价单包含商品ID,商品名,栏目ID,栏目名,该如何去做?

全相乘:笛卡尔积 总共有4*4=16 条记录

即两表各个行的所有组合

从两个表行的所有组合中选出满足要求的行

虽然得出了正确答案,但是如果goods表和channel表很大的话,如goods表有1W条记录,channel也有1W条记录。则需要在内存中生成一张1W*1W的临时表,而且绝大部分记录都不是我们所需的。所以全相乘浪费了空间、降低了效率。

现在考虑怎样才能高效实现要求呢?常见的多表关联有左连接、右连接、内连接,哪些能帮助我们来实现上述要求呢?

左连接的语法:表A LEFT JOIN 表B ON 关联条件                      (从表B中找出与表A满足关联条件的行)

右连接的语法:表A RIGHT JOIN 表B ON 关联条件                   (从表A中找出与表B满足关联条件的行)

内连接的语法:表A INNER JOIN 表B ON 关联条件                   (求出表A和表B的公共集)

左连接:

第四条记录后面两个字段为NULL,因为'捷安特'的栏目信息在 表B中没有找到。

右连接:和左连接类似,可以相互转换如:表A LEFT JOIN 表B ON 关联条件  等价于 表B RIGHT JOIN 表A ON 关联条件

推荐使用左连接,比较符合常规逻辑

内连接:

从左右连接和内连接的结果看,内连接少了一条记录,而左右连接出现了NULL的情况。那左右连接和内连接之间到底有什么关联呢?

如有两个表,表A和表B,他们可以通过公共字段来关联,他们之间的关系可以用下图来表示

A INNER JOIN B
:得出的结果是表A和表B的公有数据集C

A lEFT JOIN B:得出的结果是表A记录集A1+公有数据集C,A1中会有NULL出现

B RIGHT JOIN A:得出的结果是公有数据C+表B记录集B1,B1中会有NULL出现

mysql---多表关联的更多相关文章

  1. MySQL 多表关联更新及删除

    目录: <MySQL中的两种临时表> <MySQL 多表关联更新及删除> <mysql查询优化之三:查询优化器提示(hint)> 一.      多表关联更新 问题 ...

  2. MySql多表关联,根据某列取前N条记录问题

    近来遇到一个问题:“MySql多表关联,根据某列取前N条记录”. 刚开始一直在想,SQL语句是否可以做到直接查询出来,但几经折磨,还是没能写出SQL语句,-------如果有大牛的话,望指点迷津.我把 ...

  3. MySQL多表关联数据同时删除

    MySQL多表关联时的多表删除: DELETE t1, t2FROM    t1LEFT JOIN t2 ON t1.id = t2.idWHERE    t1.id = 25

  4. [MySQL]多表关联查询技巧

    示例表A: author_id author_name 1 Kimmy 2 Abel 3 Bill 4 Berton 示例表B: book_id author_id start_date end_da ...

  5. mysql多表关联update

    日常的开发中一般都是写的单表update语句,很少写多表关联的update. 不同于SQL Server,在MySQL中,update的多表连接更新和select的多表连接查询在使用的方法上存在一些小 ...

  6. MySQL多表关联查询数量

    //多表关联查询数量select user, t1.count1, t2.count2from user tleft join ( select user_id, count(sport_type) ...

  7. JDBC MySQL 多表关联查询查询

    public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...

  8. MySQL多表关联查询与存储过程

    --  **************关联查询(多表查询)**************** -- 需求:查询员工及其所在部门(显示员工姓名,部门名称) -- 1.1 交叉连接查询(不推荐.产生笛卡尔乘积 ...

  9. mysql多表关联更新

    update 表A inner join 表B on 表A.关联字段 = 表B.关联字段 set 表a.待更新字段01 = 表B.字段01 , 表a.待更新字段021 = 表B.字段02 where ...

  10. mysql 多表关联查询

    多个表右链接查询 名字,学校名称,学校类型,城市名称,国家地区 左链接查询 子查询 索引 #创建MySQL时添加索引 mysql> create table userIndex( id int ...

随机推荐

  1. Android开发——自动生成Android屏幕适配的dimens.xml文件

    使用dimens.xml解决屏幕适配问题是Android官方解决方案,本文主要讲述了如何自动生成Android屏幕适配的dimens.xml,减少了工作量,在维护dimens.xml文件时更加省时省力 ...

  2. MFC 学习之 鼠标移动到Toolbar按钮上显示提示信息(tooltip),状态栏也随之改变

    1.在ResourceView里加入Toolbar资源,命名IDR_TOOLBAR1 2.在主程序的.h文件中加入变量:           CToolBar m_toolbar;CImageList ...

  3. JNI总结(一)

    JNI 是 Java平台中的一个强大特性.应用程序能够通过 JNI把 C/C++代码集成进 Java程序中.通过 JNI.开发人员在利用 Java平台强大功能的同一时候,又不必放弃对原有代码的投资.由 ...

  4. [Practical Git] Format commit history with git log arguments

    When running the git log command, we can pass in options as arguments toformat the data shown for ea ...

  5. 常用免费的WebServices地址

    天气预报Web服务,数据来源于中国气象局 公用事业http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 中国股票行情分时走势预览缩略图 ...

  6. NSURLSession、NSURLConnection

    NSURLSesstion GET方法 block回调方法NSString * urlStr = @"http://192.168.1.247:8100/stream?cname=cha_2 ...

  7. Android View的绘制机制流程深入详解(四)

    本系列文章主要着重深入介绍Android View的绘制机制及流程,第四篇主要介绍Android自定义View及ViewGroup的实现方法和流程. 主要介绍了自绘控件.自定义组合控件.自定义继承控件 ...

  8. Objective-C中NSArray和NSMutableArray是如何使用的?

    Objective-C的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象.但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才 ...

  9. 安装MySQL在最后的start service停住了解决方法

    今天自己安装mysql在start service卡住了,原来是以前安装过,但是没有删干净.通过下面的方法解决了,特分享下 由于我的MySQL不知道什么原因突然打不开了并报了个10061的错,查了下原 ...

  10. 关于Eclipse中的一些基本知识

    Eclipse中寻找JRE的顺序是:vm参数指定的JRE--->elipse目录下的JRE--->操作系统中默认的JRE,利用这个特性也可以用vm参数来解决当本机安装有多个JRE的情况. ...