在SQL中ON子句和USING子句之间的区别

作者: imule 分类: MYSQL 发布时间: 2022-11-04 17:41

USING子句:
1.此语法允许您指定名称的连接键(一种语法糖).
2.如果多个列共享相同的名称,但不想使用所有这些公共列进行连接,则使用USING子句;
3.USING子句中列出的列在语句中不能包含任何限定符,包括WHERE子句:

ON子句:
1.此语法允许您加入主键指定的列名这两个表.
2.ON子句用于连接两个表中列名不匹配的表.在语句中可以包含限定符,而且可以从WHERE子句中的过滤条件中删除连接条件:

SELECT
department_name,
city
FROM
departments
JOIN locations USING (location_id); -- 为联接的表指定相同的列名。

SELECT
department_name,
city
FROM
departments dept
JOIN locations loc ON (dept.location_id = loc.id); -- 为联接的表指定不同的列名。

除上面的答案之外

一个重要的区别是ON子句分别保留每个连接表中的列,USING子句将连接表中的列合并为一个列.例如,如果您希望仅在其中一个连接表中不存在匹配的行时保留结果集中的行,这可能很重要.为此,您通常使用OUTER JOIN以及WHERE子句中的条件,例如

SELECT
t1.*
FROM
TABLE_1 t1
LEFT OUTER JOIN TABLE_2 t2 ON (t2.KEY_FIELD = t1.KEY_FIELD)
WHERE
t2.KEY_FIELD IS NULL

在这种情况下,假设TABLE_2.KEY_FIELD是TABLE_2上主键的一部分,因此如果TABLE_2中实际存在数据,则永远不能为NULL。如果在上面的连接之后,发现TABLE_2.KEY_FIELD在连接集中包含NULL,则意味着没有找到TABLE_2行来匹配相应的TABLE_1行.这有时可能很有用。

寄语

    有人在奔跑,有人在睡觉,有人在感恩,有人在抱怨,有目标的睡不着,没目标的睡不醒,努力才是人生应有的态度,睁开眼就是新的开始。

本站文章主要用于个人学习记录,可能对您有所帮助,仅供参考!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!