SQL中UNION关键字怎么用
小编给大家分享一下SQL中UNION关键字怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
SQL中的UNION关键字,将实现将多个查询条件中的结果展示出来。
UNIONUNION的中文含义是联合的意思,即合并两个或多个 SELECT 语句的结果。使用技巧如下:
UNION 内部的每个 SELECT 语句必须拥有相同数量的列。
列必须拥有相似的数据类型。
每个 SELECT 语句中的列的顺序必须相同。
相同数量的列如下图,使用上一章介绍的数据作为演示数据
分别建立表s_user
和表s_user_1
CREATETABLE`s_user`(`userid`int(11)NOTNULLAUTO_INCREMENT,`user_name`varchar(255)DEFAULTNULL,`name`varchar(255)DEFAULTNULL,`pass_word`varchar(255)DEFAULTNULL,`salt`varchar(255)DEFAULTNULL,`state`varchar(255)DEFAULTNULL,`create_time`datetimeDEFAULTNULL,PRIMARYKEY(`userid`))ENGINE=InnoDBAUTO_INCREMENT=3DEFAULTCHARSET=utf8;
测试数据如下:
INSERTINTO`test`.`s_user`(`userid`,`user_name`,`name`,`pass_word`,`salt`,`state`,`create_time`)VALUES(1,'小米','小米','123123','123','1','2022-02-1019:48:43');INSERTINTO`test`.`s_user`(`userid`,`user_name`,`name`,`pass_word`,`salt`,`state`,`create_time`)VALUES(2,'小白','小白','123123','123','1','2022-02-1019:48:43');INSERTINTO`test`.`s_user_1`(`userid`,`user_name`,`name`,`pass_word`,`salt`,`state`,`create_time`)VALUES(1,'小红','小红','123123','123','1','2022-02-1019:48:43');INSERTINTO`test`.`s_user_1`(`userid`,`user_name`,`name`,`pass_word`,`salt`,`state`,`create_time`)VALUES(2,'小黄','小黄','123123','123','1','2022-02-1019:48:43');
UNION 内部的每个 SELECT 语句必须拥有相同数量的列:先查询具有相同列的SQL
SELECT*FROM`s_user`UNIONSELECT*FROM`s_user_1`
查询出所有的列,可以看到,执行结果如下。
如果第一个查询是所有列,第二个查询是三个字段,那么查询结果又是怎么样呢,现在执行如下SQL:
错误用法
SELECT*FROM`s_user`UNIONSELECTuserid,name,pass_wordFROM`s_user_1`
错误提示:使用的SELECT语句查询出不同的列数
正确用法
SELECTuserid,name,pass_wordFROM`s_user`UNIONSELECTuserid,name,pass_wordFROM`s_user_1`
数据类型上面看到了多个查询的列数必须相同,那么查询出的列数如果相同,查询字段的数据类型不同,是否可正常处理呢?下面将s_user查询中的pass_word换成create_time,进行查询。通过查询之后可以看到。在SQL查询中,列的数据类型是无关的。当然实际业务中是不会将其设置成不同的类型的。
SELECTuserid,name,create_timeFROM`s_user`UNIONSELECTpass_word,name,useridFROM`s_user_1`
列顺序在使用UNION关键字进行查询时,是否和列的顺序有关呢,上面看到可能和列的顺序有关,可能也是无关的,那么进行一下测试。可以看到执行结果是和列的顺序无关的。在实际业务中是合并多个查询,因此我们在项目中定义是需要列的顺序一致的。
SELECTcreate_time,userid,nameFROM`s_user`UNIONSELECTpass_word,name,useridFROM`s_user_1`
UNION 和 UNION ALL区别为了测试UNION 和 UNION ALL区别需要在数据表s_user_1中增加【小白】,与表s_user中的【小白】都存在数据库中,两个会有什么不同结果呢。
INSERTINTO`test`.`s_user_1`(`userid`,`user_name`,`name`,`pass_word`,`salt`,`state`,`create_time`)VALUES(3,'小白','小白','123123','123','1','2022-02-1019:48:43');
首先执行:
SELECTuser_name,name,pass_word,saltFROM`s_user`UNIONSELECTuser_name,name,pass_word,saltFROM`s_user_1`
执行结果:
再次执行
SELECTuser_name,name,pass_word,saltFROM`s_user`UNIONALLSELECTuser_name,name,pass_word,saltFROM`s_user_1`
执行结果:
可以看到UNION关联的去除了重复项,而UNION ALL查询出了所有的值,没有去除重复数据。
以上是“SQL中UNION关键字怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。