hive (with as)


背景:
當我們書寫一些結構相對復雜的SQL語句時,可能某個子查詢在多個層級多個地方存在重復使用的情況,這個時候我們可以使用 with as 語句將其獨立出來,極大提高SQL可讀性,簡化SQL~
注:目前 oracle、sql server、hive等均支持 with as 用法,但 mysql並不支持!

2019-05-31更新:MySQL8.0大量更新優化,支持Common table expressions,即支持 with 語法!

一、介紹

with as 也叫做子查詢部分,首先定義一個sql片段,該sql片段會被整個sql語句所用到,為了讓sql語句的可讀性更高些,作為提供數據的部分,也常常用在union等集合操作中。

with as就類似於一個視圖或臨時表,可以用來存儲一部分的sql語句作為別名,不同的是with as 屬於一次性的,而且必須要和其他sql一起使用才可以!

其最大的好處就是適當的提高代碼可讀性,而且如果with子句在后面要多次使用到,這可以大大的簡化SQL;更重要的是:一次分析,多次使用,這也是為什么會提供性能的地方,達到了“少讀”的目標。

二、使用

WITH t1 AS (
SELECT *
FROM carinfo
),
t2 AS (
SELECT *
FROM car_blacklist
)
SELECT *
FROM t1, t2
1
2
3
4
5
6
7
8
9
10
注意:這里必須要整體作為一條sql查詢,即with as語句后不能加分號,不然會報錯。

三、注意事項

1. with子句必須在引用的select語句之前定義,同級with關鍵字只能使用一次,多個只能用逗號分割;最后一個with 子句與下面的查詢之間不能有逗號,只通過右括號分割,with 子句的查詢必須用括號括起來.

以下寫法會報錯:

with t1 as (select * from carinfo)
with t2 as (select * from car_blacklist)
select * from t1,t2
1
2
3
with t1 as (select * from carinfo);
select * from t1
1
2
2.如果定義了with子句,但其后沒有跟select查詢,則會報錯!

以下寫法會報錯:

with t1 as (select * from carinfo)
1
正確寫法(沒有使用 t1沒關系,其后有select就行):

with t1 as (select * from carinfo)
select * from carinfo
1
2
3.前面的with子句定義的查詢在后面的with子句中可以使用。但是一個with子句內部不能嵌套with子句!

正確寫法:

with t1 as (select * from carinfo),
t2 as (select t1.id from t1)
select * from t2
————————————————
版權聲明:本文為CSDN博主「深寒丶」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Abysscarry/article/details/81322669


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM