join的类型

1.  内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。

2.  外联结:分为外左联结和外右联结。

案例背景

create table java (name varchar(255));

insert into java values ('java1'),('java2'),('blue');

create table mysql (name varchar(255));

insert into mysql values ('mysql1'),('mysql2'),('blue');

内联结

select * from java,mysql where java.name=mysql.name;

SELECT * FROM java JOIN mysql ON java.name=mysql.name;

SELECT * FROM java INNER JOIN mysql ON java.name=mysql.name;

SELECT * FROM java CROSS JOIN mysql ON java.name=mysql.name;

SELECT * FROM java STRAIGHT_JOIN mysql ON java.name=mysql.name;

这四个语句都是内联结,返回结果都是

+------+------+

| name | name |

+------+------+

| blue | blue |

+------+------+

table_reference条目中的每个逗号都看作相当于一个内部联合

默认的JOIN都是INNER JOIN

CROSS JOIN从语法上说与INNER JOIN等同

STRAIGHT_JOIN与JOIN相同。除了有一点不一样,左表会在右表之前被读取。STRAIGH_JOIN可以被用于这样的情况,即联合优化符以错误的顺序排列表。

内联结的语法如下:

join_table:

table_reference [INNER | CROSS] JOIN table_factor [join_condition]

| table_reference STRAIGHT_JOIN table_factor

| table_reference STRAIGHT_JOIN table_factor ON condition

外联结

左联结

SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name;

结果是

+-------+------+

| name | name |

+-------+------+

| java1 | NULL |

| java2 | NULL |

| blue | blue |

+-------+------+

所以从上面结果看出,因为Java表中的java1和java2记录的name没有在MySQL表中有对应name,因此为空,但java 所有的列栏仍有java1和java2记录,mysql表所有列栏为NULL。而剩下的blue的那条记录就是java表和mysql表内连接的结果。

如果对于在LEFT JOIN中的ON或USING部分中的右表没有匹配的记录,则所有列被设置为NULL的一个行被用于右表。如果一个表在其它表中没有对应部分,您可以使用这种方法在这种表中查找记录:

SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name WHERE mysql.name IS NULL;

该sql找出在java的人,但是不在mysql里的人,这里明显是人员'java1'和'java2'符合要求。

右联结

SELECT * FROM java RIGHT JOIN mysql ON java.name=mysql.name;

返回结果是

+------+--------+

| name | name |

+------+--------+

| NULL | mysql1 |

| NULL | mysql2 |

| blue | blue |

+------+--------+

右联结和左联接结果类似,只是这次是mysql表保存所有的结果集。

外联结的语法

join_table:| table_reference LEFT [OUTER] JOIN table_reference join_condition

| table_reference NATURAL [LEFT [OUTER]] JOIN table_factor

| table_reference RIGHT [OUTER] JOIN table_reference join_condition

| table_reference NATURAL [RIGHT [OUTER]] JOIN table_factor

USING(column_list)子句

用于为一系列的列进行命名,这些列必须同时在两个表中存在

SELECT java.*,mysql.* FROM java LEFT JOIN mysql USING (name);

结果返回

+-------+------+

| name | name |

+-------+------+

| java1 | NULL |

| java2 | NULL |

| blue | blue |

+-------+------+

联结的运算顺序

SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c);

--相当于

SELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

括号对于join的顺序的影响

SELECT t1.id,t2.id,t3.id FROM t1,t2 LEFT JOIN t3 ON (t3.id=t1.id) WHERE t1.id=t2.id;

--实际上这么执行

SELECT t1.id,t2.id,t3.id FROM t1,( t2 LEFT JOIN t3 ON (t3.id=t1.id) ) WHERE t1.id=t2.id;

--应该这么写

SELECT t1.id,t2.id,t3.id FROM (t1,t2) LEFT JOIN t3 ON (t3.id=t1.id) WHERE t1.id=t2.id;

在这里括号是相当重要的,因此以后在写这样的查询的时候我们不要忘记了多写几个括号,至少这样能避免很多错误

