• 数据处理


    使用   DML语言:

                               向表中插入数据  insert into...values();     insert  into..select...from...where...

                               更新表中数据      update ...set...where...

                               从表中删除数据  delete from...where

    可以 rollback

    控制事务

    事务:   由完成若干项工作的DML语句组成的

    --插入数据:

    --- 顺序一一对应的

    insert into emp2 
    values(1001,'AA',sysdate,10000);

    insert into emp2
    values(1003,'CC',to_date('1993-12-23','yyyy-mm-dd'),null);

    insert into emp2(last_name,employee_id, hire_date)
    values('EE',1004,sysdate);

    注意: 空值需要用null来代替

                有非空约束的一定要附上值

    --  从其他表中拷贝数据

    insert into emp2(employee_id, hire_date ,last_name,salary)
    select employee_id,hire_date,last_name,salary 
    from employees
    where department_id = 80;

    -- 更新表中数据  update

    update emp2 
    set  salary = 12000
    where employee_id = 179;

    注意:如果省略where所有的数据都将被更新

     

    -- 更新114号员工的工作和工资使其与205号员工相同(后面的where一定不能忘了)

    update employees1 
    set job_id=(select job_id 
                from  employees1
                where employee_id = 205
                ),
        salary = (select salary 
                from  employees1
                where employee_id = 205)
    where employee_id = 114;
    EMPLOYEE_ID JOB_ID         SALARY
    ----------- ---------- ----------
            114 AC_MGR          12000 
            205 AC_MGR          12000 

    -- 删除数据 delete from

    -- 从employee1表中删除部门名称中Public 字段的部门id

    delete from employees1
    where department_id = (
                        select department_id 
                        from departments
                        where department_name like '%Public%'
    );

    事务:一组逻辑操作单元使数据从一种状态变换到另一种状态

    数据库事务由一下部门组成:一个或多个DML语句

                                                   一个DDL语句

                                                   一个DCL语句

    DCL:

    rollback回滚到最近的一次commit后

    savepoint

    rollback to savepoint

    提交或回滚前的数据状态:

    其他用户不能看到当前用户所做的改变,直到当前用户结束任务

    DML语句所涉及到的行被锁定,其他用户不能操作

    练习:

    -- 1.更改 108 员工的信息: 使其工资变为所在部门中的最高工资, job 变为公司中平均工资最低的 job

    -- 有个avg(salary) 组函数得用 group by job_id

    update  employees
    set  salary = (
                   select max(salary)
                   from employees
                   where department_id =(
                                          select department_id  
                                          from employees 
                                          where employee_id = 108)
                  ),
         job_id = (     
                   select job_id
                   from employees
                   group by job_id
                   having avg(salary)=( 
                                           select min(avg(salary))
                                           from employees
                                           group by job_id)   
         )
    where employee_id = 108;

    --2.删除 108 号员工所在部门中工资最低的那个员工.

    delete from employees
    where salary  = (
                    select min(salary)
                    from employees
                    where department_id = (
                                         select department_id
                                         from employees
                                         where employee_id = 108
                                      )                           
           )
     and    department_id = (
                          select department_id
                          from employees
                          where employee_id = 108
                        );

    优化:

    delete from employees e
    where salary  = (
                    select min(salary)
                    from employees
                    where department_id = e.department_id                           
           )
     and   department_id = (
                          select department_id
                          from employees
                          where employee_id = 108
                        );
    All that work will definitely pay off
  • 相关阅读:
    Linux 线程间通信方式+进程通信方式 总结
    使用opencv第三方库的makefile文件示例
    rplidar SDK 二次开发---之获取目标信息(0.1)
    #include "Target_orientation.h"
    opencv —— 调用摄像头采集图像 VideoCapture capture(0);
    cmake 支持-lpthread
    ROS下sensor_msgs::ImagePtr到sensor_msgs::Image之间的转换
    JAVA 校验身份证号码工具类(支持15位和18位)
    python面向对象游戏练习:好人坏人手枪手榴弹
    python 私有属性的作用
  • 原文地址:https://www.cnblogs.com/afangfang/p/12557777.html
Copyright © 2020-2023  润新知