DML語句
create語句
創建表
create table job_grades (
gra varchar2(3),
lowest_sal number,
highest_sal number)
方式一: 複製表結構及其數據
create table employees_new as select * from employees
方式二:只複製表結構
create table employees_new as select * from employees where 1=2
或者
create table employees_new like employees
INSERT 語句
方式一:寫出表名+列名
INSERT INTO departments
(department_id, department_name)
VALUES
(30, 'Purchasing');
注意:在“列”中,對於不允許爲NULL的列,必須寫出來;對於允許爲NULL的列,可以不寫出來
在Value中,對於列中未寫出來的列,默認賦予NULL值
方式二:僅寫出表名
INSERT INTO departments
VALUES (100, 'Finance', NULL, NULL);
注意:在Value中必須對應寫出每個列的值,即是是允許NULL的字段,也必須顯式的給出 NULL
方式三:從另一個表中 Copy 一行
語法:INSERT INTO table [ column (, column) ] subquery;
注意:在這種方式下,不要使用VALUES 關鍵字
INSERT INTO sales_reps
(id, NAME, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';
方式四:使用子查詢作爲插入目標
INSERT INTO
(SELECT employee_id,
last_name,
email,
hire_date,
job_id,
salary,
department_id
FROM employees
WHERE department_id = 50)
VALUES
(99999,
'Taylor',
'DTAYLOR',
to_date('1999-07-07', 'YYYY-MM-DD'),
'ST_CLERK',
5000,
50);
方式五:只複製表數據
如果兩個表結構一樣:
insert into employees_new
select * from employees
如果兩個表結構不一樣:
insert into employees_new
(employee_id, last_name, salary)
select employee_id, last_name, salary from employees
UPDATE 語句
方式一:更新符合條件的行中某些列爲具體的值
SELECT * FROM employees;
UPDATE employees SET department_id = 90 WHERE employee_id = 100;
方式二:使用子查詢的結果作爲更新後的值
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;
注意:當存在約束的時候,某些更新可能會失敗,如:存在外鍵關係,不存在本表中
DELETE 語句
舉例一:刪除某些符合條件的記錄
DELETE FROM departments
WHERE department_name = 'Finance';
舉例二:刪除一張表中的所有記錄
SELECT * FROM departments
如果遇到這種需求,也可以使用TRUNCATE 語句,TRUNCATE TABLE copy_emp ,
但要注意,TRUNCATE 語句無法回滾,因此除非是單獨執行,並非常確認,否則慎用。
TRUNCATE TABLE departments;
注意:當存在約束的時候,某些刪除可能會失敗,如:存在外鍵關係,不存在本表中
drop 語句:刪除表
drop table table_a
MERGE 語句: 比較整合語句
MERGE INTO copy_emp c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE
SET c.first_name = e.first_name,
c.last_name = e.last_name,
c.email = e.email,
c.phone_number = e.phone_number,
c.hire_date = e.hire_date,
c.job_id = e.job_id,
c.salary = e.salary,
c.commission_pct = e.commission_pct,
c.manager_id = e.manager_id,
c.department_id = e.department_id
WHEN NOT MATCHED THEN
INSERT
VALUES
(e.employee_id,
e.first_name,
e.last_name,
e.email,
e.phone_number,
e.hire_date,
e.job_id,
e.salary,
e.commission_pct,
e.manager_id,
e.department_id);