zoukankan      html  css  js  c++  java
  • oracle学习记录

    select EMPLOYEE_ID, LAST_NAME, SALARY, GRADE_LEVEL
    from EMPLOYEES e,
         JOB_GRADES j
    where e.SALARY between j.LOWEST_SAL and j.HIGHEST_SAL;
    
    select last_name, department_name, city
    from departments d,
         employees e,
         locations l
    where d.department_id = e.department_id
      and d.location_id = l.location_id;
    
    
    select *
    from EMPLOYEES
    where EMPLOYEE_ID = (select MANAGER_ID from EMPLOYEES where LAST_NAME = 'Chen');
    
    
    select e.LAST_NAME, e.SALARY, j.GRADE_LEVEL
    from EMPLOYEES e,
         JOB_GRADES j
    where SALARY between j.LOWEST_SAL and j.HIGHEST_SAL;
    
    -- 左外连接  右外连接
    select e.LAST_NAME, d.DEPARTMENT_ID, d.DEPARTMENT_NAME
    from EMPLOYEES e,
         DEPARTMENTS d
    where e.DEPARTMENT_ID = d.DEPARTMENT_ID(+);
    
    select e.LAST_NAME, d.DEPARTMENT_ID, d.DEPARTMENT_NAME
    from EMPLOYEES e,
         DEPARTMENTS d
    where e.DEPARTMENT_ID(+) = d.DEPARTMENT_ID;
    
    
    -- 左外连接  右外连接
    select LAST_NAME, DEPARTMENT_NAME
    from EMPLOYEES e
             left outer join DEPARTMENTS d on e.DEPARTMENT_ID = d.DEPARTMENT_ID;
    
    select LAST_NAME, DEPARTMENT_NAME
    from EMPLOYEES e
             right join DEPARTMENTS d on e.DEPARTMENT_ID = d.DEPARTMENT_ID;
    
    -- 全外连接
    select LAST_NAME, d.DEPARTMENT_NAME, d.DEPARTMENT_ID
    from EMPLOYEES e
             full join DEPARTMENTS d on e.EMPLOYEE_ID = d.MANAGER_ID
    
    
    select e.LAST_NAME, d.DEPARTMENT_ID, d.DEPARTMENT_NAME
    from EMPLOYEES e,
         DEPARTMENTS d
    where e.DEPARTMENT_ID = d.DEPARTMENT_ID(+);
    
    select e.JOB_ID, d.LOCATION_ID, d.DEPARTMENT_ID
    from EMPLOYEES e
             left join DEPARTMENTS d on e.DEPARTMENT_ID = d.DEPARTMENT_ID
    where d.DEPARTMENT_ID = '90';
    
    
    select e.LAST_NAME, d.DEPARTMENT_NAME, d.LOCATION_ID, l.CITY
    from EMPLOYEES e
             left join DEPARTMENTS d on e.DEPARTMENT_ID = d.DEPARTMENT_ID
             inner join LOCATIONS l on l.LOCATION_ID = d.LOCATION_ID
    where COMMISSION_PCT is not null;
    
    
    select e.LAST_NAME, e.JOB_ID, d.DEPARTMENT_ID, d.DEPARTMENT_NAME, l.CITY
    from EMPLOYEES e
             inner join DEPARTMENTS d on e.DEPARTMENT_ID = d.DEPARTMENT_ID
             inner join LOCATIONS l on d.LOCATION_ID = l.LOCATION_ID
    where l.CITY = 'Toronto';
    
    -- 透过现象看本质 虽然写的是manger 但是本质还是名字 so……
    select e1.LAST_NAME employees, e1.EMPLOYEE_ID, e2.LAST_NAME manager, e2.EMPLOYEE_ID Mgr#
    from EMPLOYEES e1
             right join EMPLOYEES e2 on e1.MANAGER_ID = e2.EMPLOYEE_ID
    where lower(e1.LAST_NAME) = 'kochhar'
    
    select count(1)
    from EMPLOYEES;
    
    select count(DEPARTMENT_ID)
    from EMPLOYEES;
    
    select DEPARTMENT_ID, JOB_ID, round(avg(SALARY), 2)
    from EMPLOYEES
    group by DEPARTMENT_ID, JOB_ID;
    
    select DEPARTMENT_ID, avg(SALARY) salary
    from EMPLOYEES
    group by DEPARTMENT_ID
    having avg(SALARY) > 6000
    order by SALARY desc;
    
    
    select distinct count(*)
    from EMPLOYEES;
    
    select DEPARTMENT_ID, avg(SALARY)
    from EMPLOYEES
    group by DEPARTMENT_ID;
    
    select avg(SALARY)
    from EMPLOYEES e
             join DEPARTMENTS d on e.DEPARTMENT_ID = d.DEPARTMENT_ID
             join LOCATIONS l on d.LOCATION_ID = l.LOCATION_ID
    where CITY = 'Toronto';
    
    select CITY, avg(SALARY)
    from EMPLOYEES e
             inner join DEPARTMENTS d on e.DEPARTMENT_ID = d.DEPARTMENT_ID
             inner join LOCATIONS l on d.LOCATION_ID = l.LOCATION_ID
    group by CITY
    having CITY is not null;
    
    select d.DEPARTMENT_ID, avg(SALARY)
    from EMPLOYEES e
             inner join DEPARTMENTS d on e.DEPARTMENT_ID = d.DEPARTMENT_ID
    group by d.DEPARTMENT_ID
    having avg(SALARY) > 8000;
    
    select j.JOB_TITLE, avg(SALARY)
    from EMPLOYEES e
             inner join JOBS j on e.JOB_ID = j.JOB_ID
    group by JOB_TITLE
    having avg(SALARY) > 6000;
    
    
    select LAST_NAME, SALARY
    from EMPLOYEES
    where SALARY > (select SALARY from EMPLOYEES where LAST_NAME = 'Abel');
    
    
    -- manger_id 也是employee_id  所以使用子查询就行。
    select *
    from EMPLOYEES
    where EMPLOYEE_ID = (select MANAGER_ID from EMPLOYEES where LAST_NAME = 'Chen');
    
    select LAST_NAME, JOB_ID, SALARY
    from EMPLOYEES
    where JOB_ID = (select JOB_ID from EMPLOYEES where EMPLOYEE_ID = 141)
      and SALARY > (select SALARY from EMPLOYEES where EMPLOYEE_ID = 143);
    
    
    select LAST_NAME, JOB_ID, SALARY
    from EMPLOYEES
    where SALARY = (select min(SALARY) from EMPLOYEES);
    
    select DEPARTMENT_ID, min(SALARY)
    from EMPLOYEES
    group by DEPARTMENT_ID
    having min(SALARY) > (select min(SALARY) from EMPLOYEES where DEPARTMENT_ID = 50);
    
    select LAST_NAME, JOB_ID, SALARY
    from EMPLOYEES
    where SALARY < (select min(SALARY) from EMPLOYEES where JOB_ID = 'IT_PROG')
      and JOB_ID != 'IT_PROG';
    
    
    select LAST_NAME, SALARY
    from EMPLOYEES
    where SALARY > (select SALARY from EMPLOYEES where LAST_NAME = 'Abel');
    
    
    --求平均工资最低的部门信息
    select *
    from DEPARTMENTS
    where DEPARTMENT_ID = (select DEPARTMENT_ID
                           from EMPLOYEES
                           group by DEPARTMENT_ID
                           having avg(SALARY) = (select min(avg(SALARY)) from EMPLOYEES group by EMPLOYEES.DEPARTMENT_ID))
    
    --平均工资最高的job信息
    
    select *
    from JOBS
    where JOB_ID = (select JOB_ID
                    from EMPLOYEES
                    group by JOB_ID
                    having max(SALARY) = (select max(avg(SALARY)) from EMPLOYEES group by EMPLOYEES.JOB_ID));
    
    SELECT job_id
    FROM employees
    GROUP BY job_id
    HAVING avg(salary) = (
        SELECT max(avg(salary))
        FROM employees
        GROUP BY job_id
    );
    
    select DEPARTMENT_ID
    from EMPLOYEES
    group by DEPARTMENT_ID
    having avg(SALARY) > (select avg(SALARY) from EMPLOYEES);
    
    SELECT department_id
    FROM employees
    GROUP BY department_id
    HAVING avg(salary) > (
        SELECT avg(salary)
        FROM employees
    );
    
    --创建视图
    
    create view empview
    as
    select EMPLOYEE_ID, LAST_NAME, SALARY
    from EMPLOYEES
    where DEPARTMENT_ID = 80;
    
    select *
    from empview;
    
    update empview
    set SALARY=20000
    where EMPLOYEE_ID = 179;
    
    update empview
    set SALARY=20000
    where EMPLOYEE_ID = 177
    
    select EMPLOYEE_ID, SALARY
    from EMPLOYEES
    where EMPLOYEE_ID = 177
    
    commit;
    
    create view empview2
    as
    select EMPLOYEE_ID id, LAST_NAME name, SALARY, DEPARTMENT_NAME
    from EMPLOYEES e,
         DEPARTMENTS d
    where d.DEPARTMENT_ID = e.DEPARTMENT_ID;
    
    
    create view empview3
    as
    select DEPARTMENT_NAME, avg(SALARY) avg_sal
    from EMPLOYEES e,
         DEPARTMENTS d
    where e.DEPARTMENT_ID = d.DEPARTMENT_ID
    group by DEPARTMENT_NAME;
    
    select ROWNUM, EMPLOYEE_ID, LAST_NAME, SALARY
    from (select EMPLOYEE_ID, LAST_NAME, SALARY from EMPLOYEES order by SALARY desc)
    where ROWNUM <= 10;
    
    select rn, EMPLOYEE_ID, LAST_NAME, SALARY
    from (
             select ROWNUM rn, EMPLOYEE_ID, LAST_NAME, SALARY
             from (select EMPLOYEE_ID, LAST_NAME, SALARY from EMPLOYEES order by SALARY desc))
    where rn >= 40
      and rn <= 50
    
    
    --创建序列
    create sequence empseq
        increment by 10 --每次增长10
        start with 10 --从10开始增长
        maxvalue 100 -- 最大值100
        cycle --需要循环
        nocache -- 不需要缓存登录
    
    
    select EMPLOYEE_ID, LAST_NAME, JOB_ID
    from EMPLOYEES e1
    where 2 <= (select count(*) from JOB_HISTORY where e1.EMPLOYEE_ID = JOB_HISTORY.EMPLOYEE_ID);
    
    select LAST_NAME, DEPARTMENT_ID, SALARY
    from EMPLOYEES
    where (SALARY, DEPARTMENT_ID) in
          (select SALARY, DEPARTMENT_ID from EMPLOYEES where EMPLOYEES.COMMISSION_PCT is not null);
    
    call SP_emp();
    declare
        --声明变量
        V_sal      number(20, 2);
        V_email    varchar2(20);
        V_hiredate date ;
    begin
        --SQL语句的操作  select ... into ....from ... where ...
        select SALARY, EMAIL, HIRE_DATE into V_sal, V_email,V_hiredate from EMPLOYEES where EMPLOYEE_ID = 100;
        --打印
        DBMS_OUTPUT.PUT_line(V_sal || ',' || V_email || ',' || V_hiredate);
    end;
    
    declare
        --声明一个记录类型
        type emp_record is record
                           (
                               V_sal       EMPLOYEES.salary%type,
                               V_email     employees.email%type,
                               V_hire_date EMPLOYEES.hire_date%type
                           );
        V_emp_record emp_record;
    begin
        --SQL语句的操作  select ... into ....from ... where ...
        select SALARY, EMAIL, HIRE_DATE into V_emp_record from EMPLOYEES where EMPLOYEE_ID = 100;
        --打印
        DBMS_OUTPUT.PUT_line(V_emp_record.V_sal || ',' || V_emp_record.V_email || ',' || V_emp_record.V_hire_date);
    end;
    
    declare
        v_sal    number(8, 2) := 0;
        v_emp_id number(10);
    begin
        select SALARY, EMPLOYEE_ID into v_sal,v_emp_id from EMPLOYEES where EMPLOYEE_ID = 123;
        DBMS_OUTPUT.PUT_LINE('empployid: ' || v_emp_id || ' salary:' || v_sal);
    end;
    
    declare
        v_emp_record EMPLOYEES%rowtype;
        v_emp_id     number(10);
    begin
        v_emp_id := 132;
        select * into v_emp_record from EMPLOYEES where EMPLOYEE_ID = v_emp_id;
    
        DBMS_OUTPUT.PUT_LINE(v_emp_record.SALARY || v_emp_record.EMAIL);
    
    end;
    
    declare
        v_sal employees.salary%type;
    begin
        select SALARY into v_sal from EMPLOYEES where EMPLOYEE_ID = 150;
        if v_sal >= 10000 then
            DBMS_OUTPUT.PUT_LINE('salary>10000');
        elsif v_sal >= 5000 then
            DBMS_OUTPUT.PUT_LINE('salary>5000');
        else
            DBMS_OUTPUT.PUT_LINE('salary<5000');
        end if;
    end;
    
    declare
        v_i number(3) :=0;
        begin
        loop
            DBMS_OUTPUT.PUT_LINE(v_i);
            v_i:=v_i+1;
            exit when v_i>100;
    
        end loop;
    end;
    
    declare
        vi_i number(3) :=0;
        begin
        while vi_i<=100 loop
            DBMS_OUTPUT.PUT_LINE(vi_i);
            vi_i:=vi_i+1;
            end loop;
    end;
    
    努力学习java的Cherish
  • 相关阅读:
    params
    robotframework+jenkins分布式执行自动化测试用例
    python文件读写
    Robot Framework资料
    RobotFramework环境搭建
    Django评论系统
    Django集成TinyMCE(admin后台+前台)
    个人博客模块分析
    Django实战,小网站实现增删改查
    docker入门【1】
  • 原文地址:https://www.cnblogs.com/cherish-code/p/14756248.html
Copyright © 2011-2022 走看看