--=================================================
--SQL基础--> 数据处理(DML、RETURNING、MERGE INTO)
--=================================================
一、常用的DML语句及事物处理
向表中插入数据(INSERT)
更新表中数据(UPDATE)
从表中删除数据(DELETE)
将表中数据和并(MERGE)
控制事务(TRANSACTION)
二、DML 可以在下列条件下执行:
向表中插入数据
修改现存数据
删除现存数据
事务是由完成若干项工作的DML语句组成的。
三、插入数据
INSERT 语句语法:
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
使用这种语法一次只能向表中插入一条数据。
为每一列添加一个新值。
按列的默认顺序列出各个列的值。
在INSERT 子句中随意列出列名和他们的值。
字符和日期型数据应包含在单引号中。
--查看emp表的表结构
SQL> DESC emp;
Name Null? Type
----------------------------------------------------- -------- -----------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(30)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SALARY NUMBER(8,2)
DEPTNO NUMBER(2)
1.向表中插入空值
隐式方式: 在列名表中省略该列的值。
SQL> INSERT INTO emp(empno,ename,job,salary) --列出部分列名
2 VALUES(1234,'Frank','saleman',8000);
1 row created.
SQL> SELECT * FROM emp WHERE ename='Frank';
EMPNO ENAME JOB MGR HIREDATE SALARY DEPTNO
---------- ------------------------------ --------- ---------- --------- ---------- ----------
1234 Frank saleman 8000
显示方式: 在VALUES 子句中指定空值NULL。
注意此处省略了列列表,当列的列表被省略时,则values关键字中应当为所有的字段列提供列值
SQL> INSERT INTO emp VALUES(100,'Jack','manager',null,null,20000,10);
1 row created.
2.插入指定的值
SYSDATE 记录当前系统的日期和时间。
SQL> INSERT into EMP(empno,ename,job,hiredate,salary)
2 VALUES(1235,'Tony','boy',sysdate,7000);
1 row created.
SQL> ALTER SESSION SET nls_date_format= 'yyyy-mm-dd hh24:mi:ss';
Session altered.
SQL> SELECT * FROM emp WHERE ename = 'Tony';
EMPNO ENAME JOB MGR HIREDATE SALARY DEPTNO
---------- --------------- --------- ---------- ------------------- ---------- ----------
1235 Tony boy 2010-06-28 13:48:59 7000
插入特定的日期值
SQL> INSERT INTO emp
2 VALUES(1236,'Ben','IT',null,TO_DATE('JUN 28 2010','MON DD YYYY'),3000,20);
3.在列中使用单引号和双引号
--单引号的使用
SQL> INSERT INTO emp VALUES
2 (1238,'Dan','Malley''K','',sysdate,2900,20);
1 row created.
--双引号的使用
SQL> INSERT INTO emp VALUES
2 (1239,'Dane','A "Big" L','',sysdate,2900,20);
1 row created.
SQL> SELECT * FROM emp WHERE ename LIKE 'Dan%';
EMPNO ENAME JOB MGR HIREDATE SALARY DEPTNO
---------- ------------------ --------- ---------- ------------------- ---------- ----------
1238 Dan Malley'K 2010-06-28 14:04:35 2900 20
1239 Dane A "Big" L 2010-06-28 14:07:12 2900 20
4.从其它表中拷贝数据(利用子查询向表中插入数据)
在INSERT 语句中加入子查询。
不必书写VALUES 子句。
子查询中的值列表应与INSERT 子句中的列名对应
--克隆表结构
SQL> CREATE TABLE test AS SELECT * FROM scott.emp WHERE 0 = 1;
Table created.
--使用select 子句插入新值
SQL