登录  /  注册
首页 > 数据库 > SQL > 正文

SQL入门学习之浅析UNION关键字的用法

青灯夜游
发布: 2022-02-21 10:55:22
转载
5330人浏览过

我们开发过程中经常会使用到将多个查询结果都直接显示出来,那么应该怎么查询呢?本篇文章进行学习sql,来一起看看sql中的union关键字,看看它要怎么使用,希望对大家有所帮助!

SQL入门学习之浅析UNION关键字的用法

SQL中的UNION关键字,将实现将多个查询条件中的结果展示出来。

UNION

  UNION的中文含义是联合的意思,即合并两个或多个 SELECT 语句的结果。使用技巧如下:

  • UNION 内部的每个 SELECT 语句必须拥有相同数量的列。
  • 列必须拥有相似的数据类型。
  • 每个 SELECT 语句中的列的顺序必须相同。

相同数量的列

如下图,使用上一章介绍的数据作为演示数据

1.png

分别建立表s_user 和表s_user_1

CREATE TABLE `s_user` (
  `userid` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `pass_word` varchar(255) DEFAULT NULL,
  `salt` varchar(255) DEFAULT NULL,
  `state` varchar(255) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
登录后复制

测试数据如下:

INSERT INTO `test`.`s_user`(`userid`, `user_name`, `name`, `pass_word`, `salt`, `state`, `create_time`) VALUES (1, '小米', '小米', '123123', '123', '1', '2022-02-10 19:48:43');
INSERT INTO `test`.`s_user`(`userid`, `user_name`, `name`, `pass_word`, `salt`, `state`, `create_time`) VALUES (2, '小白', '小白', '123123', '123', '1', '2022-02-10 19:48:43');

INSERT INTO `test`.`s_user_1`(`userid`, `user_name`, `name`, `pass_word`, `salt`, `state`, `create_time`) VALUES (1, '小红', '小红', '123123', '123', '1', '2022-02-10 19:48:43');
INSERT INTO `test`.`s_user_1`(`userid`, `user_name`, `name`, `pass_word`, `salt`, `state`, `create_time`) VALUES (2, '小黄', '小黄', '123123', '123', '1', '2022-02-10 19:48:43');
登录后复制

UNION 内部的每个 SELECT 语句必须拥有相同数量的列:先查询具有相同列的SQL

SELECT * FROM `s_user` UNION SELECT * FROM `s_user_1`
登录后复制

查询出所有的列,可以看到,执行结果如下。

2.png

如果第一个查询是所有列,第二个查询是三个字段,那么查询结果又是怎么样呢,现在执行如下SQL:

错误用法

SELECT * FROM `s_user` UNION SELECT userid,name,pass_word FROM `s_user_1`
登录后复制

3.png

错误提示:使用的SELECT语句查询出不同的列数

正确用法

SELECT userid,name,pass_word  FROM `s_user` UNION SELECT userid,name,pass_word FROM `s_user_1`
登录后复制

4.png

数据类型

  上面看到了多个查询的列数必须相同,那么查询出的列数如果相同,查询字段的数据类型不同,是否可正常处理呢?下面将s_user查询中的pass_word换成create_time,进行查询。通过查询之后可以看到。在SQL查询中,列的数据类型是无关的。当然实际业务中是不会将其设置成不同的类型的。

SELECT userid,name,create_time  FROM `s_user` UNION SELECT pass_word,name,userid FROM `s_user_1`
登录后复制

5.png

列顺序

  在使用UNION关键字进行查询时,是否和列的顺序有关呢,上面看到可能和列的顺序有关,可能也是无关的,那么进行一下测试。可以看到执行结果是和列的顺序无关的。在实际业务中是合并多个查询,因此我们在项目中定义是需要列的顺序一致的。

SELECT create_time,userid,name  FROM `s_user` UNION SELECT pass_word,name,userid FROM `s_user_1`
登录后复制

6.png

UNION 和 UNION ALL区别

  为了测试UNION 和 UNION ALL区别需要在数据表s_user_1中增加【小白】,与表s_user中的【小白】都存在数据库中,两个会有什么不同结果呢。

INSERT INTO `test`.`s_user_1`(`userid`, `user_name`, `name`, `pass_word`, `salt`, `state`, `create_time`) VALUES (3, '小白', '小白', '123123', '123', '1', '2022-02-10 19:48:43');
登录后复制

7.png

首先执行:

SELECT user_name,name,pass_word,salt
FROM `s_user` UNION SELECT user_name,name,pass_word,salt FROM `s_user_1`
登录后复制

执行结果:

8.png

再次执行

SELECT user_name,name,pass_word,salt
FROM `s_user` UNION ALL SELECT user_name,name,pass_word,salt FROM `s_user_1`
登录后复制

执行结果:

9.png

  可以看到UNION关联的去除了重复项,而UNION ALL查询出了所有的值,没有去除重复数据。

结语

  好了,以上就是SQL中的UNION关键字用法,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。

推荐学习:mysql视频教程

以上就是SQL入门学习之浅析UNION关键字的用法的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:掘金社区网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号