zoukankan      html  css  js  c++  java
  • 数据处理

    使用   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
  • 相关阅读:
    ibmmq 性能测试
    zabbix-agent 安装
    关于dubbo接口性能测试
    关于vyos 防火墙配置
    appium自动化的工作原理(1)
    unittest如何在循环遍历一条用例时生成多个测试结果
    在Linux中#!/usr/bin/python之后把后面的代码当成程序来执行。 但是在windows中用IDLE编程的话#后面的都是注释,之后的代码都被当成文本了。 该怎么样才能解决这个问题呢?
    Cookie和Session的区别详解
    点单登录原理和java实现简单的单点登录
    new一个JAVA对象的时候,内存是怎么分配的?
  • 原文地址:https://www.cnblogs.com/afangfang/p/12557777.html
Copyright © 2011-2022 走看看