黑马程序员c语言教程:多表查询_黑马程序员c语言教程

2020-02-28 其他范文 下载本文

黑马程序员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行。

《黑马程序员c语言教程:多表查询.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
黑马程序员c语言教程:多表查询
点击下载文档
相关专题 黑马程序员c语言教程 黑马 程序员 语言 黑马程序员c语言教程 黑马 程序员 语言
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文