zoukankan      html  css  js  c++  java
  • Oracle: 四、对scott用户的基本查询操作(上篇)

    内容简介

       1,Scott实例用户(Oracle官方提供)。2,Scott用户单词备注。3,对scott用户的查询操作。

     

    技术与环境

    操作系统:

    windows

    语言类别:

    SQL之PL/SQL

    thankyou: sunshine, 谢谢你的默默付出

    数据库:

    Oracle

    学习软件:

    Oracle 10g

    课程总策划:

    yuanbo

    English name:

    sunshine

    个人主页:

    http://www.cnblogs.com/ylbtech/

    科研团队:

    ylbtech

    教研团队:

    ylbtech

     

    1,scott实例使用(Oracle官方提供)  
    --==================================
    ---ylb:Oracle
    ---13:54 2011-12-30
    ---Oracle官方提供的用户
    --==================================
     
    Rem Copyright (c) 1990 by Oracle Corporation
    Rem NAME
    REM    UTLSAMPL.SQL
    Rem  FUNCTION
    Rem  NOTES
    Rem  MODIFIED
    Rem gdudey    06/28/95 -  Modified for desktop seed database
    Rem glumpkin   10/21/92 -  Renamed from SQLBLD.SQL
    Rem blinden   07/27/92 -  Added primary and foreign keys to EMP and DEPT
    Rem rlim    04/29/91 -       change char to varchar2
    Rem mmoore    04/08/91 -       use unlimited tablespace priv
    Rem pritto    04/04/91 -       change SYSDATE to 13-JUL-87
    Rem   Mendels  12/07/90 - bug 30123;add to_date calls so language independent
    Rem
    rem
    rem $Header: utlsampl.sql 7020100.1 94/09/23 22:14:24 cli Generic<base> $ sqlbld.sql
    rem
    SET TERMOUT OFF
    SET ECHO OFF
    rem CONGDON    Invoked in RDBMS at build time.  29-DEC-1988
    rem OATES:     Created: 16-Feb-83
    GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO SCOTT IDENTIFIED BY TIGER;
    ALTER USER SCOTT DEFAULT TABLESPACE USERS;
    ALTER USER SCOTT TEMPORARY TABLESPACE TEMP;
    CONNECT SCOTT/TIGER
    DROP TABLE DEPT;
    CREATE TABLE DEPT
           (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
     DNAME VARCHAR2(14) ,
     LOC VARCHAR2(13) ) ;
    DROP TABLE EMP;
    CREATE TABLE EMP
           (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
     ENAME VARCHAR2(10),
     JOB VARCHAR2(9),
     MGR NUMBER(4),
     HIREDATE DATE,
     SAL NUMBER(7,2),
     COMM NUMBER(7,2),
     DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
    INSERT INTO DEPT VALUES
     (10,'ACCOUNTING','NEW YORK');
    INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
    INSERT INTO DEPT VALUES
     (30,'SALES','CHICAGO');
    INSERT INTO DEPT VALUES
     (40,'OPERATIONS','BOSTON');
    INSERT INTO EMP VALUES
    (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
    INSERT INTO EMP VALUES
    (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
    INSERT INTO EMP VALUES
    (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
    INSERT INTO EMP VALUES
    (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
    INSERT INTO EMP VALUES
    (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
    INSERT INTO EMP VALUES
    (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
    INSERT INTO EMP VALUES
    (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
    INSERT INTO EMP VALUES
    (7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87')-85,3000,NULL,20);
    INSERT INTO EMP VALUES
    (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
    INSERT INTO EMP VALUES
    (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
    INSERT INTO EMP VALUES
    (7876,'ADAMS','CLERK',7788,to_date('13-JUL-87')-51,1100,NULL,20);
    INSERT INTO EMP VALUES
    (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
    INSERT INTO EMP VALUES
    (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
    INSERT INTO EMP VALUES
    (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
    DROP TABLE BONUS;
    CREATE TABLE BONUS
     (
     ENAME VARCHAR2(10) ,
     JOB VARCHAR2(9)  ,
     SAL NUMBER,
     COMM NUMBER
     ) ;
    DROP TABLE SALGRADE;
    CREATE TABLE SALGRADE
          ( GRADE NUMBER,
     LOSAL NUMBER,
     HISAL NUMBER );
    INSERT INTO SALGRADE VALUES (1,700,1200);
    INSERT INTO SALGRADE VALUES (2,1201,1400);
    INSERT INTO SALGRADE VALUES (3,1401,2000);
    INSERT INTO SALGRADE VALUES (4,2001,3000);
    INSERT INTO SALGRADE VALUES (5,3001,9999);
    COMMIT;
    SET TERMOUT ON
    SET ECHO ON
    


    2,Scott用户内容单词备注
    emp员工表 字段内容如下:
    empno  员工号
    ename  员工姓名
    job  工作
    mgr  上级编号
    hiredate 受雇日期
    sal  薪金
    comm  佣金
    deptno  部门编号

    dept 部门表 字段内容如下:
    deptno 部门号
    ename 部门名称
    loc 地方

    bonus 奖金表 字段内容如下:
    ename  员工姓名
    job 工作名称
    sal 薪金
    comm 佣金
     
    3,Demo scott用户操作
     
    --======================================
    --YLB:ORACLE
    --15:23 2011-12-30
    --1,ORACLE查询操作
    --======================================
     
    clear screen;
    connect system/system
    drop user scott cascade;
    create user scott identified by tiger;
    grant connect,resource to scott;
    connect scott/tiger
    show user;
    --创建用员工表
    create table emp
    (
    empid number(4),--编号
    ename varchar(20),--姓名
    job varchar(20), --工作 
    mgr number(4),  --上级编号
    hiredate date,  --受雇日期
    sal number(7,2), --薪金
    comm number(7,2), --佣金
    deptno number(2) --部门编号
     );
    insert into emp values(7369,'SMITH','CLERK',7902,to_date('12/17/1980','mm/dd/yyyy'),800,null,20);
    insert into emp values(7499,'ALLEN','SALESMAN',7698,to_date('02/20/1981','mm/dd/yyyy'),1600,300,30);
    insert into emp values(7521,'WARD','SALESMAN',7698,to_date('02/22/1981','mm/dd/yyyy'),1250,500,30);
    insert into emp values(7566,'JONES','MANAGER',7839,to_date('04/02/1981','mm/dd/yyyy'),2975,null,20);
    insert into emp values(7654,'MARTIN','SALESMAN',7698,to_date('09/28/1981','mm/dd/yyyy'),1250,1400,30);
    insert into emp values(7698,'BLAKE','MANAGER',7839,to_date('05/01/1981','mm/dd/yyyy'),2850,null,30);
    insert into emp values(7782,'CLARK','MANAGER',7839,to_date('06/09/1981','mm/dd/yyyy'),2450,null,10);
    insert into emp values(7788,'SCOTT','ANALYST',7566,to_date('04/19/1987','mm/dd/yyyy'),3000,null,20);
    insert into emp values(7839,'KING','PRESIDENT',null,to_date('11/17/1981','mm/dd/yyyy'),5000,null,10);
    insert into emp values(7844,'TURNER','SALESMAN',7698,to_date('09/08/1981','mm/dd/yyyy'),1500,0,30);
    insert into emp values(7876,'ADAMS','CLERK',7788,to_date('05/23/1987','mm/dd/yyyy'),1100,null,20);
    insert into emp values(7900,'JAMES','CLERK',7698,to_date('12/03/1981','mm/dd/yyyy'),950,null,30);
    insert into emp values(7902,'FORD','ANALYST',7566,to_date('12/03/1981','mm/dd/yyyy'),3000,null,20);
    insert into emp values(7934,'MILLER','CLERK',7782,to_date('01/23/1982','mm/dd/yyyy'),1300,null,10);
    commit;
     
     
     ---下面是查询操作
     
    --1.选择部门30中的所有员工.
    select * from emp where deptno=30;
    --2.列出所有办事员(CLERK)的姓名,编号和部门编号.
    select ename,empid,deptno from emp 
    where job='CLERK'
    --3.找出佣金高于薪金的员工.
    select ename,empid from emp
    where comm>sal;
    --4.找出佣金高于薪金的60%的员工.
    select empid,ename from emp
    where comm>sal*0.6;
    --5.找出部门10中所有经理(MANAGER)
    --和部门20中所有办事员(CLERK)的详细资料.
    select * from emp
    where deptno=10 and job='MANAGER' 
    or deptno=20 and job='CLERK'
    --6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK)
    --,既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详
    细资料.
    --分析
    select * from emp
    where deptno=10 and job='MANAGER' or deptno=20 and 
    job='CLERK';
    select * from emp
    where job not in('MANAGER','CLERK') and sal>=2000;
    --结论
    select * from emp
    where deptno=10 and job='MANAGER' or deptno=20 and 
    job='CLERK'
    or job not in('MANAGER','CLERK') and sal>=2000;
    
    --7.找出收取佣金的员工的不同工作.
    SELECT DISTINCT JOB FROM EMP 
    WHERE COMM IS NOT NULL;
    --p:8.找出不收取佣金或收取的佣金低于100的员工.
    SELECT * FROM EMP
    WHERE COMM<100 OR COMM IS NULL;
    --9.找出各月倒数第3天受雇的所有员工.
    SELECT * FROM EMP
    WHERE HIREDATE =LAST_DAY(HIREDATE)-2;
    --10.找出早于12年前受雇的员工.
    --select hiredate from emp where hiredate < sysdate-;
    select ename from emp where hiredate < add_months(sysdate,-
    12*12);
    SELECT EMPID,ENAME FROM EMP
    WHERE HIREDATE <ADD_MONTHS(SYSDATE,-12*12);
    SELECT EMPID,ENAME FROM EMP
    WHERE ADD_MONTHS(SYSDATE,12*12)> SYSDATE;
    --z:11.以首字母大写的方式显示所有员工的姓名.
    select initcap(ename) from emp;
    --12.显示正好为5个字符的员工的姓名.
    select ename from emp where ename like '_____';
    --通配符
    --%
    --_
    --[1-9]
    --[^1-9]
    SELECT ENAME FROM EMP 
    WHERE ENAME LIKE '_____';
    --
    SELECT ENAME FROM EMP 
    WHERE LENGTH(ENAME)=5;
    --13.显示不带有"R"的员工的姓名.
    select ename from emp where ename not like '%R%';
    SELECT ENAME FROM EMP
    WHERE ENAME NOT LIKE '%R%'
    --14.显示所有员工姓名的前三个字符.
    SELECT SUBSTR(ENAME,1,3) FROM EMP;
    --15.显示所有员工的姓名,用a替换所有"A"
    SELECT REPLACE(ENAME,'A','a') FROM EMP;
    --16.显示满10年服务年限的员工的姓名和受雇日期.
    SELECT ENAME,HIREDATE FROM EMP
    WHERE HIREDATE<ADD_MONTHS(SYSDATE,-10*12);
    --17.显示员工的详细资料,按姓名排序.
    --ASC|DESC
    SELECT * FROM EMP
    ORDER BY ENAME;
    --18.显示员工的姓名和受雇日期,根据其服务年限
    --,将最老的员工排在最前面.
    SELECT ENAME,HIREDATE FROM EMP
    ORDER BY HIREDATE ASC;
    --19.显示所有员工的姓名、工作和薪金,按工作的降序排序
    --,若工作相同则按薪金排序.
    SELECT * FROM EMP
    ORDER BY JOB DESC,SAL DESC;
    --20.显示所有员工的姓名、加入公司的年份和月份
    --,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前
    面.
    SELECT * FROM EMP
    ORDER BY TO_CHAR(HIREDATE,'MM') ASC,TO_CHAR(HIREDATE,'YYYY')
    ASC;
    SELECT * FROM EMP;
    --21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.
    SELECT FLOOR(SAL/30) FROM EMP;
    --22.找出在(任何年份的)2月受聘的所有员工。
    SELECT * FROM EMP
    WHERE TO_CHAR(HIREDATE,'MM')=2;
    
    --P:23.对于每个员工,显示其加入公司的天数.
    SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;
    --24.显示姓名字段的任何位置包含"A"的所有员工的姓名.
    SELECT ENAME FROM EMP
    WHERE ENAME LIKE '%A%';
    --25.以年月日的方式显示所有员工的服务年限. (大概)
    --年
    SELECT FLOOR(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE))/12) FROM 
    EMP;
    --月
    2011-2-15
    -
    2011-12-30
    SELECT MOD(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE)),12) FROM 
    EMP;
    --日
    SELECT TO_CHAR(HIREDATE,'DD') FROM EMP;
    SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL;
    --
    SELECT (TO_CHAR(SYSDATE,'DD')-TO_CHAR(HIREDATE,'DD')) FROM 
    EMP;
    --字符串链接
    SELECT FLOOR(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE))/12)||'年
    ' FROM EMP;
    
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     

  • 相关阅读:
    快速莫比乌斯变换(FMT)和快速沃尔什变换(FWT)
    组合意义证明——「Zeilberger 老爷子的 T 恤上写了啥?」
    【题解】礼物 | [洛谷 P4916] 魔力环【20210113 省选模拟赛】【Burnside引理 容斥 组合数】
    线性基总结
    HTML中的img标签属性
    html5语义化标签
    html中代替空格、大于号、小于号等字符编码
    前端网页全局属性
    js中的script标签属性
    html中的meta标签属性
  • 原文地址:https://www.cnblogs.com/ylbtech/p/2630563.html
Copyright © 2011-2022 走看看