首页 > 数据库 >sql的join,inner join,union,union all的区别

sql的join,inner join,union,union all的区别

时间:2025-01-15 11:21:24浏览次数:1  
标签:JOIN 结果 union 表中 UNION inner sql join SELECT

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

标签:JOIN,结果,union,表中,UNION,inner,sql,join,SELECT
From: https://www.cnblogs.com/wangbiaohistory/p/18672654

相关文章

  • VP Toyota Programming Contest 2024#12(AtCoder Beginner Contest 384)
    A-aaaadaa题意:给你一个字符串和两个字符\(c_1\),\(c_2\),把字符串里的所有不等于\(c_1\)的字符都换成\(c_2\)。模拟即可。点击查看代码voidsolve(){intn;chara,b;std::cin>>n>>a>>b;std::strings;std::cin>>s;for(auto&c:......
  • AtCoder Beginner Contest 388 (abc388) 赛后复盘
    为什么不会E????A-B模拟即可。C每一个大麻薯可以和所有小于等于自己\(\frac12\)的麻薯结合,二分即可。时间复杂度\(O(n\logn)\)。点击查看代码#include<bits/stdc++.h>#definelllonglong#definei128__int128#definemem(a,b)memset((a),(b),sizeof(a))#def......
  • HHKB Programming Contest 2025(AtCoder Beginner Contest 388)
    A-?UPC题意:给你一个字符串,把他的第一个字符和"UPC"输出。输出即可。点击查看代码voidsolve(){std::strings;std::cin>>s;std::cout<<s[0]<<"UPC\n";}B-HeavySnake题意:n条蛇由厚度和长度,重量为厚度乘长度,问长度加上1~k时,最大的蛇的重量分别......
  • AtCoder Beginner Contest 387
    A-HappyNewYear2025题意给定正整数\(A,B\),求\((A+B)^2\)思路模拟代码点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongtypedefpair<int,int>pii;constintmxn=1e6+5;voidsolve(){ inta,b; cin>>a......
  • VP UNIQUE VISION Programming Contest 2024 Christmas (AtCoder Beginner Contest 38
    A-Equally题意:给你三个数,判断能不能分成大于一组后每组和相等。只可能分成两个和一个或者三组一个的。点击查看代码voidsolve(){inta,b,c;std::cin>>a>>b>>c;if((a==b&&b==c)||(a+b==c)||(b+c)==a||(a+c)==b){ s......
  • left join 后用 on 还是 where?
    昨天写SQLServer数据库上写SQL语句时,我原本想通过执行AleftjoinBon...and...的操作,将查询结果中的两条记录合并成一条,奈何发现结果中依然有两条记录。回顾了一下语法知识,意识到joinon...and...的语句并不会对结果集的记录条数进行过滤。它的主要作用是,根据and后......
  • 【Spark SQL】Join连接条件使用or导致运行慢
    现象运行的SQL示例如下selectt1.*fromedw.at1leftjoinedw.bt2on(t1.id=t2.idor((t1.idisnullort2.idisnull)andt1.phone=t2.phone))andt1.province=t2.provinceandt1.city=t2.cityandt1.type=t2.typewheret2.typeisnull;提交运行......
  • VP AtCoder Beginner Contest 387
    A-HappyNewYear2025按题意输出即可。点击查看代码voidsolve(){inta,b;std::cin>>a>>b;std::cout<<(a+b)*(a+b)<<"\n";}B-9x9Sum直接遍历累加满足不等于x的数即可,注意这个九九乘法表是9*9的矩阵,不是我们学的下三角。点击查看......
  • Linq中的设置操作 (C#):Distinct 和 DistinctBy、Except 和 ExceptBy、Intersect 和 In
    LINQ中的集运算是指根据相同或单独集合中是否存在等效元素来生成结果集的查询运算。注:这些示例使用System.Collections.Generic.IEnumerable<T>数据源。基于System.Linq.IQueryProvider的数据源使用System.Linq.IQueryable<T>数据源和表达式树。表达式树对允许的C#语......
  • 【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection)
    【Web安全】SQL注入攻击技巧详解:UNION注入(UNIONSQLInjection)引言UNION注入是一种利用SQL的UNION操作符进行注入攻击的技术。攻击者通过合并两个或多个SELECT语句的结果集,可以获取数据库中未授权的数据。这种注入技术要求攻击者对数据库的结构有一定的了解,尤其是列的数......