首页 > 数据库 >SQL--union用法

SQL--union用法

时间:2024-06-05 21:58:31浏览次数:59  
标签:name -- union SQL employee UNION id SELECT 重复


UNION 是 SQL 中用于合并两个或多个 SELECT 语句结果集的操作符。这些 SELECT 语句必须选择相同数量的列,并且这些列的数据类型必须兼容。UNION 会自动去除结果集中的重复行,而如果你想要保留重复行,可以使用 UNION ALL


 

UNION 的基本语法:制代码

SELECT column_name(s) FROM table1  UNION  SELECT column_name(s) FROM table2;

几点需要注意:

  1. 列的数量和类型:两个 SELECT 语句中选择的列的数量必须相同,并且相应的列必须具有相似的数据类型。

  2. 去除重复:默认情况下,UNION 会去除结果集中的重复行。如果你想要包含重复行,可以使用 UNION ALL

  3. 排序:如果你想对结果集进行排序,你应该在 UNION 操作的外部使用一个 ORDER BY 子句。

示例

假设有两个表,employees1 和 employees2,它们都有 id 和 name 列。

employees1 表

idname
1Alice
2Bob
3Carol

employees2 表

idname
3Carol
4Dave
5Eve

如果想从这两个表中获取所有唯一的员工(不重复),你可以使用以下查询:ql

SELECT id, name FROM employees1UNIONSELECT id, name FROM employees2;

这将返回:

idname
1Alice
2Bob
3Carol
4Dave
5Eve

注意 "Carol" 只出现了一次,因为 UNION 去除了重复的行。

如果你想要包含重复的行,可以使用 UNION ALL:sql​​​​​​​

SELECT id, name FROM employees1UNION ALLSELECT id, name FROM employees2;

这将返回:

idname
1Alice
2Bob
3Carol
3Carol
4Dave
5Eve

注意 "Carol" 出现了两次。

使用 UNION 的注意事项:

  1. 列的数据类型:确保每个 SELECT 语句中选择的列的数据类型是相似的,以便能够合并它们的结果。如果数据类型不匹配,可能需要进行类型转换。

  2. 列的顺序:每个 SELECT 语句中列的顺序必须相同,以便能够正确地对齐和合并它们。

  3. 性能:使用 UNION 可能会比单独执行每个查询并手动合并结果更慢,因为数据库需要执行额外的步骤来合并和去除重复的行。如果表很大并且有很多重复的行,考虑使用 UNION ALL 并在应用程序级别处理重复。

  4. 索引和视图:不能直接在 UNION 或 UNION ALL 的结果上创建索引,但可以将结果存储在一个临时表或表变量中,然后在该表上创建索引。同样,不能直接在 UNION 或 UNION ALL 的结果上创建视图,但可以创建一个包含 UNION 或 UNION ALL 查询的视图。

  5. NULL 值:在 UNION 的结果中,NULL 值被视为相等,并且只会出现一次。如果想要保留 NULL 值的重复出现,需要使用 UNION ALL

  6. 别名:如果想要给 UNION 或 UNION ALL 的结果集中的列指定别名,需要在整个查询的最后使用 AS 关键字来指定别名。

示例:使用别名和排序​​​​​​​

SELECT id AS employee_id, name AS employee_name FROM employees1  UNION ALLSELECT id, name FROM employees2  ORDER BY employee_name;

在这个示例中,我们给 id 和 name 列分别指定了别名 employee_id 和 employee_name,并按 employee_name 对结果进行排序。注意,别名只在 ORDER BY 子句和结果集中有效,它们不会改变表或列的实际名称。

 

标签:name,--,union,SQL,employee,UNION,id,SELECT,重复
From: https://blog.csdn.net/m0_58552717/article/details/139469293

