码迷,mamicode.com
首页 > 数据库 > 详细

Oracle基础笔记八

时间:2014-12-20 18:28:37      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:employees   oracle   单引号   

第八章 数据处理


1.数据操纵语言

DML(Data Manipulation Language – 数据操纵语言) 可以在下列条件下执行:

向表中插入数据

修改现存数据

删除现存数据

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


2.INSERT 语句语法

使用 INSERT 语句向表中插入数据。

使用这种语法一次只能向表中插入一条数据。

INSERT INTO table [(column [, column...])]

VALUES (value [, value...]);


2.1插入数据

为每一列添加一个新值。

按列的默认顺序列出各个列的值。 

在 INSERT 子句中随意列出列名和他们的值。

字符和日期型数据应包含在单引号中。

例如:

INSERT INTO departments(department_id, department_name, 

                        manager_id, location_id)

VALUES      (70, ‘Public Relations‘, 100, 1700);


INSERT INTO employees(employee_id,last_name,email,hire_date,job_id)

VALUES  (300,’Tom’,’tom@126.com’,to_date(‘2012-3-21’,’yyyy-mm-dd’),’SA_RAP’);

1 row created.


2.2向表中插入空值

隐式方式: 在列名表中省略该列的值。

INSERT INTO departments (department_id, 

                        department_name    )

VALUES (30, ‘Purchasing‘);


显示方式: 在VALUES 子句中指定空值。

INSERT INTO departments

VALUES (100, ‘Finance‘, NULL, NULL);


2.3插入指定的值

INSERT INTO employees (employee_id, 

                 first_name, last_name, 

                 email, phone_number,

                 hire_date, job_id, salary, 

                 commission_pct, manager_id,

                 department_id)

VALUES   (113, 

                 ‘Louis‘, ‘Popp‘, 

                 ‘LPOPP‘, ‘515.124.4567‘, 

                 SYSDATE, ‘AC_ACCOUNT‘, 6900, 

                 NULL, 205, 100);


2.4从其它表中拷贝数据,在 INSERT 语句中加入子查询。 

INSERT INTO emp2 

SELECT * 

FROM employees

WHERE department_id = 90;


INSERT INTO sales_reps(id, name, salary, commission_pct)

SELECT employee_id, last_name, salary, commission_pct

FROM   employees

WHERE  job_id LIKE ‘%REP%‘;

不必书写 VALUES 子句。 

子查询中的值列表应与 INSERT 子句中的列名对应


3.使用 UPDATE 语句更新数据。

UPDATE table

SET column = value [, column = value, ...]

[WHERE condition];


3.1使用 WHERE 子句指定需要更新的数据。

UPDATE employees

SET    department_id = 70

WHERE  employee_id = 113;


如果省略 WHERE 子句,则表中的所有数据都将被更新

UPDATE copy_emp

SET     department_id = 110;

22 rows updated.


3.2在 UPDATE 语句中使用子查询

题目:更新 114号员工的工作和工资使其与205号员工相同。

UPDATE   employees

SET      job_id  = (SELECT  job_id 

                    FROM    employees 

                    WHERE   employee_id = 205), 

         salary  = (SELECT  salary 

                    FROM    employees 

                    WHERE   employee_id = 205) 

WHERE    employee_id    =  114;


题目:调整与employee_id 为200的员工job_id相同的员工的department_id为employee_id为100的员工的department_id。

UPDATE  copy_emp

SET     department_id  =  (SELECT department_id

                           FROM employees

                           WHERE employee_id = 100)

WHERE   job_id         =  (SELECT job_id

                           FROM employees

                           WHERE employee_id = 200);


注意更新中的数据完整性错误


4.DELETE 语句,使用 DELETE 语句从表中删除数据。

DELETE FROM  table

[WHERE  condition];


使用 WHERE 子句删除指定的记录。

 DELETE FROM departments

 WHERE  department_name = ‘Finance‘;


如果省略 WHERE 子句,则表中的全部数据将被删除

DELETE FROM  copy_emp;

22 rows deleted.


4.2在 DELETE 中使用子查询,使删除基于另一个表中的数据。

题目:从emp1表中删除dept1部门名称中含Public字符的部门id

DELETE FROM emp1

WHERE  department_id =

                       (SELECT department_id

                        FROM   dept1

                        WHERE  department_name LIKE ‘%Public%‘);


5.数据库事务

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

数据库事务由以下的部分组成:

一个或多个DML 语句

一个 DDL(Data Definition Language – 数据定义语言) 语句

一个 DCL(Data Control Language – 数据控制语言) 语句


以第一个 DML 语句的执行作为开始

以下面的其中之一作为结束:

COMMIT 或 ROLLBACK 语句

DDL 语句(自动提交)

用户会话正常结束

系统异常终止


COMMIT和ROLLBACK语句的优点:

使用COMMIT 和 ROLLBACK语句,我们可以: 

确保数据完整性。

数据改变被提交之前预览。

将逻辑上相关的操作分组。


回滚到保留点:

使用 SAVEPOINT 语句在当前事务中创建保存点。

使用 ROLLBACK TO SAVEPOINT 语句回滚到创建的保存点。

UPDATE...

SAVEPOINT update_done;

Savepoint created.

INSERT...

ROLLBACK TO update_done;

Rollback complete.



本文出自 “阿成的博客” 博客,转载请与作者联系!

Oracle基础笔记八

标签:employees   oracle   单引号   

原文地址:http://fanyuecheng.blog.51cto.com/9529438/1591956

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!