综合练习

 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645

编写数据库脚本

-- 删除数据表
drop table purcase purge;
drop table product purge;
drop table customer purge;
-- 创建数据表
create table product(
	productid    varchar2(5),
    productname    varchar2(20)    not null,
    unitprice    number,
    category    varchar2(50),
    provider    varchar2(50)
);
create table customer(
	customerid    varchar2(5),
    name    varchar2(20)    not null,
    location    varchar2(50)
);
create table purcase(
	customerid    varchar2(5),
    productid    varchar2(5),
    quantity    number
);
SQL> -- 删除数据表
SQL> drop table purcase purge;
drop table purcase purge
           *
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> drop table product purge;
drop table product purge
           *
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> drop table customer purge;

表已删除。

SQL> -- 创建数据表
SQL> create table product(
  2  productid    varchar2(5),
  3      productname    varchar2(20)    not null,
  4      unitprice    number,
  5      category    varchar2(50),
  6      provider    varchar2(50)
  7  );

表已创建。

SQL> create table customer(
  2  customerid    varchar2(5),
  3      name    varchar2(20)    not null,
  4      location    varchar2(50)
  5  );

表已创建。

SQL> create table purcase(
  2  customerid    varchar2(5),
  3      productid    varchar2(5),
  4      quantity    number
  5  );

表已创建。

SQL>

列出受雇日期早于其直接上级的所有员工的编号、姓名、部门名称、部门位置、部门人数

确定要使用的数据表

emp 表:员工的编号、姓名

dept 表:部门名称、部门位置

emp 表:人数。emp 表:领导

确定已知的关联字段

员工与领导:emp.mgr=memp.empno

员工与部门:emp.deptno = dept.deptno

第一步:emp 表进行自身关联,而后除了设置消除笛卡尔积的条件,还要判断受雇日期

SQL> SELECT e.empno,e.ename
  2  FROM emp e,emp m
  3  WHERE e.mgr=m.empno(+) AND e.hiredate<m.hiredate ;

     EMPNO ENAME
---------- --------------------
      7499 ALLEN
      7521 WARD
      7566 JONES
      7698 BLAKE
      7782 CLARK
      7369 SMITH

已选择 6 行。

 第二步:找到部门信息

SQL> SELECT e.empno,e.ename,d.dname,d.loc
  2  FROM emp e,emp m,dept d
  3  WHERE e.mgr=m.empno(+) AND e.hiredate<m.hiredate
  4  AND e.deptno=d.deptno ;

     EMPNO ENAME                DNAME                        LOC
---------- -------------------- ---------------------------- --------------------------
      7521 WARD                 SALES                        CHICAGO
      7499 ALLEN                SALES                        CHICAGO
      7782 CLARK                ACCOUNTING                   NEW YORK
      7566 JONES                RESEARCH                     DALLAS
      7698 BLAKE                SALES                        CHICAGO
      7369 SMITH                RESEARCH                     DALLAS

已选择 6 行。

第三步:统计部门人数

SQL> SELECT e.empno,e.ename,d.dname,d.loc,temp.count
  2  FROM emp e,emp m,dept d,(
  3  SELECT deptno dno,COUNT(empno) count
  4  FROM emp
  5  GROUP BY deptno) temp
  6  WHERE e.mgr=m.empno(+) AND e.hiredate<m.hiredate
  7  AND e.deptno=d.deptno
  8  AND d.deptno=temp.dno ;

     EMPNO ENAME                DNAME                        LOC                             COUNT
---------- -------------------- ---------------------------- -------------------------- ----------
      7499 ALLEN                SALES                        CHICAGO                             6
      7521 WARD                 SALES                        CHICAGO                             6
      7566 JONES                RESEARCH                     DALLAS                              3
      7698 BLAKE                SALES                        CHICAGO                             6
      7782 CLARK                ACCOUNTING                   NEW YORK                            3
      7369 SMITH                RESEARCH                     DALLAS                              3

已选择 6 行。

列出所有“CLERK”(办事员)的姓名及其部门名称、部门人数、工资等级

确定要使用的数据表

emp 表:姓名

dept 表:部门名称

emp 表:统计部门人数

salgrade 表:得到工资等级

确定已知的关联字段

员工与部门:emp.deptno=dept.deptno

员工与工资等级:emp.sal BETWEEN salgrade.losal AND salgrade.hisal

第一步:找到所有办事员的信息

SQL> SELECT e.ename
  2  FROM emp e
  3  WHERE e.job='CLERK' ;

ENAME
--------------------
SMITH
JAMES
MILLER

 第二步:找到部门名称

SQL> SELECT e.ename,d.dname
  2  FROM emp e ,dept d
  3  WHERE e.job='CLERK' AND e.deptno=d.deptno ;

ENAME                DNAME
-------------------- ----------------------------
MILLER               ACCOUNTING
SMITH                RESEARCH
JAMES                SALES

第三步:统计出部门人数

SQL> SELECT e.ename,d.dname,temp.count
  2  FROM emp e ,dept d,(
  3  SELECT deptno dno,COUNT(empno) count
  4  FROM emp
  5  GROUP BY deptno) temp
  6  WHERE e.job='CLERK' AND e.deptno=d.deptno
  7  AND d.deptno=temp.dno;

ENAME                DNAME                             COUNT
-------------------- ---------------------------- ----------
JAMES                SALES                                 6
MILLER               ACCOUNTING                            3
SMITH                RESEARCH                              3

第四步:找到工资等级

SQL> SELECT e.ename,d.dname,temp.count,s.grade
  2  FROM emp e ,dept d,(
  3  SELECT deptno dno,COUNT(empno) count
  4  FROM emp
  5  GROUP BY deptno) temp,salgrade s
  6  WHERE e.job='CLERK' AND e.deptno=d.deptno
  7  AND d.deptno=temp.dno
  8  AND e.sal BETWEEN s.losal AND s.hisal;

ENAME                DNAME                             COUNT      GRADE
-------------------- ---------------------------- ---------- ----------
MILLER               ACCOUNTING                            3          2
JAMES                SALES                                 6          1
SMITH                RESEARCH                              3          1

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子味冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值