数据库使用之union、union all、各种join的用法区别解析

 更新时间:2025年02月06日 10:20:54   作者:我是苏苏  
这篇文章主要介绍了SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,包括innerjoin和leftjoin的区别,以及联表条件的写法,需要的朋友可以参考下

一、Union 和Union All

1、区别:

Union去重,而Union All不去重。

2、注意点:

1.被合并的每个SELECT语句的列数、数据类型要相同(一一对应)。

2.使用Union时,由于可去重性,可能导致数据丢失。

3.使用Union All时,由于不可去重性,可能含重复的记录。

3、具体举例

【union】

【union all】

二、Join关键字的区别

 1.left join和inner join区别

【长话短说】inner join(内连接)得到数据更少,直接剔除匹配不到的数据(剔除无关联ID的数据),inner join = join。

【例子】如下图所示,inner join不显示红框的数据,left join会显示

SELECT * FROM student s
LEFT JOIN score sc on s.id=sc.studentid

SELECT * FROM student s
INNER JOIN score sc on s.id=sc.studentid

【查询匹配失败的数据】

SELECT * FROM student s
LEFT JOIN score sc on s.id=sc.studentid
WHERE sc.id is null --查询从表ID为空的数据,就是联表匹配不到的数据

2.联表条件写法差异

--联表:只要满足关联关系,B.IsDeleted是什么则返回什么
SELECT * FROM TABLEA A
LEFT JOIN TABLEB B ON A.ID=B.EXID 

--联表不筛选:只要满足关联关系,B.IsDeleted≠0 则返回null
SELECT * FROM TABLEA A
LEFT JOIN TABLEB B ON A.ID=B.EXID AND B.IsDeleted=0

--联表且筛选:只要满足关联关系,B.IsDeleted≠0 则返回null,假如是null则被where过滤掉
SELECT * FROM TABLEA A
LEFT JOIN TABLEB B ON A.ID=B.EXID
WHERE B.IsDeleted=0

--【结论】数据返回多少关系是:第一种=第二种>第三种
-- 因为第二种是A左联筛选后的B表,左外保证A表完整性,和第一种一样
-- 第三种是连接后再筛选,剔除的数据可能包含A表的数据

三、Cross Join

计算所有表的笛卡尔积:

总结 

到此这篇关于数据库使用之union、union all、各种join的用法区别解析的文章就介绍到这了,更多相关union、union all、join用法区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL Server自动生成日期加数字的序列号

    SQL Server自动生成日期加数字的序列号

    需要生成下面的序列号,前半部分是yyyymmdd格式的年月日时间数字,后半部分则是每天都从1顺序增长的数字,位数要固定,中间不足的补0。
    2009-08-08
  • Sql数据库中去掉字段的所有空格小结篇

    Sql数据库中去掉字段的所有空格小结篇

    这篇文章主要介绍了Sql数据库中去掉字段的所有空格小结篇,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 在sp_executesql中使用like字句的方法

    在sp_executesql中使用like字句的方法

    在sp_executesql中可以执行参数化的sql,但是如果sql中有like,那么一般都要拼字符串,下面的例子把两者结合了起来,既有拼sql的灵活性,又有参数化sql的优点。
    2009-06-06
  • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结

    关于SQL中CTE(公用表表达式)(Common Table Expression)的总结

    WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到
    2012-08-08
  • MsSQL数据库基础与库的基本操作方法

    MsSQL数据库基础与库的基本操作方法

    文章主要介绍了数据库的基础知识,包括数据库的定义、主流数据库系统(如MySQL、PostgreSQL等)、数据库操作(如创建、修改、删除数据库,备份和恢复等)以及查看连接情况,感兴趣的朋友一起看看吧
    2025-02-02
  • case 嵌套查询与连接查询你需要懂得

    case 嵌套查询与连接查询你需要懂得

    Case 子查询连接查询在sql开发中很常用的一个查询功能,感兴趣的你可不要错过本文,接下来为你详细介绍下
    2013-02-02
  • SQL SERVER 中构建执行动态SQL语句的方法

    SQL SERVER 中构建执行动态SQL语句的方法

    这篇文章主要介绍了SQL SERVER 中构建执行动态SQL语句的方法,需要的朋友可以参考下
    2017-06-06
  • SQL Server误区30日谈 第15天 CheckPoint只会将已提交的事务写入磁盘

    SQL Server误区30日谈 第15天 CheckPoint只会将已提交的事务写入磁盘

    这个误区是由于太多人对日志和恢复系统缺少全面的了解而存在已久。CheckPoint会将自上次CheckPoint以来所有在内存中改变的页写回磁盘(译者注:也就是脏页),或是在上一个CheckPoint读入内存的脏页写入磁盘
    2013-01-01
  • SQL SERVER临时表排序问题的解决方法

    SQL SERVER临时表排序问题的解决方法

    这篇文章主要给大家介绍了关于SQL SERVER临时表排序问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • php使用pdo连接sqlserver示例分享

    php使用pdo连接sqlserver示例分享

    在开发PHP程序时我们可以借助多种连接方式访问各类的数据库获取所需的数据。自PHP5以来PDO作为新生事物将所有数据库接口收入囊中,为开发人员提供了方便快捷的数据库读取方式。本文将介绍如何在Linux服务器配置PHP与SQL Server的连接
    2014-01-01

最新评论