SQL中使用WITH 語句的查詢
sql with as 用法(適用sqlserver,好像oracle也適用) Server 2005中提供了公用表表達式(CTE),使用CTE,可以使SQL語句的可維護性,同時,CTE要比表變量的效率高得多。
下面是CTE的語法: [ WITH
如下面的SQL語句將無法正常使用CTE: with cr as ( select CountryRegionCode from *yRegion where Name like 'C%' ) select * from *yRegion -- 應將這條SQL語句去掉 -- 使用CTE的SQL語句應緊跟在相關的CTE后面 -- select * from *rovince where CountryRegionCode in (select * from cr) 2. CTE后面也可以跟其他的CTE,但只能使用一個with,多個CTE中間用逗號(,)分隔,如下面的SQL語句所示: with cte1 as ( select * from table1 where name like 'abc%' ), cte2 as ( select * from table2 where id > 20 ), cte3 as ( select * from table3 where price < 100 ) select a.* from cte1 a, cte2 b, cte3 c where * = * and * = * 3. 如果CTE的表達式名稱與某個數據表或視圖重名,則緊跟在該CTE后面的SQL語句使用的仍然是CTE,當然,后面的SQL語句使用的就是數據表或視圖了,如下面的SQL語句所示: -- table1是一個實際存在的表 with table1 as ( select * from persons where age < 30 ) select * from table1 -- 使用了名為table1的公共表表達式 select * from table1 -- 使用了名為table1的數據表 4. CTE 可以引用自身,也可以引用在同一 WITH 子句中預先定義的 CTE。不允許前向引用。
5. 不能在 CTE_query_definition 中使用以下子句: (1)COMPUTE 或 COMPUTE BY (2)ORDER BY(除非指定了 TOP 子句) (3)INTO (4)帶有查詢提示的 OPTION 子句 (5)FOR XML (6)FOR BROWSE 6. 如果將 CTE 用在屬于批處理的一部分的語句中,那么在它之前的語句必須以分號結尾,如下面的SQL所示: declare @s nvarchar(3) set @s = 'C%' ; -- 必須加分號 with t_tree as ( select CountryRegionCode from *yRegion where Name like @s ) select * from *rovince where CountryRegionCode in (select * from t_tree) 7、CTE除了可以簡化嵌套SQL語句外,還可以進行遞歸調用。
oracel 多個with as 嵌套的語句怎么優化
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),
其實就是把一大堆重復用到的sql語句放在with as里面,取一個別名,后面的查詢就可以用它,這樣對于大批量的sql語句起到一個優化的作用,而且清楚明了。
舉例:
1
with e as (select * from * e where *=7499)
select * from e;
2
with
s1 as (select rownum c1 from dual connect by rownum
sql語句查詢,多個結果查詢一列顯示如下:
(sql 2005以上版本)
--單行表
declare @tbSingle table
(
id varchar(20),
name varchar(20)
)
--測試數據
insert @tbSingle Values('1','吉')
insert @tbSingle Values('1','祥')
insert @tbSingle Values('2','如')
insert @tbSingle Values('2','意')
--合并
;with TT(id,name) as
(
select id,min(name) from @tbSingle
group by id
union all
select *,convert(varchar(20),*+*) from @tbSingle p
inner join TT c on *=* and *>*
)
select id,max(name)name from TT group by id
sql中,with的用法
WITH 通常與AS連用,也叫做子查詢部分。用法:
1). 可用來定義一個SQL片斷,該片斷會被整個SQL語句所用到。
2). 為了讓SQL語句的可讀性更高
3). 也有可能是在UNION ALL的不同部分,作為提供數據的部分。特別對于UNION ALL比較有
用。因為UNION ALL的每個部分可能相同,但是如果每個部分都去執行一遍的話,則成本
太高,所以可以使用WITH AS短語,則只要執行一遍即可。
例如:下面兩種表達的是同一種意思:
①with alias as (select * from pra)
②select * from pra;
sql語句中的and 和or能有多個嗎?另外如果語句sql語句中只能有一個
樓主寫的是分頁算法。
and classes='"+classes2+"',price<=500 這樣是不對的,將逗號改成 and另外,外面的select沒有加order by ,可能分頁結果不準確。SQL中可以以多個AND或OR,當條件混亂時,可以使用括號。
如a and (b or c)這樣的。樓主補充的語句可以修改為sql="select top 16 * from tb_goods where id not in (select top "+(nowPage*16)+" id from tb_goods where classes='"+classes2+"' and price<=500 order by id asc)and classes='"+classes2+"' and price<=500 order by id asc";。
SQL多表查詢語句怎么寫
SQL多表查詢語句的步驟如下:
我們需要準備的材料分別是:電腦、sql查詢器。
1、首先,打開sql查詢器,連接上相應的數據庫表,例如m1表和m2表。
2、點擊“查詢”按鈕,輸入:select max(km) from m1 join m2 on *=* where id=14 and lx=15;。
3、點擊“運行”按鈕,此時查詢到km的最大值為20。
轉載請注明出處華閱文章網 » withsql多個語句