【MaxCompute】学习笔记常用查询sql
SELECT 查詢
命令格式
SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [ORDER BY order_condition] [LIMIT number]注意:
SELECT 操作從表中讀取數(shù)據(jù),要讀的列可以用列名指定,或者用*代表所有的列,常用的 SELECT 如下
SELECT * FROM shop;只讀取 shop 的一列 shop_name
SELECT shop_name FROM shop;在 WHERE 中可以指定過濾的條件
SELECT * FROM shop WHERE shop_name LIKE ' hangzhou%';在 select語句的 where 條件中可以指定 partition 范圍,這樣可以僅僅掃描表的指定部分,避免全表掃描。如下所示,假設(shè) page_views 使用 date 作為 partition column。
SELECT page_views.* FROM page_views WHERE page_views.date >= ' 2008-03-01' AND page_views.date <= ' 2008-03-31';在 table_reference 中支持使用嵌套子查詢。
ALL:如果有重復(fù)數(shù)據(jù)行時(shí),返回所有的行,不指定此選項(xiàng)時(shí)默認(rèn)效果和 ALL 相同
DISTINCT :如果有重復(fù)數(shù)據(jù)行時(shí),只返回一行記錄,如:
SELECT DISTINCT shop_name FROM shop;AND &OR 可在 where 語句中把兩個(gè)或多個(gè)條件結(jié)合起來。AND 是第一個(gè)和第二個(gè)條件都成立。OR 是第一個(gè)和第二個(gè)條件只要有一個(gè)成立,如:
SELECT *FROM shop WHERE shop_name LIKE 'hangzhou%' OR shop_name LIKE 'suzhou%';GROUP BY:在 SELECT 中包含聚類函數(shù)時(shí),用 GROUP BY 指定分類的列,如:
SELECT shop_location FROM shop Group by shop_location;注意:
UNION ALL 查詢
將兩個(gè)或多個(gè) SELECT操作返回的數(shù)據(jù)集聯(lián)合成一個(gè)數(shù)據(jù)集,如果結(jié)果有重復(fù)行時(shí),會(huì)返回所有符合條件的行,不進(jìn)行重復(fù)行的去重處理。需要注意的是:MaxCompute 不支持頂級(jí)的兩個(gè)查詢結(jié)果合并,要改寫為一個(gè)子查詢的形式,如:
SELECT * FROM A UNION ALL SELECT * FROM B;需要改成:
SELECT * FROM (SELECT * FROM A UNION ALL SELECT * FROM B) tmp;備注:
子查詢
普通的 SELECT 是從幾張表中讀數(shù)據(jù),如 SELECT column_1, column_2 … FROM table_name,查詢的對(duì)象也可以是另外一個(gè) SELECT 操作,如:
SELECT * FROM (SELECT shop_name FROM shop) a;注意:子查詢必須要有別名。
在 FROM 子句中,子查詢可以當(dāng)作一張表來使用,與其它的表或子查詢進(jìn)行 JOIN 操作,如:
SELECT a.shop_name, b.customer_id,b.total_price FROM (SELECT shop_name FROM shop) a JOIN (SELECT shop_name,customer_id,total_price FROM sale) b ON a.shop_name=b.shop_name;JOIN 操作
join_table:table_reference JOIN table_factor [join_condition]| table_reference {LEFT|RIGHT|FULL} OUTER JOIN table_reference join_conditiontable_reference:table_factor| join_tabletable_factor:tbl_name [alias]| table_subquery alias| ( table_references )join_condition:ON equality_expression ( AND equality_expression )*equality_expression:expression = expressionLEFT OUTER JOIN 左連接,返回左表中的所有記錄,即使在右表中沒有記錄與它匹配,
例如:
RIGHT OUTER JOIN 右連接,返回右表中的所有記錄,即使在左表中沒有記錄與它匹配,
例如:
FULL OUTER JOIN 全連接, 返回左右表中的所有記錄,例如:
SELECT * FROM shop a FULL OUTER JOIN sale_detail b ON a.shop_name=b.shop_name;連接條件,普通 JOIN 中只允許 AND 連接的等值條件,MAPJOIN 時(shí)允許有不等值連接和 使用 OR 連接的條件。
MAP JOIN HINT
當(dāng)一個(gè)大表和一個(gè)或多個(gè)小表做 JOIN 時(shí),可以使用 MAPJOIN,性能比普通的 JOIN 要快很多,下面是一個(gè)例子。
需要注意,使用 MAPJOIN 時(shí),LEFT OUTER JOIN 的左表必須是大表,
RIGHT OUTER JOIN 的右表必須是大表,INNER JOIN 左右表都可以是大表。FULL OUTER JOIN
不能使用 MAPJOIN。
對(duì)于小表的限制,目前定為在解壓后在內(nèi)存里的數(shù)據(jù)不超過 512M,如果 mapjoin 中指定多個(gè)小表,則小表占用的內(nèi)存總和不得超過 512M。
SELECT /* + MAPJOIN(a) */ a.shop_name, b.customer_id,b.total_price FROM shop a JOIN sale_detail b ON a.shop_name = b.shop_name;備注:
CASE WHEN 表達(dá)式
有兩種不同的 case when 表達(dá)式
CASE valueWHEN (_condition1) THEN result1WHEN (_condition2) THEN result2…ELSE resultn END CASEWHEN (_condition1) THEN result1WHEN (_condition2) THEN result2WHEN (_condition3) THEN result3……ELSE resultn ENDCASE WHEN 表達(dá)式可以根據(jù)表達(dá)式的計(jì)算結(jié)果靈活返回不同的值, 如以下語句根據(jù)SHOP_NAME 的不同情況得出所屬區(qū)域:
SELECT CASE WHEN SHOP_NAME IS NULL THEN 'DEFAULT_REGION' WHEN SHOP_NAME LIKE 'HZ%' THEN 'ZJ_REGION' END AS REGION FROM SHOP;總結(jié)
以上是生活随笔為你收集整理的【MaxCompute】学习笔记常用查询sql的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MaxCompute】学习笔记操作表s
- 下一篇: 【设计模式】学习笔记---单例模式