MySQL JOIN 语法说明与 图解

一、MySQL JOIN 分类

JOIN 按照功能大致分为如下三类:

INNER JOIN(内连接):取得两个表中存在连接匹配关系的记录。

LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。

RIGHT JOIN(右连接):与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录。

二、图解关系

INNER JOIN:用于取得两个表中存在连接匹配关系的记录。

mysql> select * from a inner join score on a.sn=score.sn;

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

| id | name    | sn    | id | sn    | score |

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

|  1 | mashen  | 10086 |  1 | 10086 |    90 |

|  2 | haishen | 10087 |  2 | 10087 |    59 |

|  3 | haoge   | 10088 |  3 | 10088 |    77 |

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

3 rows in set (0.24 sec)

mysql> select * from a  join score on a.sn=score.sn;

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

| id | name    | sn    | id | sn    | score |

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

|  1 | mashen  | 10086 |  1 | 10086 |    90 |

|  2 | haishen | 10087 |  2 | 10087 |    59 |

|  3 | haoge   | 10088 |  3 | 10088 |    77 |

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

3 rows in set (0.00 sec)

Inner join
产生的结果集中,是A和B的交集。

当2个关联表字段相同时候 也可以用using(sn),这样using 里的字段显示一次.....

mysql> select * from a  join score using(sn);

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

| sn    | id | name    | id | score |

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

| 10086 |  1 | mashen  |  1 |    90 |

| 10087 |  2 | haishen |  2 |    59 |

| 10088 |  3 | haoge   |  3 |    77 |

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

LEFT JOIN:产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代

mysql> select * from a left join score on a.sn=score.sn;

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

| id | name      | sn    | id   | sn    | score |

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

|  1 | mashen    | 10086 |    1 | 10086 |    90 |

|  2 | haishen   | 10087 |    2 | 10087 |    59 |

|  3 | haoge     | 10088 |    3 | 10088 |    77 |

|  8 | left join | 11122 | NULL |  NULL |  NULL |

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

4 rows in set (0.00 sec)

##产生在A表中有而在B表中没有的集合,在业务求新增的时候经常使用到的语法:

mysql> select * from a left join score on a.sn=score.sn where score.id is null;

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

| id | name      | sn    | id   | sn   | score |

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

|  8 | left join | 11122 | NULL | NULL |  NULL |

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

1 row in set (0.01 sec)

##产生在b表中有而在a表中没有的集合,就是INNER JOIN

mysql> select * from a left join score on a.sn=score.sn where score.id is not null

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

| id | name    | sn    | id   | sn    | score |

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

|  1 | mashen  | 10086 |    1 | 10086 |    90 |

|  2 | haishen | 10087 |    2 | 10087 |    59 |

|  3 | haoge   | 10088 |    3 | 10088 |    77 |

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

RIGHT JOIN:产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代,与left join 相反.

mysql> select * from a right join score on a.sn=score.sn

-> ;

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

| id   | name    | sn    | id | sn    | score |

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

|    1 | mashen  | 10086 |  1 | 10086 |    90 |

|    2 | haishen | 10087 |  2 | 10087 |    59 |

|    3 | haoge   | 10088 |  3 | 10088 |    77 |

| NULL | NULL    |  NULL |  4 | 10089 |    77 |

| NULL | NULL    |  NULL |  5 | 10090 |    70 |

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

5 rows in set (0.00 sec)

##产生在b表中有而在a表中没有的集合,没有匹配显示null

mysql> select * from a right join score on a.sn=score.sn where a.id is null;

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

| id   | name | sn   | id | sn    | score |

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

| NULL | NULL | NULL |  4 | 10089 |    77 |

| NULL | NULL | NULL |  5 | 10090 |    70 |

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

时间: 2024-08-07 07:51:09

MySQL JOIN 语法说明与 图解的相关文章

Mysql Join语法解析与性能分析详解

一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录. RIGHT JOIN(右连接):与 LEF

Mysql Join语法解析与性能分析

一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录,即使右表(table2)并无对应匹配记录. RIGHT JOIN(右连接):与 LEF

Mysql Join语法以及性能优化

引言 内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分.外左联结与外右联结的区别在于如果用A左联结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反,这样也就不会混淆了. 一.Join语法概述 join 用于多表中字段之间的联系,语法如下: 代码如下: FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: IN

MySql Join 语法 性能 优化

联结的语法: ... from table1 inner|left|right join table2 on condition 内外联结的区别: 内联结将去除所有不符合条件condition的记录,外联结将保留部分不符合condition的记录:           左联结将保留左边表table1的记录,此时右边表table2只返回符合condition的记录. 1,join概述 ... from table1 inner|left|right join table2 on condition

图解MYSQL JOIN ON,SQL JOIN 详解,数据库sql join语句

对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams 解释了SQL的Join.我觉得清楚易懂,转过来. 假设我们有两张表. Table A 是左边的表. Table B 是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示

图解mysql join

原文:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins 这个图文解释mysql join的各种技巧

MySQL JOIN 多表连接

除了常用的两个表连接之外,SQL(MySQL) JOIN 语法还支持多表连接.多表连接基本语法如下: 1 ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON condition INNER|LEFT|RIGHTJOIN table3 ON condition ... JOIN 多表连接实现了从多个表中获取相关数据,下面是三个原始数据表: article 文章表: aid title content uid tid 1 文章1 文章1正文内容… 1 1

MySQL的安装(详细图解)

MySQL的安装(详细图解) 如果你之前已经装过mysql的话,要先把它卸载,并通过"sc delete mysql"命令把mysql对应的"windows服务"删除掉 mysql安装包下载地址: 64位:http://download.pchome.net/internet/server/dbserver/detail-37168.html 下载完成之后,打开安装包,接下来的步骤就跟我的图解一样咯~ 千万不要改路径!!!!!!!!!!! 选择配置方式,“Detai

mysql join 对比和分析

学习的时候了解了一下join操作,包含left join,right join,inner join和out join,每种操作之后生成的表的空间大小不同:假设A和B表做join操作,如果是left join,则以A表为基准,然后和B表进行匹配,表的大小至少A表的大小(乘以B表中和A表中连接的最大覆盖率,及A表的一条记录所对应B表中记录的最大条数):则right join则以B表为基准:inner join,则为A和B intersection之后的交集:outer intersection,则