ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL 笔试题

SQL 笔试题

原创 Linux操作系统 作者:杨奇龙 时间:2010-07-12 22:28:55 0 删除 编辑

一个笔试题:

sql语句的问题

SQL> select * from test2;

         J          F
---------- ----------
         3          5
         4          5
         5          5

SQL> select * from test3;

         K          Y
---------- ----------
         5          0
         6          0
我需要得到的结果是

         DD         F             Y
---------- ----------   ----------
         3          5
         4          5
         5          5             0
         6                         0

 

 

SQL> insert into test2  values (3,5);
已创建 1 行。
SQL> insert into test2  values (4,5);
已创建 1 行。
SQL> insert into test2  values (5,5);
已创建 1 行。
SQL> create table test3 (k number,y number);

表已创建。
SQL> select * from test2;
         J          F                                                          
---------- ----------                                                          
         3          5                                                          
         4          5                                                          
         5          5                                                          

SQL> insert into test3  values (5,0);
已创建 1 行。
SQL> insert into test3  values (6,0);
已创建 1 行。
SQL> select * from test3;
         K          Y                                                          
---------- ----------                                                          
         5          0                                                          
         6          0                                                          

SQL> commit;
提交完成。

-------------错解------------
----使用union
SQL> select j DD,f,to_number(null) from test2
  2  union
  3  select k  ,to_number(null),y from test3;

        DD          F TO_NUMBER(NULL)                                          
---------- ---------- ---------------                                          
         3          5                                                          
         4          5                                                          
         5          5                                                          
         5                          0                                          
         6                          0                                         

-------------使用union all
SQL> select j DD,f,to_number(null) y from test2
  2  union all
  3  select k  ,to_number(null),y from test3;

        DD          F          Y                                               
---------- ---------- ----------                                               
         3          5                                                          
         4          5                                                          
         5          5                                                          
         5                     0                                               
         6                     0         

题目的意思是按test2.j=test3.k做full join
我写的肯定结果一样,因为没有重复行
                                       
 ------------正解-----------

SQL> select nvl(j,k) DD ,f,y from test2 full join test3 on j=k;
        DD          F          Y                                               
---------- ---------- ----------                                               
         3          5                                                          
         4          5                                                          
         5          5          0                                               
         6                      0
                                               
-------------------------------------

select dd,max(f),max(y)
from
(select j DD,f,to_number(null) y from test2
union
select k  ,to_number(null),y from test3)
group by dd;-------------风铃中の鬼提供!

-

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22664653/viewspace-667852/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
MySQL DBA NoSQL DEVOPS

注册时间:2009-10-07

  • 博文量
    1026
  • 访问量
    8205979