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

多表查询

笛卡尔积基本原理
两个表如果笛卡尔积运算
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值