Oracle数据库知识梳理---续(多表查询)

xiaoxiao2021-02-28  110

多表查询

笛卡尔积基本原理 两个表如果笛卡尔积运算 1 行数 两个表相乘 2 列数 两个表相加

select count(e.empno) from emp e,dept d where e.deptno = d.deptno; COUNT(E.EMPNO) -------------- 14 select count(e.empno) from emp e,dept d ; COUNT(E.EMPNO) -------------- 56

等值连接

查询员工信息,员工号,姓名,月薪,部门名称 select e.ename,e.empno,e.sal,d,dname from emp e,dept d where e.deptno = d.deptno; EMPNO ENAME SAL DNAME ---------- ---------- ---------- -------------- 7369 SMITH 800 RESEARCH 7499 ALLEN 1600 SALES 7521 WARD 1250 SALES 7566 JONES 2975 RESEARCH 7654 MARTIN 1250 SALES 7698 BLAKE 2850 SALES 7782 CLARK 2450 ACCOUNTING 7788 SCOTT 3000 RESEARCH 7839 KING 5000 ACCOUNTING 7844 TURNER 1500 SALES 7876 ADAMS 1100 RESEARCH 7900 JAMES 950 SALES 7902 FORD 3000 RESEARCH 7934 MILLER 1300 ACCOUNTING

不等值连接

查询员工信息,员工号,姓名,月薪,薪水级别 select e.empno, e.ename, e.sal, s.grade from emp e,salgrade s where e.sal >= s.losal and e.sal <= s.hisal; EMPNO ENAME SAL GRADE ---------- ---------- ---------- ---------- 7369 SMITH 800 1 7900 JAMES 950 1 7876 ADAMS 1100 1 7521 WARD 1250 2 7654 MARTIN 1250 2 7934 MILLER 1300 2 7844 TURNER 1500 3 7499 ALLEN 1600 3 7782 CLARK 2450 4 7698 BLAKE 2850 4 7566 JONES 2975 4 7788 SCOTT 3000 4 7902 FORD 3000 4 7839 KING 5000 5

外连接

按照部门统计员工人数: 部门号 部门名称 各部门人数 要将各个部门划分开 要分组 要使用部门表,员工表 需要多表查询 select d.deptno, d.dname, count(e.empno) from emp e, dept d where e.deptno = d.deptno group by d.deptno,by d.dname; DEPTNO DNAME COUNT(E.EMPNO) ---------- -------------- -------------- 10 ACCOUNTING 3 20 RESEARCH 5 30 SALES 6

我们的期望 想把40号部门给统计出来… 40号部门没有被统计出来的原因: 员工表中没有40号部门的员工…d.deptno = e.deptno (d.40 = e.40) 我想把部门表的所有列都显示出来, 就需要找到部门表 在对方写(+)

select d.deptno, d.dname, count(e.empno) from emp e,dept d where e.deptno(+) = d.deptno group by d.deptno,d.dname; DEPTNO DNAME COUNT(E.EMPNO) ---------- -------------- -------------- 10 ACCOUNTING 3 40 OPERATIONS 0 20 RESEARCH 5 30 SALES 6

自连接

查询员工信息,老板信息 显示*****的老板是****** 员工信息要查员工表,老板信息还要查员工表 员工表的老板是在老板表内(也就是老板表的员工) select e.ename || '的老板是' || b.ename from emp e,emp d where e.deptno(+) = d.mgr E.ENAME||'的老板是'||B.ENAME ---------------------------- SMITH的老板是FORD ALLEN的老板是BLAKE WARD的老板是BLAKE JONES的老板是KING MARTIN的老板是BLAKE BLAKE的老板是KING CLARK的老板是KING SCOTT的老板是JONES KING的老板是 TURNER的老板是BLAKE ADAMS的老板是SCOTT JAMES的老板是BLAKE FORD的老板是JONES MILLER的老板是CLARK
转载请注明原文地址: https://www.6miu.com/read-52436.html

最新回复(0)