相关文章

  • 多线程interrupt()方法
    interrupt()方法:配合isInterrupted()方法可以合理打断线程,让线程处理好事务后停止。打算一个非阻塞状态的线程效果publicclasstest{publicstaticvoidmain(String[]args){Runnabler=()->{while(true){booleaninterrup......
  • 一个有思想的人,要关心一些大问题,主动跳出锁事
    与其奢也,宁俭:礼的根本,是有一颗柔软的心林放问礼之本。子曰:大哉问!礼,与其奢也,宁俭;丧,与其易也,宁戚。孔子说这是一个好问题,因为作为一个有思想的人,我们要学会关心一些大问题。——因为:每个人都难免陷入世人的琐事,如果目光总放在细枝末节,会发现永远有解决不完的问题,旧的问题解......
  • python 直接加载egg 文件的模块
    主要作为一个简单记录参考示例文件模式importsysimportosegg_path=os.path.join(os.path.dirname(__file__),'dist','mydalong-0.1-py3.11.egg')sys.path.append(egg_path)fromdemoimportdalongdalong.login()文件夹模式......
  • 小米SU7智能座舱介绍,果然有亮点!
    2024年,小米SU7横空出世,从开始的怀疑到发布后仅24h就达到了8W台的订单量,火到出圈的具象化。智能手机厂家造车,之前的华为做了榜样,小米作为汽车制造中又一条鲶鱼,能否给智能汽车市场带来新的契机?小米造车可谓是各方位进行全新打造,包括座舱、底盘、智驾、车身、动力各大系......
  • python 生成uber egg 的几个工具
    有些时候我们为了方便python模块的分发,会有类似javauberjar的需求,社区已经有一些不错的可选工具,以下说明下uberegg这个工具scrapy-client中的deploy就使用了此工具,对于依赖的构建我们制定配置就可以了pythonsetup.pybdist_uberegg-rrequirements.txtpyassembly也是一......
  • 【JUC】5-CompletableFutrue对Futrue的改进
    get()方法在Futrue计算完成之前会一直处在阻塞状态下,isDeone()方法容易耗费CPU资源,对于真正的异步处理我们希望是可以通过传入回调函数,在Futrue结束时自动调用该回调函数,这样,我们就不用等待结果。 阻塞的方式和异步编程的设计理念相违背,而轮询的方式会耗费无谓的CPU资源。因......
  • 实验20-智能换脸
    changeface.pyimportcv2importdlibimportnumpyimportsysPREDICTOR_PATH="./shape_predictor_68_face_landmarks.dat"SCALE_FACTOR=1FEATHER_AMOUNT=11#代表各个区域的关键点标号FACE_POINTS=list(range(17,68))MOUTH_POINTS=list(range(48,61))RI......
  • 在线编辑涉密的Word文档,只读/禁止编辑/禁止复制/禁止另存/禁止打印
    在日常办公环境中,保密信息的安全性是至关重要的,我们经常会需要在线预览编辑涉密的Word文档,但是又要求这些涉密的文档只能看,只读打开/禁止编辑/禁止复制/禁止另存/禁止打印,这时候该如何实现呢?猿大师办公助手可以帮您做到这些!  猿大师办公助手可以把本地微软Office或者金山WPS......
  • 阅读笔记1
    这几天开始了第二章的阅读,同样,标题让人捉摸不透--死定了,怀着疑问的心情我继续读了下去,这一章同样是运用叙事的方式,一开头讲述了程序员们因为完不成任务而陷入深深的苦恼中,他们其中的人认为原因是一直没有蓝图,才会碰到难以预料的问题,而另一个人认为不确定因素太多,所需时间取决于他......
  • 置换
    置换定义:一个有限集合\(S\)到自身的双射(即一一对应)称为\(S\)的一个置换。集合\(S=\left\{a_{1},a_{2}\ldotsa_{n}\right\}\)上的置换可以表示为\[f=\begin{pmatrix}a_{1},a_{2}\ldotsa_{n}\\a_{p_{1}},a_{p_{2}}\ldotsa_{p_{n}}\end{pmatrix}\]意为将\(a_i\)映射为\(a......