中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 數據庫 > 
  • SQL 基礎之子查詢、多表插入、merge 語句、跟蹤一段時間數據變化(二十)

SQL 基礎之子查詢、多表插入、merge 語句、跟蹤一段時間數據變化(二十)

發布時間:2020-06-23 18:59:05 來源:網絡 閱讀:2751 作者:yuri_cto 欄目:數據庫

使用子查詢處理數據

可以使用子查詢中的數據操縱語言(DML)語句:

使用內嵌視圖檢索數據

從一張表向另一張表復制數據

基于另一張表的值更新表中數據

基于另一張表的值刪除表中的行


使用子查詢作為數據源檢索數據

select department_name, city from departments

natural join (select l.location_id, l.city, l.country_id

from loc l

join countries c

on(l.country_id = c.country_id)

join regions using(region_id) where region_name = 'europe');


使用子查詢作為目標插入數據

insert into (select l.location_id, l.city, l.country_id from locations l

join countries c

on(l.country_id = c.country_id)

join regions using(region_id)

where region_name = 'europe')

values (3300, 'Cardiff', 'UK');


在 DML  語句中使用WITH CHECK OPTION 

WITH CHECK OPTION 關鍵字,禁止子查詢中行的更改。


顯示的默認功能概述

  • 使用 DEFAULT 關鍵字設置字段默認值。

  • 允許用戶控制什么時候使用默認值應用到數據

  • 可以在INSERT和UPDATE語句中顯式使用缺省值


使用顯式的缺省值

INSERT 與 DEFAULT:


insert into deptm3 (department_id, department_name, manager_id) values (300, 'engineering', default);


UPDATE 與 DEFAULT:

update deptm3 set manager_id = default where department_id = 10;


從另一張表中復制行

  • 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 子句與子查詢的列數、類型相匹配


使用以下類型完成多表插入:

– 無條件 INSERT

– 旋轉 INSERT

– 有條件 INSERT ALL

– 有條件 INSERT FIRST


insert all

into target_a values(... , ... , ...)

into target_b values(... , ... , ...)

into target_c values(... , ... , ...)

select ...

from sourcetab

where ...;


多表查詢示意圖:

SQL 基礎之子查詢、多表插入、merge 語句、跟蹤一段時間數據變化(二十)

多表插入作用如下:

  • 使用INSERT…SELECT語句插入行到多個表中,作為一個單一的DML語句。

  • 數據倉庫系統中使用的多表INSERT語句將一個或多個操作的源數據寫入到一組目標表中。

  • 它們提供顯著的性能改善:

      – 單個 DML 語句與多表 INSERT…SELECT 語句

      – 單個 DML 語句與使用 IF...THEN 語法完成多表插入


多表INSERT 語句的類型

以下是不同類型的多表 INSERT 語句:

  •  無條件 INSERT

  •  旋轉 INSERT

  •  有條件 INSERT ALL

  •  有條件 INSERT FIRST


多表 INSERT 語法

insert [conditional_insert_clause]

[insert_into_clause values_clause] (subquery)


有條件 INSERT 子句:

[ALL|FIRST]

[WHEN condition THEN] [insert_into_clause values_clause]

[ELSE] [insert_into_clause values_clause]


無條件 INSERT ALL


insert all

into sal_history values(empid,hiredate,sal)

into mgr_history values(empid,mgr,sal)

select employee_id empid, hire_date hiredate,

salary sal, manager_id mgr

from employees

where employee_id > 200;


有條件INSERT ALL :示例

SQL 基礎之子查詢、多表插入、merge 語句、跟蹤一段時間數據變化(二十)

有條件INSERT ALL

insert all

when hiredate <  ' 01-JAN-95 ' then

into emp_history values(EMPID,HIREDATE,SAL)

when comm is not null then

into emp_sales values(EMPID,COMM,SAL)

select employee_id empid, hire_date hiredate,

salary sal, commission_pct comm

from employees

SQL 基礎之子查詢、多表插入、merge 語句、跟蹤一段時間數據變化(二十)

有條件INSERT FIRST

insert first

when salary < 5000 then

into sal_low values (employee_id, last_name, salary)

when salary between 5000 and 10000 then

into sal_mid values (employee_id, last_name, salary)

else

into sal_high values (employee_id, last_name, salary)

select employee_id, last_name, salary

from employees


旋轉INSERT

將銷售記錄從非關系型數據庫表中設置為關系格式

SQL 基礎之子查詢、多表插入、merge 語句、跟蹤一段時間數據變化(二十)


insert all

into sales_info values (employee_id,week_id,sales_MON)

into sales_info values (employee_id,week_id,sales_TUE)

into sales_info values (employee_id,week_id,sales_WED)

into sales_info values (employee_id,week_id,sales_THUR)

into sales_info values (employee_id,week_id, sales_FRI)

select employee_id, week_id, sales_MON, sales_TUE,

sales_WED, sales_THUR,sales_FRI

from sales_source_data;


限制條件

  • 只能對表執行多表插入語句,不能對視圖或物化視圖執行;

  • 不能對遠端表執行多表插入語句;

  • 不能使用表集合表達式;

  • 不能超過999個目標列;

  • 在RAC環境中或目標表是索引組織表或目標表上有BITMAP索引時,多表插入語句不能并行執行;

  • 多表插入語句不支持執行計劃穩定性;

  • 多表插入語句中的子查詢不能使用序列。


MERGE 語句

  • 提供根據條件進行更新、插入、刪除數據的功能

  • 如果數據存在執行UPDATE,如果不存在則INSERT:

      – 避免單獨更新

      – 提高了性能和易用性

      – 非常適用于數據倉庫


MERGE  語句語法

使用MERGE語句,您可以根據條件插入,更新或刪除表中的行

merge into table_name table_alias

using (table|view|sub_query) alias

on (join condition)

when matched then

update set

col1 = col1_val,

col2 = col2_val

when not matched then

insert (column_list)

values (column_values);


合并行:示例

插入或更新COPY_EMP3表中與EMPLOYEES相匹配的行。

merge into copy_emp3 c

using (select * from 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,

...

delete where (e.commission_pct is not null)

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);


合并行 示例

truncate table copy_emp3;

select * from copy_emp3;


merge into copy_emp3 c

using (select * from 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,

...

delete where (e.commission_pct is not null)

when not matched then

insert values(e.employee_id, e.first_name, ...


跟蹤數據的變化

閃回版本查詢示例

select salary from employees3 where employee_id = 107;

update employees3 set salary = salary * 1.30 where employee_id = 107;

commit;

select salary from employees3 versions between scn minvalue and maxvalue where employee_id = 107;


VERSIONS BETWEEN 子句

select versions_starttime "start_date",

versions_endtime "end_date",

salary

from employees

versions between scn minvalue

and maxvalue

where last_name = 'Lorentz';

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安化县| 宝坻区| 黑水县| 宿迁市| 西峡县| 开化县| 永清县| 琼中| 富源县| 常宁市| 盱眙县| 准格尔旗| 疏附县| 资源县| 阿拉善左旗| 延边| 偃师市| 嘉义市| 凤城市| 南靖县| 邵东县| 大英县| 台东县| 沧州市| 青海省| 遵义市| 象州县| 丹棱县| 都昌县| 苏尼特右旗| 阳城县| 隆尧县| 夹江县| 安徽省| 海门市| 浪卡子县| 麻栗坡县| 简阳市| 尚志市| 双牌县| 昭苏县|