日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【MaxCompute】学习笔记常用查询sql

發布時間:2025/5/22 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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]
注意:
  • [GROUP BY col_list]:必須寫列的完整表達式,不可用列的 column-alias。
  • [LIMIT number]的 number 是常數。
  • SELECT 操作從表中讀取數據,要讀的列可以用列名指定,或者用*代表所有的列,常用的 SELECT 如下

    SELECT * FROM shop;

    只讀取 shop 的一列 shop_name

    SELECT shop_name FROM shop;

    在 WHERE 中可以指定過濾的條件

    SELECT * FROM shop WHERE shop_name LIKE ' hangzhou%';

    在 select語句的 where 條件中可以指定 partition 范圍,這樣可以僅僅掃描表的指定部分,避免全表掃描。如下所示,假設 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:如果有重復數據行時,返回所有的行,不指定此選項時默認效果和 ALL 相同

    DISTINCT :如果有重復數據行時,只返回一行記錄,如:

    SELECT DISTINCT shop_name FROM shop;

    AND &OR 可在 where 語句中把兩個或多個條件結合起來。AND 是第一個和第二個條件都成立。OR 是第一個和第二個條件只要有一個成立,如:

    SELECT *FROM shop WHERE shop_name LIKE 'hangzhou%' OR shop_name LIKE 'suzhou%';

    GROUP BY:在 SELECT 中包含聚類函數時,用 GROUP BY 指定分類的列,如:

    SELECT shop_location FROM shop Group by shop_location;

    注意:

  • 在使用 order by 排序時,NULL 會被認為比任何值都小,這個行為與 mysql一致,但是與 oracle 不一致。
  • LIMIT 限制只輸出結果中的幾行,當使用 SELECT 語句直接從屏幕輸出查看結果時,最多只輸出 1000 行。
  • UNION ALL 查詢

    將兩個或多個 SELECT操作返回的數據集聯合成一個數據集,如果結果有重復行時,會返回所有符合條件的行,不進行重復行的去重處理。需要注意的是:MaxCompute 不支持頂級的兩個查詢結果合并,要改寫為一個子查詢的形式,如:

    SELECT * FROM A UNION ALL SELECT * FROM B;

    需要改成:

    SELECT * FROM (SELECT * FROM A UNION ALL SELECT * FROM B) tmp;
    備注:
  • UNION ALL 操作對應的各個子查詢的列個數、名稱和類型必須一致。如果列名不一致時,可以使用列的別名加以解決。
  • 上述 query 中的 tmp 別名不能省略。
  • 一般情況下,我們規定最多允許 128 個表的 UNION ALL。
  • 子查詢

    普通的 SELECT 是從幾張表中讀數據,如 SELECT column_1, column_2 … FROM table_name,查詢的對象也可以是另外一個 SELECT 操作,如:

    SELECT * FROM (SELECT shop_name FROM shop) a;

    注意:子查詢必須要有別名。

    在 FROM 子句中,子查詢可以當作一張表來使用,與其它的表或子查詢進行 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 = expression

    LEFT OUTER JOIN 左連接,返回左表中的所有記錄,即使在右表中沒有記錄與它匹配,
    例如:

    SELECT * FROM shop a LEFT OUTER JOIN sale_detail b ON a.shop_name=b.shop_name;

    RIGHT OUTER JOIN 右連接,返回右表中的所有記錄,即使在左表中沒有記錄與它匹配,
    例如:

    SELECT *FROM shop a RIGHT OUTER JOIN sale_detail b ON a.shop_name=b.shop_name;

    FULL OUTER JOIN 全連接, 返回左右表中的所有記錄,例如:

    SELECT * FROM shop a FULL OUTER JOIN sale_detail b ON a.shop_name=b.shop_name;

    連接條件,普通 JOIN 中只允許 AND 連接的等值條件,MAPJOIN 時允許有不等值連接和 使用 OR 連接的條件。

    MAP JOIN HINT

    當一個大表和一個或多個小表做 JOIN 時,可以使用 MAPJOIN,性能比普通的 JOIN 要快很多,下面是一個例子。

    需要注意,使用 MAPJOIN 時,LEFT OUTER JOIN 的左表必須是大表,
    RIGHT OUTER JOIN 的右表必須是大表,INNER JOIN 左右表都可以是大表。FULL OUTER JOIN
    不能使用 MAPJOIN。

    對于小表的限制,目前定為在解壓后在內存里的數據不超過 512M,如果 mapjoin 中指定多個小表,則小表占用的內存總和不得超過 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;
    備注:
  • MAP JOIN 支持小表為子查詢,最多允許指定 6 張小表。
  • 使用 map join 時需要引用小表或是子查詢時,需要引用別名。
  • CASE WHEN 表達式

    有兩種不同的 case when 表達式

    CASE valueWHEN (_condition1) THEN result1WHEN (_condition2) THEN result2…ELSE resultn END CASEWHEN (_condition1) THEN result1WHEN (_condition2) THEN result2WHEN (_condition3) THEN result3……ELSE resultn END

    CASE WHEN 表達式可以根據表達式的計算結果靈活返回不同的值, 如以下語句根據SHOP_NAME 的不同情況得出所屬區域:

    SELECT CASE WHEN SHOP_NAME IS NULL THEN 'DEFAULT_REGION' WHEN SHOP_NAME LIKE 'HZ%' THEN 'ZJ_REGION' END AS REGION FROM SHOP;

    總結

    以上是生活随笔為你收集整理的【MaxCompute】学习笔记常用查询sql的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。