mysql中的union操作(整理)
mysql中的union操作(整理)
⼀、总结
⼀句话总结:
> union两侧的字段数和字段类型要是⼀样的
> union可以接多个
> orderby和排序可以在最后的union组合之后
1、union简单实例?
> SELECT country FROM Websites UNION SELECT country FROM apps ORDER BY country;
2、UNION和UNION ALL的区别是什么?
> UNION 语句:⽤于将不同表中相同列中查询的数据展⽰出来;(不包括重复数据)
plsql快捷键设置> UNION ALL 语句:⽤于将不同表中相同列中查询的数据展⽰出来;(包括重复数据)
3、laravel中union使⽤实例?
> query2中 union(query1)
$select_field=['comment_lessons.*','users.name','users.id','lessons.l_title','lessons.l_id'];
//1、这是所有我发的,我回复的或者我评论的:这⾥我并不需要知道⾃⼰的信息
//这是我回复别⼈的
$lesson_comments_active=CommentLesson::where('cl_u_id',$u_id)
->leftJoin('users', 'comment_lessons.cl_to_u_id', '=', 'users.id')
->join('lessons', 'comment_lessons.cl_l_id', '=', 'lessons.l_id')
->select($select_field);
//2、这是所有回复我的,我需要知道⽤户的信息
$lesson_comments=CommentLesson::where('cl_to_u_id',$u_id)
->join('users', 'comment_lessons.cl_u_id', '=', 'users.id')
javascript和mysql菜鸟教程->join('lessons', 'comment_lessons.cl_l_id', '=', 'lessons.l_id')
php数组有哪些
->union($lesson_comments_active)
->orderBy('cl_created_at','desc')->offset($offset)->limit($per_page_item_num)
->select($select_field)->get();
4、union重复的问题?
> select⼀般不产⽣重复数据,所以默认不消除重复记录,需要消除使⽤select DISTINCT.消除重复
> union⼤多数产⽣重复数据,默认是消除重复数据,使⽤union all 不消除重复数据
5、为什么在union在字句中排序没有意义?
> 对⽤户不可见:ORDER BY⼦句不能出现在由UNION操作组合的两个SELECT中。不管怎样,排序两个查询结果集并没有太多的意义,因为它们被直接加⼊到UNION操作中,对⽤户是不可见的。
> 字段未命名:因为由UNION操作⽣成的字段是没有命名的,ORDERBY⼦句必须按字段编号指定字段。
⼆、MySQL UNION 操作符(基础)
转⾃或参考:MySQL UNION 操作符
wwwblogs/hetaoyuan/p/11616172.html">MySQL UNION 操作符
描述
MySQL UNION 操作符⽤于连接两个以上的 SELECT 语句的结果组合到⼀个结果集合中。多个 SELECT 语句会删除重复的数据。
语法
MySQL UNION 操作符语法格式:
SELECT expression1, expression2, ... expression_n
FROM tables
python软件怎么改中文[WHERE conditions]
UNION[ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
参数
expression1, expression2, ... expression_n: 要检索的列。
tables: 要检索的数据表。
WHERE conditions: 可选,检索条件。
DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
ALL: 可选,返回所有结果集,包含重复数据。
演⽰数据库
下⾯是选⾃ "Websites" 表的数据:
mysql>SELECT*FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name        | url                      | alexa | country |
+----+--------------+---------------------------+-------+---------+
|1| Google      | /|1| USA    |
|2|淘宝| www.taobao/|13| CN      |
|3|菜鸟教程| www.runoob/|4689| CN      |
|4|微博| weibo/|20| CN      |
|5| Facebook    | www.facebook/|3| USA    |
|7| stackoverflow | stackoverflow/|0| IND    |
transformer的缺点
+----+---------------+---------------------------+-------+---------+
下⾯是 "apps" APP 的数据:
mysql>SELECT*FROM apps;
+----+------------+-------------------------+---------+
| id |app_name| url                    | country |
+----+------------+-------------------------+---------+
|1| QQ APP    | im.qq/| CN      |
|2|微博 APP | weibo/| CN      |
|3|淘宝 APP | www.taobao/| CN      |
+----+------------+-------------------------+---------+
3 rows in set (0.00 sec)
SQL UNION 实例
下⾯的 SQL 语句从 "Websites" 和 "apps" 表中选取所有不同的country(只有不同的值):
实例:
SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
注释:UNION 不能⽤于列出两个表中所有的country。如果⼀些⽹站和APP来⾃同⼀个国家,每个国家只会列出⼀次。UNION 只会选取不同的值。请使⽤UNION ALL 来选取重复的值!
SQL UNION ALL 实例
下⾯的 SQL 语句使⽤ UNION ALL 从 "Websites" 和 "apps" 表中选取所有的country(也有重复的值):
实例
int(input)函数
SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;
执⾏以上 SQL 输出结果如下:
带有 WHERE 的 SQL UNION ALL
下⾯的 SQL 语句使⽤ UNION ALL 从 "Websites" 和 "apps" 表中选取所有的中国(CN)的数据(也有重复的值):
实例
SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;
执⾏以上 SQL 输出结果如下:
NION 语句:⽤于将不同表中相同列中查询的数据展⽰出来;(不包括重复数据)
UNION ALL 语句:⽤于将不同表中相同列中查询的数据展⽰出来;(包括重复数据)
使⽤形式如下:
SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称;
SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称;
转载:
三、mysql 中的union ⽤法
转⾃或参考:mysql 中的union ⽤法 - 简书
www.jianshu/p/b8f7f122f8a4
UNION 在mysql 中被称为集合操作,操作类型分为两种:UNION DISTINCT 和  UNION ALL ;注意:UNION 和UNION DISTINCT 是⼀样的功能。UNION 功能为合并多个查询的结果并去重,UNION ALL 的功能为合并多个查询的结果不去重。
集合操作时,两边的输⼊必须拥有相同的列数,如果数据类型不同的话,mysql 会⾃动进⾏隐式转化 ;同时,结果列的名称由第⼀个查询的列的名称决定。下⾯看⼀下例⼦:
sql 语句为:SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION SELECT 'abc' as a,'haha',4 FROM DUAL;结果是:
如果是:SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION ALL SELECT 'abc' as a,'haha',4 FROM DUAL;
如果两次查询的列个数不⼀致,如:SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION ALL SELECT 'abc' as a,'haha' FROM DUAL;
在多个列查询时,只要有⼀个列的数据不⼀致时,都是⽆法去重的;也就是去重是每个列的数据完全⼀致,⽐如:SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION DISTINCT SELECT 'abc' as a,'haha',5 FROM DUAL;
这⼏个例⼦可以看出UNION (DISTINCT) 与 UNION ALL 的⽤法了吧,下⾯讲⼀下UNION (DISTINCT )的实现⽅式:
⼀:创建⼀张虚拟表;
⼆:对这张虚拟表的列添加唯⼀索引,即UNIQUE INDEX;
三:将结果插⼊虚拟表
四:返回虚拟表;
如何判断是否创建⼀个虚拟表,我们可以通过⼀下语句判断:
SHOW STATUS LIKE 'Created_tmp_tables';
SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION SELECT 'abc' as a,'haha',4 FROM DUAL;
SHOW STATUS LIKE 'Created_tmp_tables';                                                                                                            结果是:
可见结果3⽐结果1多1,在操作第⼆个 UNION语句时创建了⼀个虚拟表;如果UNION创建了索引,插⼊会相对变慢
四、mysql 中union使⽤
转⾃或参考:mysql 中union使⽤
blog.csdn/csdn132********/article/details/79573500
1.
2.union重复的问题:
select⼀般不产⽣重复数据,所以默认不消除重复记录,需要消除使⽤select DISTINCT.消除重复
union⼤多数产⽣重复数据,默认是消除重复数据,使⽤union all 不消除重复数据
3.union 和order by
union不能两个⼦查询都是⽤order by,他并不是将每个⼦查询⼀个⼀个查询出来后联接在⼀起,数据库是将整段查询语句理解之后统⼀查询得到的是整个的数据集合,只能在最后⼀个查询语句后⾯加,或者使⽤select from(...) order by
select * from [IND] where INDID>10 union select * from [IND] where INDID<9 order by INDID desc

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。