fosh4455 Asked:2020-08-22 20:15:19 +0000 UTC2020-08-22 20:15:19 +0000 UTC 2020-08-22 20:15:19 +0000 UTC 在加入请求中使用和打开有什么区别? 772 标题中的主题,即 查询是否等效(如果考虑 mysql) SELECT * FROM `tab1` RIGHT JOIN `tab` ON `table2`.`id` = `table1`.`id` 和 SELECT * FROM `tab1` RIGHT JOIN `tab2` USING(`id`) 如果不是,哪个更好,有什么区别? sql 1 个回答 Voted Best Answer Алексей Шиманский 2020-08-22T20:44:51Z2020-08-22T20:44:51Z USING (column_name(s))本质上是ON的语法糖。根据docs,它用于指定两个表中应该存在的列列表。 一个USING表达式,例如: A LEFT JOIN B USING (C1, C2, C3, ...) 在语义上与ON表达式相同: A.C1 = B.C1 AND A.C2 = B.C2 AND A.C3 = B.C3,... 而ON可以“粘合”具有不同名称的列。 但是使用ON,您可以做更多的操作,例如,您不仅可以附加一列,还可以附加一组列甚至整个条件,例如: SELECT * FROM world.City JOIN world.Country ON (City.CountryCode = Country.Code) WHERE ... 此外 USING - 在查询中列出字段时,不需要指定前缀: SELECT film.title, film_id // # film_id указан без префикса FROM film JOIN film_actor USING (film_id) WHERE ... 与ON相同: SELECT film.title, film.film_id // # film.film_id обязателен префикс FROM film JOIN film_actor ON (film.film_id = film_actor.film_id) WHERE ... 如果您没有明确列出字段,而是使用select *它们来连接列,那么在结果集中使用ON列将“浮动”两次,而使用USING- 仅一次: mysql> create table t(i int); insert t select 1; create table t2 select*from t; Query OK, 0 rows affected (0.11 sec) Query OK, 1 row affected (0.00 sec) Records: 1 Duplicates: 0 Warnings: 0 Query OK, 1 row affected (0.19 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> select * from t join t2 on t.i = t2.i; +------+------+ | i | i | +------+------+ | 1 | 1 | +------+------+ 1 row in set (0.00 sec) mysql> select * from t join t2 using(i); +------+ | i | +------+ | 1 | +------+ 1 row in set (0.00 sec) mysql> 从 enSO MySQL ON 与 USING 借来的信息?
USING (column_name(s))本质上是ON的语法糖。根据docs,它用于指定两个表中应该存在的列列表。
一个USING表达式,例如:
在语义上与ON表达式相同:
而ON可以“粘合”具有不同名称的列。
但是使用ON,您可以做更多的操作,例如,您不仅可以附加一列,还可以附加一组列甚至整个条件,例如:
此外
USING - 在查询中列出字段时,不需要指定前缀:
与ON相同:
如果您没有明确列出字段,而是使用
select *它们来连接列,那么在结果集中使用ON列将“浮动”两次,而使用USING- 仅一次:从 enSO MySQL ON 与 USING 借来的信息?