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

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.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    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的执行。

    4K70

    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.2K20

    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.5K20

    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,是有走索引的 ?

    1.2K10

    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,是有走索引的

    70810

    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.6K10

    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博客,本博客性质属于翻译的,所以转载请注明出处

    10.1K40

    【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.4K10

    Mysql中的join、cross join、inner join是等效的

    这段话表明,在Mysql的执行引擎对sql的解析阶段,都会将right join转换为left join;而对于inner join,则会进行如下转换: FROM (T1, ...)...其实对于right join转换为left join是可以理解的,因为通过这样的转换,一方面可以使得底层的实现变得统一,另一方面其实也是受限于Mysql只实现了nested-join loop(NLJ)...直到我看到了Mysql官网(参考博客2)上的另一段话: In MySQL, JOIN, CROSS JOIN, and INNER JOIN are syntactic equivalents (they...这段话表明,在MySQL中,join、cross join和inner join这三者是等效的,而在标准的SQL查询中,这三者是不等效的。到这里,一切就能说得通了。...在上面的示例中,如果我们将left join改写成inner join,由于where条件中的R(T2)可以极大地过滤不满足条件的语句,mysql先查T2,再查T1就会有较大的性能提升。

    2.9K20
    领券