mysql(3)—— 内连接、外连接的区别
先来看一下,内连接的语法:
SELECT XXX FROM XXX INNER JOIN XXX ON XXX;
这里 INNER 可以省略,在上一篇博客中我们对于笛卡尔积现象的研究中(http://www.cnblogs.com/cdf-opensource-007/p/6507678.html)用到的就是内连接,但这并不能说明笛卡尔积算法只是适用于内连接,笛卡尔积算法针对的是表之间数据行的匹配次数,跟内连接还是外连接无关,至于查询结果与你的查询条件有关系,在本文中将对这一算法和内、外连接的区别加以说明。
内连接指的是把表连接时表与表之间匹配的数据行查询出来,就是两张表之间数据行匹配时,要同时满足ON语句后面的条件才行。
左连接和右连接,又叫左外连接和右外连接。
我们来看一下左连接的语法
SELECT XXX FROM XXX LEFT OUTER JOIN XXX ON XXX
左连接的意思是,无论是否符合ON语句后面的表连接条件都会把左边那张表的记录全部查询出来,右边的那张表只匹配符合条件的数据行。右连接则与之相反(这里同样OUTER 可以省略)。
下面我们以左连接为例,来看一下这个匹配的过程。有两张表商品表goods和订单表order_table。
SELECT * FROM goods g LEFT JOIN order_table ot ON g.id = ot.goods_id


数据行间的匹配以此类推。
最终结果是:

蓝线部分表示两张表数据行之间的匹配符合 ON g.id = ot.goods_id,虚线则表示不符合匹配条件,我们看到步骤二中,即使左边的表跟右边的表没有一行数据能够匹配的,左边的表的数据行还是会出现在连接之后的临时表中,而这时右边的数据行的内容用Null填充。根据分析我们还可以看到,数据行之间匹配的次数还是符合笛卡尔积。
最后说一点,我们作为程序员,研究问题还是要仔细深入一点的。当你对原理了解的有够透彻,开发起来也就得心应手了,很多开发中的问题和疑惑也就迎刃而解了,而且在面对其他问题的时候也可做到触类旁通。当然在开发中没有太多的时间让你去研究原理,开发中要以实现功能为前提,可等项目上线的后,你有大把的时间或者空余的时间,你大可去刨根问底,深入的去研究一项技术,为觉得这对一名程序员的成长是很重要的事情。
mysql(3)—— 内连接、外连接的区别的更多相关文章
- mysql数据库中的多表查询(内连接,外连接,子查询)
用两个表(a_table.b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接.外连接( 左(外)连接.右(外)连接.全(外)连接). MySQL版 ...
- 知识点:Oracle+表连接方式(内连接-外连接-自连接)+详解 来自百度文库
Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右 ...
- sql内连接外连接自然连接
为什么我们要使用内连接和外连接呢?可以从两张或者多张表中找出,我们需要的属性. 这个比较好:http://www.cnblogs.com/youzhangjin/archive/2009/05/22/ ...
- mysql 内连接 左连接 右连接 外连接
mysql> desc student;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | ...
- mysql中的内连接,外连接实例详解
内连接: 只连接匹配的行左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边 ...
- SQL中的内连接外连接和交叉连接是什么意思?
内连接又分为等值连接.自然连接和不等连接三种. 外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN).右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接( ...
- Oracle内链接+外连接详解
inner join(内连接) 内连接也称为等同连接,返回的结果集是两个表中所有相匹配的数据,而舍弃不匹配的数据.也就是说,在这种查询中,DBMS只返回来自源表中的相关的行,即查询的结果表包含的两源表 ...
- SQL内连接-外连接join,left join,right join,full join
1.创建测试表test1及test2 SQL)); 表已创建. SQL)); 表已创建. ,'name1'); ,'name2'); ,'name3'); ,'name4'); ,'name5'); ...
- oracle 内连接 外连接 查询 笔记
elect ename,job,sal from emp where deptno>10 order by sal desc; 联合查询,PK dept.deptno FK emp.deptno ...
- mysql8必知必会7 连接 内连接 外连接 交叉连接
/* 2 需求:建立产品和分类表 1.查询每种分类的产品数量,没有产品的分类也要统计.(cname,quantity) 2.根据分类名称查询分类中的所有产品 */ -- --------------- ...
随机推荐
- linux学习之路--(六)用户及权限详解
计算机资源 用户 用户的容器,用户组 权限 进程时用户访问计算机的代理,操作文件的时候,文件本身有权限,进程本身也有权限 安全上下文(secure context) 权限: r, w, x 文件: r ...
- python爬微信公众号前10篇历史文章(3)-lxml&xpath初探
理解lxml以及xpath 什么是lxml? python中用来处理XML和HTML的library.与其他相比,它能提供很好的性能, 并且它支持XPath. 具体可以查看官方文档->http: ...
- 前端水印图片及文字js教程
前端水印图片文字教程如下,复制代码修改图片地址即可看到效果,工作中遇到总结的,喜欢就关注下哦: <!DOCTYPE html><html> <head> <m ...
- CSS Grid 网格布局全解析
介绍 CSS Grid(网格) 布局使我们能够比以往任何时候都可以更灵活构建和控制自定义网格. Grid(网格) 布局使我们能够将网页分成具有简单属性的行和列.它还能使我们在不改变任何HTML的情况下 ...
- 深入理解Java虚拟机(第2版) 笔记目录
本篇为读深入理解Java虚拟机(第2版)一书的笔记目录. Java 运行期数据区 Java 垃圾回收算法 Java 内存分配策略 Java 类文件结构 Java 加载.链接.初始化 Java 类加载器
- 可能是最好的SQL入门教程
个人博客:这可能是最好的SQL入门教程
- CXF-01: WebService的第一个例子
HelloWorld.java: package com.war3.ws; import javax.jws.WebService; @WebService public interface Hell ...
- Jdk1.7+eclipse搭建Java开发环境
Jdk1.7+eclipse搭建Java开发环境 1. 下载jdk1.7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7 ...
- Vue的组件
1,局部组件就是在Vue对象内部注册的构造器 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- xpath获取下一页,兄弟结点的妙用
第一页的情况: 第四页的情况 : 文章的链接: http://tech.huanqiu.com/science/2018-02/11605853_4.html 从上面我们可以看到,如果仅仅用xpat ...