一、在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。
JOIN 按照功能大致分为如下三类:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
select join 示例
select T1.C1, T1.C2, T2.C3 FROM T1, T2,
[INNER JOIN | LEFT JOIN] T1 ON T1.C1 = T2.C1
WHERE condition
delete join 示例
DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition
update join 示例
UPDATE T1, T2,
[INNER JOIN | LEFT JOIN] T1 ON T1.C1 = T2. C1
SET T1.C2 = T2.C2,
T2.C3 = expr
WHERE condition
让我们更详细地看看MySQL UPDATE JOIN
语法:
- 首先,在
UPDATE
子句之后,指定主表(T1
)和希望主表连接表(T2
)。 请注意,必须在UPDATE
子句之后至少指定一个表。UPDATE
子句后未指定的表中的数据未更新。 - 第二,指定一种要使用的连接,即
INNER JOIN
或LEFT JOIN
和连接条件。JOIN
子句必须出现在UPDATE
子句之后。 - 第三,要为要更新的
T1
和/或T2
表中的列分配新值。 - 第四,WHERE子句中的条件用于指定要更新的行。
二、SQL中过滤条件放在on和where中的区别
1、当使用 inner join 时, 过滤条件放在on和where 的效果是一样的
2、当使用left join 、right join 时,条件放在on 上会比 放在where上得到的结果数更少。
原因解释:
在使用left join时,on和where条件的区别如下:
1)、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。(实际上左连接中如果and语句是对左表进行过滤的,那么不管真假都不起任何作用。如果是对右表过滤的,那么左表所有记录都返回,右表筛选以后再与左表连接返回)
2)、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉,on后的条件用来生成左右表关联的临时表,where后的条件对临时表中的记录进行过滤。
在使用inner join时,不管是对左表还是右表进行筛选,on and和on where都会对生成的临时表进行过滤。