sql 用union合并合并查询结果

合并操作与连接相似,因为他们都是将两个表合并起来的另一个表的方法,然而他们的合并方法有本质的区别,

合并是两个表的相加,连接时时两个表的相乘;

01 在合并中两个表原列的数量与数据类型必须相同;在连接中一个表的行可能与另一个表的行有很大的区别,结果表列可能来自第一个表,第二个表或者是两个表的都有;

02在合并中行的最大数量是和 在连接中行的最大数量是积

select name,sex from [user] union select chinese,english from score

使用union all 加上关键字all 功能是不删除重复行也不对进行自动排序加上all 关键字需要计算资源少所以尽可能的使用它 尤其是处理大型表的时候 下列情况应使用union all情况

union加上关键字:

01 知道有重复行但是想保留这些行,

02 知道不可能有重复行,

03 不在乎是否用重复行

select name,address,phone,sex from [user] where age>20 union all select name,address,phone,sex from [user] where sex=‘男‘

Union 中的order by子句

合并表时有且只有一个order by 子句并且必须将它放置语句的末尾 他的两个select 语句都提供了用于合并所有行的排序下面的order by子句可以使用排序依据

01 来自第一个select子句别名

02 来自第一个select子句列别名

3 union 中列的位置编号

前两种更常用、更容易理解。

select name,address,phone,sex from [user] where age>20 union all select name,address,phone,sex from [user] where sex=‘男‘
order by address

union中的自动类型转化:

在合并表的时候两个标源中对应的每个列数据类型必须相同吗 答案是不是的 但是需要数据兼容

首先说文本数据类型 假设合并的两个表源中的第一列数据类型都是文本类型 但长度不一致党合并表时字符长度短的列等于字符长度长的列的不会丢失数据

其次说数值类型当合并两个表源中第一个列数据类型是数值类型的时候但长度不同在合并表的时候所有数字保持所有数字都允许的长度来消除他们数据类型的差别

因为这种都是自动数据类型的转化 所以说任何两个文本都是兼容的 任何数字列都是兼容的

不同类型表的union

当合并的表的时候 两个表源的对应的列即使数据类型也不一定致命 这时候要借助于数据类型转化函数

当合并两个表源相对应的列数据类型不一致一个数值型一个字符型 如果数值型的被转化成为本类型完全可以合并两个表

use student

select 姓名,性别 from student

union

select 学号,str(学期)
from grade

有不同列数的两个表union

当合并两个表源的列数不同 只要向其中一个标源列添加就行了 就可以使得两个表源的列数相同

use student

select 姓名,性别,年龄 from student

union

select 课程代号,课程内容,null from course

三个或者更多的表union

可以把很多数量的表合并起来表的数量可以达到10个之多 然还是要尊徐一定的规则

use student

select 姓名,性别
from student

union

select 课程代号,课程内容
from course

union

select 学号,课程代号 from
grade

时间: 2024-10-13 11:31:01

sql 用union合并合并查询结果的相关文章

(转)SSIS_数据流转换(Union All&合并联接&合并)

Union All : 与sql语言 Union All 一样,不用排序,上下合并多个表.Union All转换替代合并转换:输入输出无需排序,合并超过两个表 合并联接 : 有左连接.内连接.完全连接,只能关联两个表,连接前先排序. 合并 : 与sql语言 Union 一样,合并前先排序,上下合并两个表 在数据库中创建一个表.并创建3个TXT文件,分别用于保存结果. 姓名  课程 分数 张三 语文 90 张三 数学 83 李四 语文 74 李四 数学 84 李四 物理 94 在项目中创建一个[数

解决UNION ALL合并两个结果集后排序的问题

日常开发中,如果实用UNION ALL合并两个已经排好序的结果集的时候,需求是第二个结果集数据排在第一个结果集数据下面,单纯的实用order by是无效的,因为order by的优先级比UNION ALL低. 例如: select one.*  from (select t1.* from table1 t1 where 1=1 and t1.day >3 order by t1.create_date desc)  one UNION ALL select two.*  from (selec

spark sql中进行sechema合并

spark sql中支持sechema合并的操作. 直接上官方的代码吧. val sqlContext = new org.apache.spark.sql.SQLContext(sc) // sqlContext from the previous example is used in this example. // This is used to implicitly convert an RDD to a DataFrame. import sqlContext.implicits._

sql的union用法

sql中union是很常见的,尤其是创建视图时,完全离不开union. SQL UNION 操作符合并两个或多个 SELECT 语句的结果,UNION 内部的每个 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每个 SELECT 语句中的列的顺序必须相同. union包括union和union all两种语法,如下: SQL UNION 语法 SELECT column_name(s) FROM table1 UNION SELECT column_name(s) F

SQL With(递归 CTE 查询)

本文来自:http://www.cnblogs.com/smailxiaobai/archive/2012/01/16/2323291.html 指定临时命名的结果集,这些结果集称为公用表表达式 (CTE).该表达式源自简单查询,并且在单条 SELECT.INSERT.UPDATE 或 DELETE 语句的执行范围内定义.该子句也可用在 CREATE VIEW 语句中,作为该语句的 SELECT 定义语句的一部分.公用表表达式可以包括对自身的引用.这种表达式称为递归公用表表达式.  Transa

SQL Server数据库--》top关键字,order by排序,distinct去除重复记录,sql聚合函数,模糊查询,通配符,空值处理。。。。

top关键字:写在select后面 字段的前面 比如你要显示查询的前5条记录,如下所示: select top 5 * from Student 一般情况下,top是和order by连用的 order by用在表名的后面 order by后面就填你要按它排序的字段,是升序排序(从小到大排序) percent:百分比 %=percent 比如要显示5%的数据处理,不能写top 5%,而是top 5 percent 提示:如果top 5 percent出来的数是3.1条数据的话,是取四条数据,而不

Hive学习之Union和子查询

Union的语法格式如下: select_statement UNION ALL select_statement UNION ALL select_statement ... Union用于将多个SELECT语句的查询结果合并到一个结果集中,目前Hive只支持UNION ALL,也就是结果集中的重复记录不会被删除.SELECT语句返回列的数目和名称必须相同,否则会报schema错误.Union语句还可以嵌套在FROM子句中: SELECT * FROM ( select_statement U

SQL文(UNION)

[2014/10/14 0:20] 数据库软件到期了,但是又想记忆一下UNION ~ORDER BY的用法. 连接数据库 start mysql -u root (没有设置密码) 查看数据库中的数据库 show databases; 选择test数据库 use test; 创建一个数据库(这样写好看点) String SQl="CREATE TABLE milk("+ " ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY ," +

SQL 百万级数据提高查询速度的方法

SQL 百万级数据提高查询速度的方法 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引.3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: