老师出了一道题,不是太难,但是我不知道如何把他们连起来
题目是:列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门。(scott权限下)我写了2条,但是不知道如何分开显示,有知道的帮忙解决下,谢谢!
Select dname,ename from emp e join dept d on e.deptno=d.deptno 
Select dname from dept where deptno not in(select deptno from emp group by deptno having count(1)>0)

解决方案 »

  1.   

    SELECT d.dname,e.ename FROM dept d,emp e
    WHERE d.deptno=e.deptno(+);考你(左右)外连接。
    上例是右外连接
      

  2.   

    是左外连接。也可以这些写:SELECT d.dname,e.ename FROM dept d LEFT JOIN emp e ON d.deptno=e.deptno;
      

  3.   


    SQL> select emp.*,dept.dname from emp,dept where emp.deptno = dept.deptno(+);EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO DNAME
    ----- ---------- --------- ----- ----------- --------- --------- ------ --------------
     7369 SMITH      CLERK      7902 1980-12-17     800.00               20 RESEARCH
     7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30 SALES
     7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30 SALES
     7566 JONES      MANAGER    7839 1981-4-2      2975.00               20 RESEARCH
     7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30 SALES
     7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30 SALES
     7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10 ACCOUNTING
     7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20 RESEARCH
     7839 KING       PRESIDENT       1981-11-17    5000.00               10 ACCOUNTING
     7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30 SALES
     7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20 RESEARCH
     7900 JAMES      CLERK      7698 1981-12-3      950.00               30 SALES
     7902 FORD       ANALYST    7566 1981-12-3     3000.00               20 RESEARCH
     7934 MILLER     CLERK      7782 1982-1-23     1300.00               10 ACCOUNTING14 rows selected
    SQL> 
    SQL> select dept.*
      2    from dept
      3   where not exists (select 1 from emp where emp.deptno = dept.deptno)
      4  /DEPTNO DNAME          LOC
    ------ -------------- -------------
        40 OPERATIONS     BOSTONSQL> 
    SQL> 
      

  4.   

    --楼主如果想要连接两个数据集使用union或union all
    --union 连接两个数据集并去重
    --union all 连接两个数据集不去重
    --以你的语句为例:
    Select dname,ename from emp e join dept d on e.deptno=d.deptno 
    union all
    Select dname,null ename from dept where deptno not in(select deptno from emp group by deptno having count(1)>0)
      

  5.   

    注意:union 的两个数据集列数要一样