站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        sql語(yǔ)句中的with as該怎么用

        WITH AS短語(yǔ),也叫做子查詢(xún)部分,可以定義一個(gè)SQL片斷,該SQL片斷會(huì)被整個(gè)SQL語(yǔ)句用到。可以使SQL語(yǔ)句的可讀性更高,也可以在UNION ALL的不同部分,作為提供數(shù)據(jù)的部分。

        sql語(yǔ)句中的with as該怎么用

        –針對(duì)一個(gè)別名

        with tmp as (select * from tb_name)

        –針對(duì)多個(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語(yǔ)句放在with as里面,取一個(gè)別名,后面的查詢(xún)就可以用它,這樣對(duì)于大批量的sql語(yǔ)句起到一個(gè)優(yōu)化的作用,而且清楚明了。

        向一張表插入數(shù)據(jù)的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需要有關(guān)聯(lián)條件,不然結(jié)果會(huì)是笛卡爾積。

        with as 相當(dāng)于虛擬視圖。

        with as短語(yǔ),也叫做子查詢(xún)部分(subquery factoring),可以讓你做很多事情,定義一個(gè)sql片斷,該sql片斷會(huì)被整個(gè)sql語(yǔ)句所用到。有的時(shí)候,是為了讓sql語(yǔ)句的可讀性更高些,也有可能是在union all的不同部分,作為提供數(shù)據(jù)的部分。

        特別對(duì)于union all比較有用。因?yàn)閡nion all的每個(gè)部分可能相同,但是如果每個(gè)部分都去執(zhí)行一遍的話(huà),則成本太高,所以可以使用with as短語(yǔ),則只要執(zhí)行一遍即可。如果with as短語(yǔ)所定義的表名被調(diào)用兩次以上,則優(yōu)化器會(huì)自動(dòng)將with as短語(yǔ)所獲取的數(shù)據(jù)放入一個(gè)temp表里,如果只是被調(diào)用一次,則不會(huì)。而提示materialize則是強(qiáng)制將with as短語(yǔ)里的數(shù)據(jù)放入一個(gè)全局臨時(shí)表里。很多查詢(xún)通過(guò)這種方法都可以提高速度。

        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ǔ)句的優(yōu)點(diǎn):

        (1). SQL可讀性增強(qiáng)。比如對(duì)于特定with子查詢(xún)?nèi)€(gè)有意義的名字等。

        (2)、with子查詢(xún)只執(zhí)行一次,將結(jié)果存儲(chǔ)在用戶(hù)臨時(shí)表空間中,可以引用多次,增強(qiáng)性能。

        舉例:在進(jìn)行導(dǎo)入EXCEL的過(guò)程中,有時(shí)候,需要將數(shù)據(jù)存儲(chǔ)在臨時(shí)表中,當(dāng)下一次在進(jìn)行導(dǎo)入的時(shí)候,進(jìn)行清除臨時(shí)表的數(shù)據(jù),但是這時(shí)候,有時(shí)候發(fā)生并發(fā)問(wèn)題的話(huà),兩個(gè)用戶(hù)可能會(huì)分別操作對(duì)方的數(shù)據(jù),所以,可能造成混亂,但是可以使用WITH函數(shù)和UNION語(yǔ)句拼接一個(gè)SQL語(yǔ)句,存儲(chǔ)在SESSION中,當(dāng)需要導(dǎo)出錯(cuò)誤信息的時(shí)候,可以使用該語(yǔ)句構(gòu)造數(shù)據(jù)。

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 亚洲精品无码精品mV在线观看| 青青草原精品99久久精品66| 亚洲一区精品无码| 国产A∨国片精品一区二区| 久久精品国产亚洲av水果派| 精品久久人人做人人爽综合| 四虎永久在线精品884aa下载| 国产精品亚洲综合专区片高清久久久| 亚洲日韩欧美制服精品二区| 99精品视频在线观看re| 国产精品gz久久久| 久久精品中文字幕无码绿巨人| 国产精品夜色视频一级区| 欧美精品免费观看二区| 色综合久久精品中文字幕首页 | 国产一在线精品一区在线观看 | 四虎国产精品永久在线看| 国产成人AV无码精品| 精品成人免费自拍视频| 国产亚洲精品精华液| 久久精品国产亚洲av水果派| 欧洲精品色在线观看| 亚洲AV成人精品一区二区三区| 亚洲福利精品一区二区三区| 欧美成人精品第一区二区| 乱人伦人妻精品一区二区| 久久91这里精品国产2020| 精品国产日韩亚洲一区| 国产亚洲精品a在线观看| 国产精品欧美一区二区三区| 成人免费精品网站在线观看影片| 久久精品免费观看| 久久久久国产精品| 久久精品国产亚洲沈樵| 91精品国产高清久久久久久91| 四虎国产精品永久地址51| 欧美+亚洲+精品+三区| 91精品福利在线观看| 国产精品乱伦| 国精品无码A区一区二区| 久久精品成人欧美大片|