使用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. 替代变量插入值:

    [[email protected]~]$ 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;
    
    未选定行 

使用DML语句【weber出品必属精品】,布布扣,bubuko.com

时间: 2024-10-10 21:22:17

使用DML语句【weber出品必属精品】的相关文章

oracle数据库事务相关【weber出品必属精品】

事务的概念:事务:一个事务由一组构成一个逻辑操作的DML语句组成 事务有开始有结束,事务以DML语句开始,以Conmmit和Rollback结束.以下情况会使得事务结束: 1. 执行COMMIT 或者 ROLLBACK 语句 2. 执行DDL或者 DCL语句 3. 用户退出 4. 系统崩溃 一个事务可以包含下列语句: 1. 对数据做出一致性修改的DML语句 2. 一个 DDL 语句 3. 一个 DCL语句 DDL与和DCL语句执行的过程: 1. 首先发出COMMIT; 2. 执行对数据字典的DM

静默安装ORACLE【weber出品必属精品】

由于本次的实验我是将上次的虚拟机直接拷贝过来,然后将里面图形化界面安装好了的oracle给删除,再次重新安装,所以这里要修改一些配置. 首先修改的是我们的IP地址 # system-config-network 完成后我们修改一下hosts文件,将里面的ip地址给修改一下 # vi /etc/hosts 接着我们删除上次安装过的ORACLE文件 # cd $ORACLE_BASE # ls # rm -rf * 进入root:rm -rf /etc/ora* 还是在安装前进行配置. 接下来进行静

ORACLE SQL 组函数【weber出品必属精品】

组函数:对一组数据进行加工,每组数据返回一个值 常用的组函数:count()  avg()  max()   min()  sum()   count()函数  1. count(*) :返回总共的行数,不去除NULL值 2. count(column):返回非NULL行的数量 SQL> select count(*) ,count(sal),count(comm) from emp; COUNT(*) COUNT(SAL) COUNT(COMM) ---------- ---------- -

高级子查询【weber出品必属精品】

多列子查询 where条件中出现多列与子查询进行比较 多列子查询分为:成对比较和非成对比较 成对比较: SQL> select ename,sal,job from emp where (deptno,job) in(select deptno,job from emp where ename='SCOTT'); ENAME SAL JOB ------ ----- --------- FORD 3000 ANALYST SCOTT 4000 ANALYST 非成对比较: select enam

创建和管理表【weber出品必属精品】

创建表 必须有 : 1. CREATE TABLE 的权限 SQL> conn /as sysdba 已连接. SQL> create user test default tablespace users identified by a; 用户已创建. SQL> conn test/a ERROR: ORA-01045: user TEST lacks CREATE SESSION privilege; logon denied 警告: 您不再连接到 ORACLE. SQL> co

LAMP架构搭建+Discuz论坛搭建【weber出品必属精品】

一.     本机简介: 本机系统: CentOS-6.4-x86_64 主机名:oracle.ywb IP地址:192.168.146.129 二.     在Linux环境下安装Apache步骤 首先将准备好的文件通过PSCP发送至Linux的/Root/test/soft目录下 在windows下按住Ctrl+R,打开运行,输入CMD进入DOS命令行.在dos命令行中使用pscp –scp  命令将要上传的文件上传至Linux中. 上传成功后.我们总共要安装四个文件.第一个我们首先解压:a

linux删除ORACLE【weber出品必属精品】

关闭数据库 sqlplus / as sysdba shutdown abort 清除oracle软件 su - oracle cd $ORACLE_BASE rm -rf * rm -rf /etc/ora* 删除之前的设置的配置文件的内容 如果之前改过版本,编辑文件 /etc/redhat-release 把Red Hat Enterprise Linux Server release 4 (Tikanga) 改成版本5 vi /etc/pam.d/login 行末删除以下内容 sessio

ORACLE SQL单行函数(一)【weber出品必属精品】

1.SUBSTR:求父串中的子串 SUBSTR('HelloWorld',1,5) 1:代表子串的起始位置,如果为正,正数,如果为负,倒数 5:代表字串的终止位置,只能向右数,可以省略,如果省略就是数到最后 SUBSTR:求父串中的子串 SUBSTR('HelloWorld',1,5) 1:代表子串的起始位置,如果为正,正数,如果为负,倒数 5:代表字串的终止位置,只能向右数,可以省略,如果省略就是数到最后 2.LENGTH:求字符串的长度 SQL> select LENGTH('HELLOWO

ORACLE SQL单行函数(二)【weber出品必属精品】

11.dual:虚表,任何用户都可以使用,表结构如下: SQL> desc dual Name Null? Type ----------------------------------------- -------- ---------------------------- DUMMY VARCHAR2(1) 12.dual的作用: 1. 查询数据库系统日期 2. 进行四则运算 SQL> select sysdate from dual; ---这里查询数据库系统日期 SYSDATE ---