【Oracle】第七單元 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);

發佈了102 篇原創文章 · 獲贊 18 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章