以上所述是小编给大家介绍的Mysql join操作,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

mysql中join操作_Mysql中的join操作相关推荐

  1. mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天

    mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...

  2. mysql join图解_MySQL中Join算法实现原理分析[多图]

    在MySQL 中,只有一种 Join 算法,就是大名鼎鼎的 Nested Loop Join,他没有其他很多数据库所提供的 Hash Join,也没有 Sort Merge Join.顾名思义,Nes ...

  3. mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...

    这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...

  4. mysql 中有没有临时表_MySQL 中的两种临时表

    来源:阿里云RDS - 数据库内核组 链接:http://mysql.taobao.org/monthly/2016/06/07/ 外部临时表 通过CREATE TEMPORARY TABLE 创建的 ...

  5. mysql添加临时索引_mysql 中添加索引的三种方法

    在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法 mysql 中添加索引的三种方法 1.1 新建表中添加索 ...

  6. mysql的财务视图_Mysql中的视图

    阅读目录 什么是视图 通俗的讲,视图就是一条SELECT语句执行后返回的结果集.所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上. 视图的特性 视图是对若干张基本表的引用,一张虚表, ...

  7. mysql 主外键_mysql中主外键关系

    一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, ...

  8. mysql inner join 索引_MySQL 在 INNER JOIN 场景的使用-爱可生

    原标题:MySQL 在 INNER JOIN 场景的使用-爱可生 本文详细介绍了 MySQL 参数 join_buffer_size 在 INNER JOIN 场景的使用,OUTER JOIN 不包含 ...

  9. mysql replace报错_Mysql中replace与replace into的用法讲解

    Mysql replace与replace into都是经常会用到的功能:replace其实是做了一次update操作,而不是先delete再insert:而replace into其实与insert ...

  10. 查看mysql是否内存中读取数据_MySQL中的内存临时表

    //MySQL中的内存临时表// 这两天事情稍微有点多,公众号也停止更新了几天,结果有读者催更了,也是,说明还是有人关注,利己及人,挺好. 今天分享的内容是MySQL中的临时表,对于临时表,之前我其实 ...

最新文章

  1. Netty之WebSocket和四种IO介绍
  2. java byte 正数最大_为什么Java byte 类型的取值范围是-128~127
  3. 【科普】从HTTP到HTTP/3的发展简史
  4. 送外卖也要“黑科技”?阿里移动感知技术应用揭秘
  5. [Perl系列—] 1. 清空目录及目录中的所有文件
  6. 小孩天天不愿意去幼儿园怎么办?
  7. ASP.NET缓存 Cache
  8. C++ 时间操作(获取毫秒级)【转】
  9. 移动端click事件延迟300ms到底是怎么回事,该如何解决?
  10. jquery-galleryview-2.0 漂亮多样化的图片特效(多项自定义)
  11. 肯耐珂萨java_站在尤里奇的肩膀上,肯耐珂萨探讨适用于国内的HR胜任力模型
  12. 能上QQ但打不开网页的简单修复方法
  13. jsp外文期刊免费下载_外文期刊下载
  14. 天基实业怎样投资理财收益稳定
  15. layui 单图片上传 多图片批量上传
  16. 一个有趣的网站:子说
  17. FOC控制原理学习(一)
  18. SPSS教程:数据不符合正态分布,如何统计描述
  19. 信息技术发展的趋势是什么?
  20. 丁益祥c语言答案pdf,丁益祥|

热门文章

  1. 48. Element isSupported() 方法
  2. 数据结构与算法学习网
  3. Dijkstra算法 简易理解(原创)
  4. bzoj1003[ZJOI2006]物流运输
  5. 2015 11月9日 一周工作计划与执行
  6. 数组元素循环右移问题
  7. 控制台应用程序的Main方法
  8. photoshop cs3 无法复制文字的解决方案
  9. 分类数据转换为树形结构
  10. Eclipse启动运行速度调优