• 使用DML语句【weber出品必属精品】


    1. DML语句包含以下语法:

         INSERT:往一个表中增加新行

         DELETE:从一个表中删除掉现有的行

         UPDATE:更改一个表中现有的行

    2. INSERT语句
      语法:INSERT INTO TABLE(COLUMN1,COLUMN2,....) VALUES(VAL1,VAL2,...)
      使用这种方法只能一次插入一行数据

      插入包含每一个列值的新行,按缺省顺序列出表中所有的列值.

    3. 创建带有结构的空表
      SQL> create table t as select * from  emp where 1=2;---1是不会等于2的,给了这个假条件是使得创建的表只有emp里面的表结构,而没有数据
       
      Table created.
       
      SQL> select count(*) from e;
       
        COUNT(*)
      ----------
               0
       
      SQL> desc e
       名称                                    是否为空? 类型
       ----------------------------------------- -------- ----------------------------
       EMPNO                                              NUMBER(4)
       ENAME                                              VARCHAR2(10)
       JOB                                                VARCHAR2(9)
       MGR                                                NUMBER(4)
       HIREDATE                                           DATE
       SAL                                                NUMBER(7,2)
       COMM                                               NUMBER(7,2)
       DEPTNO                                             NUMBER(2)
    4.  插入一条数据,日期值和字符值要用单引号括起来
      SQL>insert into t values(7369,' SMITH', ' CLERK' ,' 7902',' 17-DEC-80',800,null,20);
       
      1 row created.
       
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       7369  SMITH  CLERK     7902 17-DEC-80   800           20
       
      SQL>commit;
      Commit complete.
    5.   指定某列进行插值
      SQL> insert into t (empno,ename) values(1111,'ywb');
       
      1 row created.
       
      SQL> commit ;
       
      Commit complete.
       
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       7369  SMITH  CLERK     7902 17-DEC-80   800           20
       1111 ywb
    6.   truncate表,删除表的数据,不删除结构,drop才是一锅端

      ---Truncate是DDL语言,和其他DDL语言一样,他将进行隐式提交。

      SQL> truncate table t;
       
      Table truncated.
       
      SQL> select * from t;
       
      no rows selected
       
      SQL> rollback;
       
      Rollback complete.
       
      SQL> select * from t;
       
      no rows selected
    7.  修改某列的默认值alter table t modify column default value;
      SQL> alter table t modify sal default '100';
       
      Table altered.
       
      SQL> insert into t (empno,ename) values(1112,'ywb');
       
      1 row created.
       
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       1111 ywb
       1112 ywb                                100
    8.  插入特殊的值:例如日期---sysdate,自动获取日期
      SQL> insert into t(empno,ename,hiredate) values (1113,'ywb',SYSDATE);
       
      1 row created.
       
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       1111 ywb
       1112 ywb                                100
       1113 ywb                    20-AUG-14   100
    9.   日期对格式比较敏感:虽然插入是安装yyyy-mm-dd格式,但是显示又是另一种格式
      SQL> insert into e values(7521,'WARD','SALESMAN',7698,to_date('2014-08-19','yyyy-mm-dd'),1250,500,30);
       
      已创建 1 行。
       
      SQL> commit;
       
      提交完成。
       
      SQL> select * from e;
       
      EMPNO ENAME  JOB         MGR HIREDATE         SAL       COMM DEPTNO
      ----- ------ --------- ----- -------------- ----- ---------- ------
       7369 SMITH  CLERK      7902 17-12月-80       800                20
       7499 ALLEN  SALESMAN   7698 19-8月 -14      1600        300     20
       7521 WARD   SALESMAN   7698 19-8月 -14      1250        500     30
    10.   从另一个表中拷贝行:

      创建带有子查询的 INSERT语句

      不要使用 VALUES 子句 

      SQL> insert into t select * from emp where empno=7369;
       
      1 row created.
       
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       1111 ywb
       1112 ywb                                100
       1113 ywb                    20-AUG-14   100
       7369 SMITH  CLERK      7902 17-DEC-80   800           20
    11.  子查询中的列要与INSERT子句中的列相匹配,不然会报错
      SQL> insert into t (empno,ename,job,sal) select empno,ename,job,sal from emp where empno=7499;
              -------------------注意:这里没有加关键字:values----
      1 row created.
       
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       1111 ywb
       1112 ywb                                100
       1113 ywb                    20-AUG-14   100
       7369 SMITH  CLERK      7902 17-DEC-80   800           20
       7499 ALLEN  SALESMAN                   1600
       
      ---插入过多的值---
      SQL> insert into t (empno,ename,job,sal) select * from emp where empno=7499;
      insert into t (empno,ename,job,sal) select * from emp where empno=7499
                  *
      ERROR at line 1:
      ORA-00913: too many values
    12.   替代变量插入值:
      [oracle@oracle~]$ cd /u01
      vi 1.sql写入如下内容:
      insert into t values(&DEPTNO,'&DNAME','&LOC'); ---注意插入字符需要加引号
      在sqlplus中执行如下操作:
      SQL>@/u01/1.sql;
      SQL> @/u01/1.sql;
      Enter value for empno: 110
      Enter value for ename: yeb2
      Enter value for sal: 120
      old   1: insert into t(empno,ename,sal) values(&EMPNO,'&ENAME','&SAL')
      new   1: insert into t(empno,ename,sal) values(110,'yeb2','120')
       
      1 row created.
       
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       1111 ywb
       1112 ywb                                100
       1113 ywb                    20-AUG-14   100
       7369 SMITH  CLERK      7902 17-DEC-80   800           20
       7499 ALLEN  SALESMAN                   1600
        110 yeb2                               120
       
      6 rows selected.
    13.   UPDATE 语句
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       7369 SMITH  CLERK      7902 17-DEC-80   800           20
       
      SQL> update t set ename='ywb' where empno=7369;
       
      1 row updated.
       
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       7369 ywb    CLERK      7902 17-DEC-80   800           20
    14.  同时更改多行多列:
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       7369 ywb    SALESMAN   7902 17-DEC-80  1600           20
       7488 ALLEN  SALESMAN   7698 20-FEB-81  1600   300     30
       
      SQL> update t set (ename,job)=(select ename,job from emp where empno=7499) where empno=7369 or empno=7488;
       
      2 rows updated.
       
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       7369 ALLEN  SALESMAN   7902 17-DEC-80  1600           20
       7488 ALLEN  SALESMAN   7698 20-FEB-81  1600   300     30
       
       
      这里尤其要注意,set(xx,xx)=(xx,xx)后面如果跟的是值则会报错:
      SQL> update t set (job,sal)=('haha',120) where empno=7369 or empno=7499;
      update t set (job,sal)=('haha',120) where empno=7369 or empno=7499
                             *
      ERROR at line 1:
      ORA-01767: UPDATE ... SET expression must be a subquery
      后面跟的必须是子查询。
    15.   DELETE语句:从表中删去现存的行
      SQL> delete  from t where empno=7488;
       
      1 row deleted.
       
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       7369 ALLEN  SALESMAN   7902 17-DEC-80  1600           20
    16.  参照另一个表来删除行:

      (注:‘SCOTT’要大写)

      SQL> delete t where empno in(select empno from emp where ename='SCOTT');
       
      1 row deleted.
       
      SQL> select * from t;
       
      EMPNO ENAME  JOB         MGR HIREDATE    SAL  COMM DEPTNO
      ----- ------ --------- ----- --------- ----- ----- ------
       7369 ALLEN  SALESMAN   7902 17-DEC-80  1600           20
    17.  TRUNCATE语句:
      TRUNCATE语句:
       
      1. 删除表中的所有数据,保留表结构,不能使用where子句
       
      2. 是DDL语句,不是DML语句,一旦删除,不能回退
       
      SQL> truncate table e ;
       
      表被截断。
       
      SQL> select * from e;
       
      未选定行
       
      SQL> roll
      回退已完成。
      SQL> select * from e;
       
      未选定行 
  • 相关阅读:
    安卓跑马灯
    utf-8加密用于汉字加密(避免乱码)
    设置将edittext的光标到最后
    自定义UIProgressView,实现渐变色进度条,带动画的
    UIImageView帧动画,包含暂停和继续功能
    UIImageView关键帧动画,监听动画结束的回调
    自定义UICollectionViewFlowLayout实现横向滚动时,离中心点越近,item越大,离中心店越远,item越小的效果
    iOS中UIView的Pan手势和UIScrollView滚动手势的冲突解决方案
    使用Cocoapods创建私有库的流程
    git代码仓库迁移的步骤
  • 原文地址:https://www.cnblogs.com/yaoweber/p/3925538.html
Copyright © 2020-2023  润新知