首页
学习
活动
专区
圈层
工具
发布

MySQL的JOIN用法

数据库中的JOIN称为连接,连接的主要作用是根据两个或多个表中的列之间的关系,获取存在于不同表中的数据。连接分为三类:内连接、外连接、全连接。...另外还有CROSS JOIN(笛卡尔积),个人认为如果要理解MySQL中JOIN的各种连接,只需要理解笛卡尔积就足够了。...数据 CROSS JOIN 笛卡尔积就是将表1的每条记录与表2中的每一条记录拼成数据对,CROSS JOIN的SQL执行语句如下: SELECT t1.id, t2.id FROM t1 CROSS...下图解释了表t1和t2之间的内连接操作: ? 内连接 LEFT JOIN 左连接(LEFT JOIN)的含义就是求两个表的交集外加左表剩下的数据。...左连接 RIGHT JOIN 右连接RIGHT JOIN就是求两个表的交集外加右表剩下的数据。

2.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    mysql left join、right join、inner join用法分析

    四种联接 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join...(等值联接) 只返回两个表中联结字段相等的行 cross join(交叉联接) 得到的结果是两个表的乘积,即笛卡尔积 创建表 CREATE TABLE `product` (`id` int...跟left join相反,不多做解释,MySQL本身不支持所说的full join(全连接),但可以通过union来实现。...(交叉联接) cross join:交叉联接,得到的结果是两个表的乘积,即笛卡尔积。...它将从匹配阶段产生的数据中检索过滤。 所以我们要注意:在使用Left (right) join的时候,一定要在先给出尽可能多的匹配满足条件,减少Where的执行。

    3.7K70

    MySQL系列之Natural Join用法

    Natural join即自然连接,natural join等同于inner join或inner using,其作用是将两个表中具有相同名称的列进行匹配 用https://www.w3resource.com...的图例: Natural join特征: 关联的表具有一对或多对同名的列 连接时候不需要使用on或者using关键字 建立两张表: CREATE TABLE t1(id INT,desc1 VARCHAR...mysql5.7版本验证 修改一下t1的id类型 ALTER TABLE t1 MODIFY id VARCHAR(50); 继续查询,用natural join,验证后发现还可以查询的 SELECT...SET @session.sql_mode = 'STRICT_TRANS_TABLES'; 开启严格模式,继续查询都没问题,所以mysql的语法还是相对没那么严格限制的 ok,综上,可以得出,natural...join只是根据列的名称和数据进行关联而已,在5.7版本并没有限制要求列的类型要一样,而且natural join连接时候也不需要使用on或者using关键字

    1.1K20

    MySQL基础之Natural Join用法

    join或inner using,其作用是将两个表中具有相同名称的列进行匹配 用https://www.w3resource.com的图例: ?...Natural join特征: 关联的表具有一对或多对同名的列 连接时候不需要使用on或者using关键字 建立两张表: CREATE TABLE t1(id INT,desc1 VARCHAR(50)...ok,接着验证列类型不一样是否还可以继续关联,本博客只在mysql5.7版本验证 ?...SET @session.sql_mode = 'STRICT_TRANS_TABLES'; 开启严格模式,继续查询都没问题,所以mysql的语法还是相对没那么严格限制的 ok,综上,可以得出,natural...join只是根据列的名称和数据进行关联而已,在5.7版本并没有限制要求列的类型要一样,而且natural join连接时候也不需要使用on或者using关键字

    1.3K20

    MySQL基础之STRAIGHT JOIN用法简介

    本文链接:https://blog.csdn.net/u014427391/article/details/102985979 MySQL基础之STRAIGHT JOIN用法简介 引用mysql官方手册的说法...翻译过来就是:STRAIGHT_JOIN与 JOIN 类似,只不过左表始终在右表之前读取。这可用于联接优化器以次优顺序处理表的那些(少数)情况。...join反之,而STRAIGHT_JOIN就是在内连接中使用,而强制使用左表来当驱动表,所以这个特性可以用于一些调优,强制改变mysql的优化器选择的执行计划 ok,写个例子进行实验 创建部门表dept...ps:对于执行计划的知识可以参考我之前博客:MySQL调优之Explain执行计划学习笔记 用STRAIGHT_JOIN连接的写法: EXPLAIN SELECT a....`EMPNO` ; 从执行计划可以看出强制用emp表做驱动表了,而且不走索引,全表扫描了,之前的还是ref,是有走索引的 ?

    97510

    MySQL系列之STRAIGHT JOIN用法简介

    MySQL系列之STRAIGHT JOIN用法简介 引用mysql官方手册的说法: STRAIGHT_JOIN is similar to JOIN, except that the left table...翻译过来就是:STRAIGHT_JOIN与 JOIN 类似,只不过左表始终在右表之前读取。这可用于联接优化器以次优顺序处理表的那些(少数)情况。...join反之,而STRAIGHT_JOIN就是在内连接中使用,而强制使用左表来当驱动表,所以这个特性可以用于一些调优,强制改变mysql的优化器选择的执行计划 ok,写个例子进行实验 创建部门表dept...`EMPNO` ; 查看执行计划,可以看出是以dept表为驱动表的 ps:对于执行计划的知识可以参考我之前博客:MySQL调优之Explain执行计划学习笔记 用STRAIGHT_JOIN连接的写法...`EMPNO` ; 从执行计划可以看出强制用emp表做驱动表了,而且不走索引,全表扫描了,之前的还是ref,是有走索引的

    59210

    mysql数据库多表各种join用法

    o ON o.user_id=u.user_id WHERE u.user_name='张三';  这样就可以直接查询到张三的订单信息了 join分  left join,返回左表所有符合条件的记录和右表连接相等的记录...inner join,只返回两个表中联结字段相等的行 right join,返回右表所有符合条件的记录和左表连接相等的记录 语法为 FROM table1 LEFT JOIN(INNEER  RIGHT...='李四'; 查询结果是空的 因为inner join 只返回连接相等的行,order表是没有关于李四的订单记录的 LEFT JOIN  SELECT o.* FROM user AS u INNER...表没有内容,所以只返回左表的数据 RIGHT JOIN 和LEFT JOIN相反 例如我想查询买了机械键盘套装的会员有多少 SELECT o.* FROM user AS u INNER JOIN order...这就是 mysql join区别和用法了 本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn 上一篇:

    1.4K10

    MySQL应用之CROSS JOIN用法简介教程

    /mysql-cross-join.php 1. cross join简介 MySQL cross join是mysql中的一种连接方式,区别于内连接和外连接,对于cross join连接来说,其实使用的就是笛卡尔连接...在MySQL中,当CROSS JOIN不使用WHERE子句时,CROSS JOIN产生了一个结果集,该结果集是两个关联表的行的乘积。...2. cross join用法 cross join用法: SELECT * FROM t1 CROSS JOIN t2; 注意:cross join的时候是不需要on或者using关键字的,这个是区别于...CROSS JOIN table113) ON table111.id=table113.id; ok,介绍了cross join的简单用法,现在拿http://www.mysqltutorial.org...的常用使用场景,当然除了两篇博客提出的用法,cross join因为其笛卡尔连接的特性,还可以用于批量写数据,对应批量的写法,可以参考我之前的MySQL博客,本博客性质属于翻译的,所以转载请注明出处

    9.9K40

    【MySQL】014-join连接语句用法详解

    ,甚至是左表中没有和它匹配的记录; 二、Inner Join(内连接) 1、概述 仅选出两张表中相互匹配的记录; (join和inner join没有区别) 基于链接谓词将两张表(如A和B)的列组合在一起...概述 包含所有右表中的记录,甚至是左表中没有和它匹配的记录; 2、语法格式 select from TableA A right join TableB B on A.Key...is null; 3、演示问题 问题: select * from user1 a full join user2 b on a.user_name = b.user_name; 答案: MySQL不支持全连接...B; 集合A中的每一条数据与集合B中的每一条数据进行匹配产生的结果集; 2、语法格式 select * from TableA cross join TablkB; 3、演示 SQL语句: select...* from user1 cross join user2; 执行结果: 七、使用Join更新表 1、需求描述 将同时存在于user1和user2中的人的user1中的over字段更改为“齐天大圣”;

    1.1K10

    SQL的各种连接(cross join、inner join、full join)的用法理解

    交叉连接CROSS JOIN 如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积; 举例,下列A、B、C 执行结果相同,但是效率不一样: A:SELECT...内连接INNER JOIN 两边表同时符合条件的组合 如果仅仅使用 SELECT * FROM table1 INNER JOIN table2 内连接如果没有指定连接条件的话,和笛卡尔积的交叉连接结果一样...外连接OUTER JOIN 指定条件的内连接,仅仅返回符合连接条件的条目。...[OUTER] JOIN ON a.column=b.column 2)右外连接RIGHT [OUTER] JOIN 显示符合条件的数据行,同时显示右边数据表不符合条件的数据行,左边没有对应的条目显示...NULL 例如 SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column 3)全外连接full [outer] join 显示符合条件的数据行

    2.6K20
    领券