黑马程序员c语言教程:多表查询_黑马程序员c语言教程
黑马程序员c语言教程:多表查询由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“黑马程序员c语言教程”。
笛卡尔积
部门表
笛卡尔积产生结果: 行数 两个表相乘
列数: 行数相加 原因
条件等值连接
select ****
from tab1, tab2
where tab1.a = tab2.aselect count(e.ename)from emp e, dept d
3* where e.deptno = d.deptno
SQL> /
COUNT(E.ENAME)
--------------
多表查询关键点:
等值连接 eg:查询员工信息,员工号,姓名,月薪,部门名称
select e.empno, e.ename, e.sal, d.dname
from emp e, dept d
3* where e.deptno = d.deptno
SQL> /
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
已选择14行。
不等值连接: eg:查询员工信息,员工号,姓名,月薪, 薪水级别
select e.empno, e.ename, e.sal, s.grade from emp e, salgrade s where e.sal >= s.losal and e.sal
select e.empno, e.ename, e.sal, s.grade from emp e, salgrade s where e.sal between s.losal and s.hisal
外连接 eg:按部门统计员工人数: 部门号 部门名称 各部门人数
分析1: 10 20 30 ====> 分组
分析2: 因为各部门人数 是在员工表中..多表查询
步骤1
select d.deptno, d.dname, count(e.empno)
from dept d, emp e
where d.deptno = e.deptno
group by d.deptno, d.dname
DEPTNO DNAME COUNT(E.EMPNO)
-------------------------------------
ACCOUNTING 3
RESEARCH 5
SALES 6
步骤2 外连接....分析:为什么40号部门没有统计出来
原因: 因员工表里面 没有40号部门的员工(现象)
where d.deptno = e.deptno(sql)问题的本质
40 =====>期望: 在连接条件不成立的条件下,也要把部门编号40 给显示出来....外连接...select d.deptno, d.dname, count(e.empno)
from dept d, emp e
where d.deptno = e.deptno(+)
group by d.deptno, d.dname
左外连接:(+)写在=号的右边
自连接:--查询员工信息 ,老板信息
显示: ****的老板是**** 自连接: 把一张表看成两张表,自连接
--员工表的老板 是 老板表的员工
select e.ename, b.ename
from emp e, emp b
where e.mgr = b.empno
select e.ename|| '的老板是' || b.ename
from emp e, emp b
where e.mgr = b.empno
====> 需求 把员工表的每一条记录都显示出来
select e.ename|| '的老板是' || b.ename
from emp e, emp b
where e.mgr = b.empno(+)
select e.ename|| '的老板是' || nvl(b.ename, '他自己')
from emp e, emp b
where e.mgr = b.empno(+)
SMITH的老板是FORD
MPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO----------------------------------------------------------------------------7369 SMITH CLERK 7902 17-12月-80 800 20 7499 ALLEN SALESMAN 7698 20-2月-81 1600 300 30 7521 WARD SALESMAN 7698 22-2月-81 1250 500 30 7566 JONES MANAGER 7839 02-4月-81 2975 20 7654 MARTIN SALESMAN 7698 28-9月-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-5月-81 2850 30 7782 CLARK MANAGER 7839 09-6月-81 2450 10 7788 SCOTT ANALYST 7566 19-4月-87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7844 TURNER SALESMAN 7698 08-9月-81 1500 0 30 7876 ADAMS CLERK 7788 23-5月-87 1100 20 7900 JAMES CLERK 7698 03-12月-81 950 30 7902 FORD ANALYST 7566 03-12月-81 3000 20 7934 MILLER CLERK 7782 23-1月-82 1300 10
14行。