前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住给大家分享一下。点击跳转到网站:https://www.captainai.net/dongkelun
前言
总结SQL UNION的用法与UNION 和 UNION ALL的区别,并指出对应的场景以及可能出现的问题解决。
语法
UNION1
2
3SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION ALL1
2
3SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
示例
建表(MYSQL)
1 | CREATE TABLE TEST_UNION ( |
1 | CREATE TABLE TEST_UNION2 ( |
1 | INSERT INTO demo1.TEST_UNION (ID, NAME) VALUES('001', '张三'); |
union
1 | SELECT ID,NAME from TEST_UNION |
1 | 001 张三 |
1
2
3SELECT ID,NAME from TEST_UNION
UNION ALL
SELECT ID,NAME from TEST_UNION2
1 | 001 张三 |
可以看出 UNION 和 UNION ALL 的区别:UNION 数据去重了,UNION ALL 不去重,允许数据重复
场景示例
UNION ALL,在统计数据的时候,比如俩表的数据分别代表不同来源或者不同时间,即虽然数据相同但是不是同一条数据,那么统计总数据量的时候需要UNION ALL
UNION,在展示数据的时候,比如需要展示的数据来自不同的表,不同表之间重复的数据为同一条,那么需要UNION
在确定没有相同数据的时候,UNION 和 UNION ALL 的效果一样,但是union的效率会低一些,因为union有去重的操作,所以比union all要慢,最好还是根据自己的需求确定用哪一个,防止有异常数据
查出的列名以第一个字句为准
1 | SELECT ID AS CARD_ID,NAME from TEST_UNION |
问题
1、ORA-12704: 字符集不匹配1
2
3
4
5SQL 错误 [12704] [72000]: ORA-12704: 字符集不匹配
ORA-12704: 字符集不匹配
ORA-12704: 字符集不匹配
参考:https://blog.csdn.net/gumengkai/article/details/51213537
Oracle建表测试1
2
3
4
5
6CREATE TABLE TEST (
ID VARCHAR2(100)
) ;
CREATE TABLE TEST1 (
ID NVARCHAR2(100)
) ;
1、
报错sql1
2SELECT '' id FROM test
UNION SELECT id FROM test1
修正后1
2SELECT N'' id FROM test
UNION SELECT id FROM test1
2、 报错sql1
2SELECT id FROM test
UNION SELECT id FROM test1
这时不能用上面的方法 (N)
修正后1
2
3
4
5
6SELECT cast(id as nvarchar2(100)) id FROM test
UNION SELECT id FROM test1
或
SELECT id FROM test
UNION SELECT TO_CHAR(id) FROM test1