MySQL的JOIN操作

下面简答介绍下MySQL中常用的JOIN操作,以及会犯得一些简单错误

tips:图是引用网络,如果错误,请指出,感谢。

在MySQL中,逗号(','), JOIN, CROSS JOIN, INNER JOIN在语法上是等价的,能够互相替换(在标准SQL中,它们是不等价的)

然而,逗号(',')运算的优先级小于JOIN, CROSS JOIN, INNER JOIN, LEFT JOIN等,

如果混合使用,则会造on列子句中出现"Unknown column 'col_name' "错误

例如:

SELECT * FROM t1, t2 JOIN t3 ON (t1.i1 = t3.i3);

ERROR 1054 (42S22): Unknown column 't1.i1' in 'on clause'

因为该语句被解析成了:

SELECT * FROM t1, (t2 join t3 on (t1.i1 = t3.i3));

表达式在on和where后的区别

如:

on A.ID = B.ID and B.ID<3:

先筛选出B表ID小于3的结果,在进行JOIN操作

on A.ID = B.ID where B.ID<3:

先进行JOIN操作,在对结果集筛选出B.ID小于3的结果

在inner join中,两者结果没有区别:

如:

select  A.ID as AID, B.ID as BID  from A join B on A.ID = B.ID and B.ID<3;  

select  A.ID as AID, B.ID as BID  from A join B on A.ID = B.ID where  B.ID<3;  

输出结果:

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

| AID | BID |

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

|   1 |   1 |

|   2 |   2 |

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

2 rows in set (0.00 sec)

在left join中,两者结果有区别:

select  A.ID as AID, B.ID as BID  from A left join B on A.ID = B.ID and B.ID<3;  

输出结果:

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

| AID | BID  |

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

|   1 |    1 |

|   2 |    2 |

|   3 | NULL |

|   4 | NULL |

|   5 | NULL |

|   6 | NULL |

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

select  A.ID as AID, B.ID as BID  from A left join B on A.ID = B.ID where B.ID<3 ;

输出结果:

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

| AID | BID  |

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

|   1 |    1 |

|   2 |    2 |

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

JOIN图示:

inner join(内连接):

将A表和B表中存在连接关系的字段,组成的结果集(A表和B表的交集)

关系表示如图:

例句:

select * from a inner join b on a.id=b.id;

===========================

left join(左连接,属于外连接):

以左表为准,去右表找数据,如果没有匹配的数据,则以null补位右表的数据,所以输出结果数为左表原数据集(right join同理)

关系表示如图:

例句:

select * from a left join b on a.id=b.id;

查找A表中有而且B表中没有的集合,表示为图:

语句为:

select * from a left join b on a.id=b.id where b.id is null; 

查找A表中有而且B表中也有的集合,表示为图:

因此left join可以转换为 inner join

语句为:

select * from a left join b on a.id=b.id where b.id is not null;

时间: 2024-10-29 15:49:59

MySQL的JOIN操作的相关文章

mysql LEFT JOIN多表联结查询

具体操作 MySQL支持Select和某些Update和Delete情况下的Join语法,具体语法上的细节有:  table_references:     table_reference [, table_reference] -  table_reference:     table_factor   | join_table  table_factor:     tbl_name [[AS] alias]         [{USE|IGNORE|FORCE} INDEX (key_lis

mysql left join,right join,inner join用法与区别

LEFT JOIN 会将联结关系中左右两个资料表.左边资料表在经过「联结」后,不管是否存在右边资料表资料与之对应,仍然会将资料全部列出,相关范例如下: 旧式WHERE「联结」语法则以WHERE子句中的「*=」表示「左联结(left join)」. 旧式 WHERE 语法  代码如下 复制代码 SELECT C.First_Name, C.Last_Name, O.Order_ID FROM Customer AS C, Order AS O WHERE C.Customer_ID *= O.Or

mysql Left Join, Inner Join实例教程

mysql Left Join, Inner Join实例教程 Left Join, Inner Join 的相关内容,非常实用,对于理解原理和具体应用都很有帮助! 一.先看一些最简单的例子 例子 Table A aid   adate 1      a1 2      a2 3      a3 TableB bid bdate 1    b1 2   b2 4    b4 两个表a,b相连接,要取出id相同的字段 select * from a inner join b on a.aid =

mysql之字符串操作

写在前面 上篇文章学习了mysql常用的日期操作的函数,这篇文章将学习mysql的字符串操作的函数. 系列文章 mysql之创建数据库,创建数据表 mysql之select,insert,delete,update mysql之group by,order by mysql之count,max,min,sum,avg,celing,floor mysql之日期函数 mysql实战 1.ASCII(str) select ascii('a'); select ascii('ab'); select

Mysql对文件操作的封装

mysql|封装 Mysql对文件操作的封装 在查看Mysql对文件的操作中发现,它在不同的操作系统上对文件的操作,除了使用标准C运行库函数,包括open.close.seek等,在Win32下的文件和目录操作函数使用了CreatFile.CloseHandl.SetFilePointer等,不明白为什么对文件的操作要封装出两套函数. 查看了相关资料,其实使用API和标准库函数都可以生成文本文件和二进制文件,在这点上没有区别.同read()对应的是ReadFile,同write()对应的是Wri

C# 3.0入门系列(十)-之Join操作

本节讲join操作.我们知道,T-sql中,有三种最基本的join,inner join, left join, 和right join. 而dlinq并不支持right join.道理很简单,right join以right表为基础,left表中没有对应记录的,将以null值填充.而dlinq以left表做为主表创建对象.如果一个对象为null,你如何获取它的其他的属性呢? 在C# 3.0入门系列(四)-之Select操作一文中,我们提到了query expression首先会被翻译成标准的A

jsp如何链接mysql数据库的操作

  1:在数据服务端安装好mysql数据库,这个是必须的,在自己的ssh或者虚拟机上,数据mysql可以看到相关的提示,说明安装成功: 2:我是用的是tomcat服务器,在这里需要安装好java连接mysql的数据库操作库.我是用的jar包是:mysql-connector-java-3.1.14.tar.gz, 大家可以在网上下载,或者,在官网上下载: 3:把解包后的jar放到tomcat里面的lib文件夹下: 4:在程序的代码段里添加连接函数库和库函数,就可以连接到mysql数据库了: 5:

php连接不上mysql但mysql命令行操作正常的解决方法

 这篇文章主要介绍了php连接不上mysql但mysql命令行操作正常的解决方法,需要的朋友可以参考下 故障状况:php网站连接mysql失败,但在命令行下通过mysql命令可登录并正常操作. 解决方案: 1.命令行下登录mysql,执行以下命令:  代码如下:show variables like 'socket'; 执行后会得到类似于如下回显:  代码如下: "Variable_name"        "Value" "socket"  

PHP连接MySQL数据的操作要点

 MySQL扩展库操作MySQL数据库的步骤如下: 1:获取连接. 2:选取书库. 3:设置操作编码. 4:发送SQL指令(MySQL数据库可以分为四种指令: 4.1:ddl: 数据定义语言. 4.2:dml:数据操语言(如CURD): 4.3:dql:数据查询语言.(如select) 4.4:dtl:数据事物语言. 5:接收返回结果,并且处理. 6:断开连接. 具体的示例代码如下: 代码如下: <?php //1:连接数据库 $con=mysql_connect("localhost&q