您的位置:首页 > 数据库 > Oracle

【oracle T4】同义词、序列 、视图 、索引2017.7.26

2017-07-26 09:11 387 查看
一、数据库对象

1.为表vendor_master(vid,vname, VENADD1, VENADD2, VENADD3)创建一个视图,该视图将VENADD1、VENADD2和VENADD3(地址的三部分,都为varchar2性)
3个列连接起来组成名为VENADDRES的列.

2.创建名为“my_seq”的序列,该序列的起始值为1000,并在每次查询时增加10,直到该序列达到1100,然后重新从1000开始.

3.在表order_detail(oid,orderno,venderid, itemcode,customerid,customaddr)表的orderno和itemcode列上创建一个唯一组合索引.

二、使用如下表

emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)

dept部门表(deptno部门编号/dname部门名称/loc地点)

尽量用视图完成以下查询

1、列出月薪比 "BLAKE" 少的所有雇员

2、列出至少有一个雇员的部门详细信息

3、列出所有雇员的姓名及其直接上级的姓名。

4、列出入职日期早于其直接上级的所有雇员

5、列出没有雇员的部门信息

6、列出所有“CLERK”(办事员)的姓名及其部门名称

7、列出最低薪金大于1500的工作类别信息

8、列出月薪高于公司平均水平的所有雇员

9、列出与“SCOTT”从事相同工作的所有雇员

10、列出某些雇员的姓名和薪金,条件是他们的月薪高于部门30中所有雇员的薪金

11、列出每个部门的信息以及该部门中雇员的数量--

12、列出所有雇员的雇员名称、部门名称和月薪

13、列出各个部门的MANAGER(经理)的最低薪金

14、列出所有雇员的年薪,并且按年薪排序

15、列出薪金水平处于第四位到第七位的雇员

--1.为表vendor_master(vid,vname, VENADD1, VENADD2, VENADD3)创建一个视图,
-- 该视图将VENADD1、VENADD2和VENADD3(地址的三部分,都为varchar2性) 3个列
--  连接起来组成名为VENADDRES的列.
CREATE VIEW VENADDRES
AS SELECT VENADD1,VENADD2,VENADD3 FROM VENDOR_MOASTER;
--2.创建名为“my_seq”的序列,该序列的起始值为1000,并在每次查询时增加10,直到
--该序列达到1100,然后重新从1000开始.
CREATE SEQUENCE MY_SEQ
START WITH 1000
INCREMENT BY 10
MAXVALUE 1100
CYCLE;
--3.在表order_detail(oid,orderno,venderid, itemcode,customerid,customaddr)表
--的orderno和itemcode列上创建一个唯一组合索引.
CREATE UNIQUE INDEX idx_orderno_itemcode ON ORDER_DETAIL("orderno","itemcode");
--设计视图 V_EMP2 V_DEPT2,以便完成下列利用视图进行查询。
CREATE VIEW V_EMP2
AS SELECT EMP.*,DEPT.DNAME,DEPT.LOC FROM DEPT RIGHT JOIN EMP ON DEPT.DEPTNO=EMP.DEPTNO;
--1、列出月薪比 "BLAKE" 少的所有雇员
SELECT * FROM V_EMP2 WHERE SAL<(SELECT SAL FROM V_EMP2 WHERE ENAME='BLAKE');
--2、列出至少有一个雇员的部门详细信息
SELECT DISTINCT DEPTNO,DNAME,LOC
FROM V_EMP2 WHERE DEPTNO IN
(SELECT DEPTNO FROM V_EMP2
GROUP BY DEPTNO HAVING "COUNT"(DEPTNO)>=1);
--3、列出所有雇员的姓名及其直接上级的姓名。
select t1.ename ,t2.ename
from V_EMP2 t1 LEFT JOIN V_EMP2 t2
ON t1.mgr = t2.empno;
--4、列出入职日期早于其直接上级的所有雇员
SELECT A.ENAME FROM V_EMP2 A LEFT JOIN V_EMP2 B
ON B.EMPNO=A.MGR WHERE A.HIREDATE<B.HIREDATE;
--5、列出没有雇员的部门信息
SELECT DISTINCT DEPTNO,DNAME,LOC
FROM DEPT WHERE DEPTNO NOT IN
(SELECT DEPTNO FROM V_EMP2
GROUP BY DEPTNO HAVING "COUNT"(DEPTNO)>=1);
--6、列出所有“CLERK”(办事员)的姓名及其部门名称
select ename,dname from V_EMP2 where job = 'CLERK';
--7、列出最低薪金大于1500的工作类别信息
select JOB,MIN(sal)  from V_EMP2 GROUP BY JOB HAVING MIN(sal) > 1500;
--8、列出月薪高于公司平均水平的所有雇员
SELECT * FROM V_EMP2 WHERE SAL>(SELECT AVG(SAL) FROM V_EMP2);
--9、列出与“SCOTT”从事相同工作的所有雇员
SELECT * FROM V_EMP2 WHERE JOB =(SELECT JOB FROM V_EMP2 WHERE ENAME='SCOTT' )AND ENAME!='SCOTT';
--10、列出某些雇员的姓名和薪金,条件是他们的月薪高于部门30中所有雇员的薪金
SELECT ENAME,SAL FROM V_EMP2 WHERE SAL>(SELECT MAX(SAL) FROM V_EMP2 WHERE DEPTNO=30);
--11、列出每个部门的信息以及该部门中雇员的数量--
SELECT DEPT.*,(SELECT "COUNT"(*) FROM V_EMP2 W WHERE DEPT.DEPTNO=W.DEPTNO) FROM DEPT;
--12、列出所有雇员的雇员名称、部门名称和月薪
SELECT ENAME,DNAME,SAL FROM V_EMP2;
--13、列出各个部门的MANAGER(经理)的最低薪金
SELECT DEPTNO,MIN(SAL) FROM V_EMP2 WHERE JOB='MANAGER' GROUP BY DEPTNO ;
--14、列出所有雇员的年薪,并且按年薪排序
SELECT ENAME,SAL*12 MONEY FROM EMP ORDER BY MONEY;
--15、列出薪金水平处于第四位到第七位的雇员
SELECT t1.* FROM (SELECT e.*,row_number()over(ORDER BY sal) rank FROM   emp e) t1
WHERE  t1.rank BETWEEN 4 AND 7;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库
相关文章推荐