登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

飞哥的技术博客

世上无难事,只怕有心人!

 
 
 

日志

 
 
 
 

union,intersect,minus以及连接在oracle中的用法  

2009-06-29 23:15:02|  分类: Oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
union,intersect,minus以及连接在oracle中的用法
2008/11/15 17:56

主要的代码如下:

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0     --以scott/tiger账户连接
Connected as scott

SQL> conn ;                                                   --以system/zengxiaohui账户连接
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as system

SQL> select count(*) from dba_tables;                                                   --查询system模式下所有表的个数

COUNT(*)
----------
      1588

SQL> conn ;                                                               --重新以scott/tiger账户连接数据库
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as scott

SQL> select count(*) from dba_table;        --输入错误,而来scott模式下没有该dba_tables视图,权限不够

select count(*) from dba_table

ORA-00942: 表或视图不存在

SQL> select count(*) from user_table;      --查询当前模式下所有表,应为user_tables;

select count(*) from user_table

ORA-00942: 表或视图不存在

SQL> select count(*) from user_tables;    --查询当前模式下所有表,

COUNT(*)
----------
        16

SQL> select count(*) from dba_tables;    --查询不了,权限不够

select count(*) from dba_tables

ORA-00942: 表或视图不存在

SQL> create table x(num number(1));       --创建表x

Table created

SQL> insert into x values(1);                      --以下插入相应的数据

1 row inserted

SQL> insert into x values(2);

1 row inserted

SQL> insert into x values(3);

1 row inserted

SQL> insert into x values(4);

1 row inserted

SQL> insert into x values(5);

1 row inserted

SQL> insert into x values(6);

1 row inserted

SQL> create table y(num number(1));      --创建表y

Table created

SQL> insert into y values(1);                   --以下插入相应的数据

1 row inserted

SQL> insert into y values(2);

1 row inserted

SQL> insert into y values(7);

1 row inserted

SQL> insert into y values(8);

1 row inserted

SQL> select a.num,b.num from x a full outer join y b on x.num = y.num;--用ANSI格式的全连接显示

select a.num,b.num from x a full outer join y b on x.num = y.num

ORA-06553: PLS-306: 调用 'OGC_X' 时参数个数或类型错误

SQL> select a.num,b.num from x a full outer join y b on a.num = b.num;--用ANSI格式的全连接显示

       NUM NUM
---------- ---
         1   1
         2   2
         6
         5
         4
         3
             7
             8

8 rows selected

SQL> select * from x union select * from y;      --union操作,添加合并相应数据,重复的算一次

NUM
---
1
2
3
4
5
6
7
8

8 rows selected

SQL> select * from x union all select * from y;    --union all操作,重复的算多次,不合并

NUM
---
1
2
3
4
5
6
1
2
7
8

10 rows selected

SQL> select * from x minus select * from y;    --minus操作,用集合表示就是x-y

NUM
---
3
4
5
6

SQL> select * from y minus select * from x;   --minus操作,用集合表示就是x-y,注意顺序不同,结果不同

NUM
---
7
8

SQL> select * from x intersect select * from y; --intersect操作,类似与交的操作,该操作有严重的性能问题,如果大家富于冒险精神,使用这种方法前一定要权衡利弊,三思而后行。

NUM
---
1
2

SQL> commit;           --事物提交

Commit complete

SQL> create table temp3 select * from x union select * from y;

create table temp3 select * from x union select * from y

ORA-00922: 选项缺失或无效

SQL> create table temp3 as select * from x union select * from y;   -- 用select语句创建一新表

Table created

SQL> select * from temp3;

NUM
---
1
2
3
4
5
6
7
8

8 rows selected

SQL> rollback;                       --建表的操作是自动提交的,不能回滚

Rollback complete

SQL> select * from temp3;

NUM
---
1
2
3
4
5
6
7
8

8 rows selected

SQL> select a.num,b.num from x a full outer join y b on a.num = b.num;

       NUM NUM
---------- ---
         1   1
         2   2
         6
         5
         4
         3
             7
             8

8 rows selected

SQL> select a.num,b.num from x a right outer join y b on a.num=b.num;   --右外连接,右边的表每一项都存在,与左边的表去比较,有的话显示,没有的话显示空值,该语句是ANSI格式的,等价与oracle格式的下面语句:select a.num,b.num from x a , y b where a.num(+)=b.num;

NUM NUM
--- ---
1   1
2   2
      7
      8

SQL> select a.num,b.num from x a,y b where a.num=b.num(+);    --左外连接,左表中的每一列与右表比较,显示没有与左表中对应的相应列

NUM NUM
--- ---
1   1
2   2
6
5
4
3

6 rows selected

SQL> select a.num,b.num from x a,y b where a.num(+)=b.num;

NUM NUM
--- ---
1   1
2   2
      7
      8

SQL> select a.num,b.num from x a,y b where a.num=b.num(+) union select a.num,b.num from x a,y b where a.num(+)=b.num;   --这是使用Union语句和左连接以及有链接来实现全外连接,注意的是下面的连接语句是错误的:select a.num,b.num from x a,y b where a.num(+)=b.num(+) 该语句不能实现全外连接。

NUM NUM
--- ---
1   1
2   2
3
4
5
6
      7
      8

8 rows selected



引文来源  union,intersect,minus以及连接在oracle中的用法_第七项修炼,开关啦
  评论这张
 
阅读(1373)| 评论(2)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018