Oracle DB处理数据(二)

2014-11-24 14:40:43 · 作者: · 浏览: 1
样可以反复运行
同一脚本文件,但每次运行该脚本文件时应提供一组不同的值。
从其它表中复制行
编写带有子查询的INSERT语句:
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子句中的列数与子查询中的列数匹配。
将子查询返回的所有行插入到表sales_reps中。
可以使用INSERT语句在一个表中添加一些行,该表的值来自现有表。在示例中,若要执行INSERT INTO语句,必须首先使用CREATE TABLE语句创建sales_reps
表。可以使用子查询来代替VALUES子句。
语法
INSERT INTO table [ column (, column) ] subquery;
在该语法中:
table 是表名称
column 是表中要填充的列的名称
subquery 是向表中返回行的子查询
INSERT子句中列列表的列数及其数据类型必须与子查询中值的个数及其数据类型相匹配。
根据子查询返回的行数,可能会添加一些行,也可能不添加任何行。要为表中的行创建一个副本,请在子查询中使用SELECT*:
INSERT INTO copy_emp
SELECT * FROM employees;
UPDATE语句语法
使用UPDATE语句修改表中的现有值:
如果需要,可以一次更新多行。
UPDATE table
SET column= value[, column = value, ...]
[WHERE condition];
可以使用UPDATE语句修改表中的现有值。
在该语法中:
table 是表名称
column 是表中要填充的列的名称
value 是该列相应的值或子查询
condition 标识要更新的行,由列名、表达式、常数、子查询和比较运算符组成
通过查询表来显示更新的行就可以确认更新操作。
注:通常情况下,请使用WHERE子句中的主键列来指定要更新的一行。使用其它列时可能会意外地更新其它的行。例如,用姓名标识EMPLOYEES表中的一行是危险的,因为可能有多名雇员具有相同的姓名。
更新表中的行
如果指定WHERE子句,则可以修改特定一行或多行的值:
UPDATE employees
SET department_id = 50
WHERE employee_id = 113;
如果省略WHERE子句,则可以修改表中所有行的值:
UPDATE copy_emp
SET department_id = 110;
指定SET column_name= NULL可将列值更新为NULL。
如果指定WHERE子句,则UPDATE语句可以修改特定一行或多行的值。示例显示如何将雇员113 (Popp) 调到部门50。
如果省略WHERE子句,则会修改该表中所有行的值。检查COPY_EMP表中的更新行。
SELECT last_name, department_id FROM copy_emp;
例如,曾经担任SA_REP职务的某个雇员现在的职务为IT_PROG。因此,需更新其JOB_ID并将其佣金字段设置为NULL。
UPDATE employees
SET job_id = 'IT_PROG', commission_pct = NULL
WHERE employee_id = 114;
注:COPY_EMP表与EMPLOYEES表具有相同的数据。
使用子查询更新两列
更新雇员113 的职务和薪金,使其与雇员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 = 113;
通过编写多个子查询,可以在UPDATE语句的SET子句中更新多个列。语法如下:
UPDATE table
SET column = (SELECT column FROM table WHERE condition) [ ,
column = (SELECT column FROM table WHERE condition)]
[WHERE condition ];
示例还可以编写如下:
UPDATE employees
SET (job_id, salary) = (SELECT job_id, salary FROM employees WHERE employee_id = 205)
WHERE employee_id = 113;
根据另一个表更新行
在UPDATE语句中使用子查询可根据另一个表中的值来更新某一个表中的行值:
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);
可以在UPDATE语句中使用子查询来更新表中的值。示例根据EMPLOYEES表中的值更新COPY_EMP表。它将与雇员200 具有相同职务ID 的所有雇员的部门编号都更改为雇员100 的当前部门编号。
DELETE语句
使用DELETE语句可以从表中删除现有行:
DELETE [FROM] table
[WHERE condition];
DELETE语句语法
使用DELETE语句可以从表中删除现有行。
在该语法中:
table 是表名称
condition 标识要删除的行,由列名、表达式、常数、子查询和比较运算符组成
注:如果没有删除任何行,则会在SQL Developer 的“Script Output(脚本输出)”选项卡上返回消息“0 rows deleted”。
从表中删除行
如果指定WHERE子句,则会删除特定行:
DELETE FROM departments WHERE department_name = 'Finance';
如果省略WHERE子句,则会删除表中的所有行:
DELETE FROM copy_emp;
通过在DELETE语句中指定WHERE子句,可以删除特定行。第一个示例从DEPARTMENTS表中删除了Accounting 部门。通过使用SELECT语句显示被删除的行,
可以确认删除操作。
S