您的位置:首页 > 数据库

动手写出这个SQL,加深自己对于JOIN内容的学习

2013-11-02 17:04 232 查看
讨论背景:

(新用户)通过表A获取的记录集,如下:

1   2012-11-1
3   2012-11-2
8   2012-11-5

(老用户)通过表B获取的记录集,如下:

5   2012-11-1
3   2012-11-2

我想将这两个结果集合并为一个结果集。显示的结果如下:

日期         新用户    老用户
2012-11-1     1          5
2012-11-2     3          3
2012-11-5     8          0

如果不能合并。只能在查找注册用户的语句循环中。每次都要通过当前的日期来再做一次查询(统计老用户)。这样的效率也太低。 

讨论话题:如何合并两个查询的结果集的数据?

----------------------------------------------------------------------------------------------------------------------------------------------------

SQL> CREATE TABLE A (rid number,rdate date);

表已创建。

SQL> INSERT INTO A VALUES (1,'01-11月-12');

已创建 1 行。

SQL> INSERT INTO A VALUES (3,'02-11月-12');

已创建 1 行。

SQL> INSERT INTO A VALUES (8,'05-11月-12');

已创建 1 行。

SQL> commit;

提交完成。
----------------------------------------------------------------------------------------------------------------------------------------------------

SQL> CREATE TABLE B (rid number,rdate date);

表已创建。

SQL> INSERT INTO B VALUES (5,'01-11月-12');

已创建 1 行。

SQL> INSERT INTO B VALUES (3,'02-11月-12');

已创建 1 行。

SQL> commit;

提交完成。
----------------------------------------------------------------------------------------------------------------------------------------------------

SQL> SELECT * FROM a;

       RID RDATE

---------- --------------
1 01-11月-12
3 02-11月-12
8 05-11月-12

SQL> SELECT * FROM b;

       RID RDATE

---------- --------------
5 01-11月-12
3 02-11月-12
----------------------------------------------------------------------------------------------------------------------------------------------------

SQL> SELECT a.rdate  "日期", a.rid  "新用户",NVL(b.rid,0) "老用户" FROM  a FULL OUTER JOIN b ON a.rdate=b.rdate;

日期   新用户     老用户

-------------- ---------- ----------

01-11月-12 1
  5

02-11月-12 3
  3

05-11月-12 8
  0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SQL JOIN
相关文章推荐