sql的join,inner join,union,union all的区别
JOIN 和 INNER JOIN:
JOIN是 SQL 中用于将两个或多个表中的数据根据指定的关联条件组合在一起的操作。INNER JOIN是JOIN的一种,它返回两个表中满足关联条件的行。- 语法:
收起
sql
SELECT columns
FROM table1
JOIN table2 ON table1.column = table2.column;
或
收起
sql
SELECT columns
FROM table1
INNER JOIN table2 ON table1.column = table2.column;
- 示例:
收起
sql
SELECT *
FROM employees
JOIN departments ON employees.department_id = departments.department_id;
- 解释:
JOIN和INNER JOIN的结果集仅包含那些在两个表中都有匹配行的记录。例如,如果employees表中的department_id能在departments表中找到对应的department_id,那么这些行将被包含在结果中。如果在employees表中的department_id在departments表中没有匹配项,那么该行将被排除。ON子句指定了关联条件,它定义了如何将两个表中的行进行匹配。- 当使用
JOIN时,如果没有指定连接类型(如LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN),默认情况下就是INNER JOIN。
UNION ALL:
UNION ALL用于将两个或多个SELECT语句的结果集组合在一起,并且不会去重。它要求每个SELECT语句具有相同数量的列,并且相应列的数据类型必须兼容。- 语法:
收起
sql
SELECT columns FROM table1
UNION ALL
SELECT columns FROM table2;
- 示例:
收起
sql
SELECT first_name FROM employees
UNION ALL
SELECT first_name FROM customers;
- 解释:
UNION ALL简单地将两个查询结果集拼接在一起,不执行任何去重操作。如果第一个查询结果集包含'John'三次,第二个查询结果集包含'John'两次,那么最终结果集将包含'John'五次。- 性能方面,由于
UNION ALL不需要去重,所以通常比UNION更快。
UNION:
UNION也用于将两个或多个SELECT语句的结果集组合在一起,但会自动去除重复行。同样,它要求每个SELECT语句具有相同数量的列,并且相应列的数据类型必须兼容。- 语法:
收起
sql
SELECT columns FROM table1
UNION
SELECT columns FROM table2;
- 示例:
收起
sql
SELECT first_name FROM employees
UNION
SELECT first_name FROM customers;
- 解释:
UNION会将两个查询结果集拼接在一起,然后消除重复行。如果第一个查询结果集包含'John'三次,第二个查询结果集包含'John'两次,最终结果集将只包含'John'一次。- 性能方面,由于
UNION需要进行去重操作,可能会比UNION ALL慢,尤其是在结果集较大时,因为它需要比较和消除重复项。
总结区别:
JOIN和INNER JOIN是将多个表的数据根据关联条件组合在一起,关注的是不同表之间的数据关联。UNION ALL是将多个SELECT语句的结果集进行简单拼接,不考虑去重,注重结果集的合并。UNION也是将多个SELECT语句的结果集进行拼接,但会对结果进行去重,适用于不希望结果集中有重复数据的情况。
在实际使用中,根据具体的需求选择合适的操作:
- 如果你需要将多个表的数据根据某种关系组合,使用
JOIN或INNER JOIN。 - 如果你需要将多个
SELECT语句的结果集拼接在一起,且不关心重复数据,使用UNION ALL。 - 如果你需要将多个
SELECT语句的结果集拼接在一起,但不希望有重复数据,使用UNION。
需要注意的是,无论使用哪种操作,都要确保查询的列在数量和数据类型上兼容,以避免出现错误。同时,考虑性能因素,在不需要去重时,尽量使用
UNION ALL 而不是 UNION。本文来自博客园,作者:余生请多指教ANT,转载请注明原文链接:https://www.cnblogs.com/wangbiaohistory/p/18672654

浙公网安备 33010602011771号