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 JOINRIGHT JOINFULL 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
posted @ 2025-01-15 11:13  余生请多指教ANT  阅读(580)  评论(0)    收藏  举报