mysql join中,on和where的区别

mysql join中,on和where的区别,第1张

关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒

ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行,即使on中包含有A表中的列的限制条件,也不会过滤A的任何数据(A的数据只会通过where过滤)。

如果 B 表中没有任何一行数据匹配 ON 的条件,将会额外生成一行所有列为 NULL 的数据

在匹配阶段 WHERE 子句的条件都不会被使用。仅在匹配阶段完成以后,WHERE 子句条件才会被使用。它将从匹配阶段产生的数据中检索过滤。

让我们看一个 LFET JOIN 示例:

01

mysql>CREATE TABLE `product`

(

02

`id` int(10)

unsigned NOT NULL auto_increment,

03

`amount` int(10)

unsigned default NULL,

04

PRIMARY KEY (`id`)

05

)

ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1

06

07

mysql>CREATE TABLE `product_details`

(

08

`id` int(10)

unsigned NOT NULL,

09

`weight` int(10)

unsigned default NULL,

10

`exist` int(10)

unsigned default NULL,

11

PRIMARY KEY (`id`)

12

)

ENGINE=MyISAM DEFAULT CHARSET=latin1

13

14

mysql>INSERT INTO product

(id,amount)

15

VALUES (1,100),(2,200),(3,300),(4,400)

16

Query

OK, 4 rows affected

(0.00 sec)

17

Records:

4 Duplicates: 0 Warnings: 0

18

19

mysql>INSERT INTO product_details

(id,weight,exist)

20

VALUES (2,22,0),(4,44,1),(5,55,0),(6,66,1)

21

Query

OK, 4 rows affected

(0.00 sec)

22

Records:

4 Duplicates: 0 Warnings: 0

23

24

mysql>SELECT * FROM product

25

join 经常用来做关联查询,可以把两张或者多张表用通过关联条件关联起来做数据查询

在使用join查询的时候要区分主表和附表,jion ...on .....and

on: 表之间的关联条件

and:对附表做筛选

内连接,两个关联的表都为主表,所以他们的做条件筛选的顺序是:先连接,后筛选。此时 join ...on ... and =join...on... where ....

左连接,这时候左边的表就是主表,所以,主表的数据会全部展示出来,右边的表为附表,此时on连接后在通过and进行筛选的条件对主表不起作用,只对附表起作用。先筛选再连接

右连接,右边的表为主表,左边表变成附表,如果on后面又and 做筛选条件的话,和left join一样 也是先筛选后连接。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6128034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存