mysql join中,on和where的区别
发布网友
发布时间:2023-11-08 21:28
我来回答
共1个回答
热心网友
时间:2023-11-24 23:16
关于 “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 `proct`
(
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 `proct_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 proct
(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 proct_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 proct;
25