共計(jì) 1928 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。
本篇內(nèi)容介紹了“sql 語句中 with as 的用法介紹”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓丸趣 TV 小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
WITH AS 短語,也叫做子查詢部分,可以定義一個(gè) SQL 片斷,該 SQL 片斷會(huì)被整個(gè) SQL 語句用到。可以使 SQL 語句的可讀性更高,也可以在 UNION ALL 的不同部分,作為提供數(shù)據(jù)的部分。
–針對一個(gè)別名
with tmp as (select * from tb_name)
–針對多個(gè)別名
with
tmp as (select * from tb_name),
tmp2 as (select * from tb_name2),
tmp3 as (select * from tb_name3),
…
–相當(dāng)于建了個(gè) e 臨時(shí)表
with e as (select * from scott.emp e where e.empno=7499)
select * from e;
–相當(dāng)于建了 e、d 臨時(shí)表
with
e as (select * from scott.emp),
d as (select * from scott.dept)
select * from e, d where e.deptno = d.deptno;
其實(shí)就是把一大堆重復(fù)用到的 sql 語句放在 with as 里面,取一個(gè)別名,后面的查詢就可以用它,這樣對于大批量的 sql 語句起到一個(gè)優(yōu)化的作用,而且清楚明了。
向一張表插入數(shù)據(jù)的 with as 用法
insert into table2
s1 as (select rownum c1 from dual connect by rownum = 10),
s2 as (select rownum c2 from dual connect by rownum = 10)
select a.c1, b.c2 from s1 a, s2 b where…;
select s1.sid, s2.sid from s1 ,s2 需要有關(guān)聯(lián)條件,不然結(jié)果會(huì)是笛卡爾積。
with as 相當(dāng)于虛擬視圖。
with as 短語,也叫做子查詢部分 (subquery factoring),可以讓你做很多事情,定義一個(gè) sql 片斷,該 sql 片斷會(huì)被整個(gè) sql 語句所用到。有的時(shí)候,是為了讓 sql 語句的可讀性更高些,也有可能是在 union all 的不同部分,作為提供數(shù)據(jù)的部分。
特別對于 union all 比較有用。因?yàn)?union all 的每個(gè)部分可能相同,但是如果每個(gè)部分都去執(zhí)行一遍的話,則成本太高,所以可以使用 with as 短語,則只要執(zhí)行一遍即可。如果 with as 短語所定義的表名被調(diào)用兩次以上,則優(yōu)化器會(huì)自動(dòng)將 with as 短語所獲取的數(shù)據(jù)放入一個(gè) temp 表里,如果只是被調(diào)用一次,則不會(huì)。而提示 materialize 則是強(qiáng)制將 with as 短語里的數(shù)據(jù)放入一個(gè)全局臨時(shí)表里。很多查詢通過這種方法都可以提高速度。
with
sql1 as (select to_char(a) s_name from test_tempa),
sql2 as (select to_char(b) s_name from test_tempb where not exists (select s_name from sql1 where rownum=1))
select * from sql1
union all
select * from sql2
union all
select ‘no records’ from dual
where not exists (select s_name from sql1 where rownum=1)
and not exists (select s_name from sql2 where rownum=1);
WITH 語句的優(yōu)點(diǎn):
(1). SQL 可讀性增強(qiáng)。比如對于特定 with 子查詢?nèi)€(gè)有意義的名字等。
(2)、with 子查詢只執(zhí)行一次,將結(jié)果存儲(chǔ)在用戶臨時(shí)表空間中,可以引用多次,增強(qiáng)性能。
舉例: 在進(jìn)行導(dǎo)入 EXCEL 的過程中,有時(shí)候,需要將數(shù)據(jù)存儲(chǔ)在臨時(shí)表中,當(dāng)下一次在進(jìn)行導(dǎo)入的時(shí)候,進(jìn)行清除臨時(shí)表的數(shù)據(jù),但是這時(shí)候,有時(shí)候發(fā)生并發(fā)問題的話,兩個(gè)用戶可能會(huì)分別操作對方的數(shù)據(jù),所以,可能造成混亂,但是可以使用 WITH 函數(shù)和 UNION 語句拼接一個(gè) SQL 語句,存儲(chǔ)在 SESSION 中,當(dāng)需要導(dǎo)出錯(cuò)誤信息的時(shí)候,可以使用該語句構(gòu)造數(shù)據(jù)。
“sql 語句中 with as 的用法介紹”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實(shí)用文章!