老师出了一道题,不是太难,但是我不知道如何把他们连起来
题目是:列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门。(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)
题目是:列出部门名称和这些部门的雇员,同时列出那些没有雇员的部门。(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)
WHERE d.deptno=e.deptno(+);考你(左右)外连接。
上例是右外连接
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>
--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)