首頁 資料庫 mysql教程 sql語句中的with as該怎麼用

sql語句中的with as該怎麼用

Aug 06, 2021 pm 05:54 PM
sql

WITH AS片語,也稱為子查詢部分,可以定義一個SQL片段,該SQL片段會被整個SQL語句用到。可以讓SQL語句的可讀性更高,也可以在UNION ALL的不同部分,作為提供資料的部分。

sql語句中的with as該怎麼用

–針對一個別名

with tmp as (select * from tb_name)
登入後複製

–針對多個別名

with
tmp as (select * from tb_name),
tmp2 as (select * from tb_name2),
tmp3 as (select * from tb_name3),
…
登入後複製

–相當於建立了一個e臨時表

with e as (select * from scott.emp e where e.empno=7499)
select * from e;
登入後複製

–相當於建了e、d臨時表

with
e as (select * from scott.emp),
d as (select * from scott.dept)
select * from e, d where e.deptno = d.deptno;
登入後複製

其實就是把一大堆重複用到的sql語句放在with as裡面,取一個別名,後面的查詢就可以用它,這樣對於大批量的sql語句起到一個優化的作用,而且清楚明了。

向一張表插入資料的with as用法

insert into table2
with
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需要有關聯條件,不然結果會是笛卡爾積。

with as 相當於虛擬視圖。

with as短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個sql片斷,該sql片段會被整個sql語句所用到。有的時候,是為了讓sql語句的可讀性更高些,也有可能是在union all的不同部分,作為提供資料的部分。

特別對於union all比較有用。因為union all的每個部分可能相同,但是如果每個部分都去執行一遍的話,則成本太高,所以可以使用with as短語,則只要執行一遍即可。如果with as短語所定義的表名被呼叫兩次以上,則優化器會自動將with as短語所取得的資料放入一個temp表裡,如果只是被呼叫一次,則不會。而提示materialize則是強制將with as短語裡的資料放入全域臨時表裡。很多查詢透過這種方法都可以提高速度。

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語句的優點:

(1). SQL可讀性增強。例如對於特定with子查詢取個有意義的名字等。

(2)、with子查詢只執行一次,將結果儲存在使用者暫存表空間中,可以引用多次,增強效能。

舉例:在進行導入EXCEL的過程中,有時候,需要將數據存儲在臨時表中,當下一次在進行導入的時候,進行清除臨時表的數據,但是這時候,有時候發生並發問題的話,兩個使用者可能會分別操作對方的數據,所以,可能造成混亂,但是可以使用WITH函數和UNION語句拼接一個SQL語句,儲存在SESSION中,當需要匯出錯誤訊息的時候,可以使用該語句構造資料。

相關推薦:《mysql教學

###

以上是sql語句中的with as該怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Hibernate 框架中 HQL 和 SQL 的差異是什麼? Hibernate 框架中 HQL 和 SQL 的差異是什麼? Apr 17, 2024 pm 02:57 PM

Hibernate 框架中 HQL 和 SQL 的差異是什麼?

Oracle SQL中除法運算的用法 Oracle SQL中除法運算的用法 Mar 10, 2024 pm 03:06 PM

Oracle SQL中除法運算的用法

SQL中的identity屬性是什麼意思? SQL中的identity屬性是什麼意思? Feb 19, 2024 am 11:24 AM

SQL中的identity屬性是什麼意思?

Oracle與DB2的SQL語法比較與區別 Oracle與DB2的SQL語法比較與區別 Mar 11, 2024 pm 12:09 PM

Oracle與DB2的SQL語法比較與區別

詳解MyBatis動態SQL標籤中的Set標籤功能 詳解MyBatis動態SQL標籤中的Set標籤功能 Feb 26, 2024 pm 07:48 PM

詳解MyBatis動態SQL標籤中的Set標籤功能

java怎麼透過MySQL驅動攔截器實現執行sql耗時計算 java怎麼透過MySQL驅動攔截器實現執行sql耗時計算 May 27, 2023 pm 01:10 PM

java怎麼透過MySQL驅動攔截器實現執行sql耗時計算

SpringBoot如何加密設定檔的SQL帳號密碼 SpringBoot如何加密設定檔的SQL帳號密碼 May 22, 2023 pm 08:50 PM

SpringBoot如何加密設定檔的SQL帳號密碼

SQL出現5120錯誤怎麼解決 SQL出現5120錯誤怎麼解決 Mar 06, 2024 pm 04:33 PM

SQL出現5120錯誤怎麼解決

See all articles