Database Study/BigQuery
[BigQuery]표준 SQL 쿼리 구문
exp9405
2020. 6. 14. 17:14
반응형
쿼리문 : 테이블 / 표현식을 한 개 이상 검색하고 계산된 결과를 행으로 반환
BigQuery SQL 구문
query_statement:
query_expr
query_expr:
[ WITH with_query_name AS ( query_expr ) [, ...] ]
{ select | ( query_expr ) | query_expr set_op query_expr }
[ ORDER BY expression [{ ASC | DESC }] [, ...] ]
[ LIMIT count [ OFFSET skip_rows ] ]
select:
SELECT [ AS { STRUCT | VALUE } ] [{ ALL | DISTINCT }]
{ [ expression. ]* [ EXCEPT ( column_name [, ...] ) ]
[ REPLACE ( expression [ AS ] column_name [, ...] ) ]
| expression [ [ AS ] alias ] } [, ...]
[ FROM from_item [, ...] ]
[ WHERE bool_expression ]
[ GROUP BY { expression [, ...] | ROLLUP ( expression [, ...] ) } ]
[ HAVING bool_expression ]
[ WINDOW window_name AS ( window_definition ) [, ...] ]
set_op:
UNION { ALL | DISTINCT } | INTERSECT DISTINCT | EXCEPT DISTINCT
from_item: {
table_name [ [ AS ] alias ] [ FOR SYSTEM_TIME AS OF timestamp_expression ] |
join |
( query_expr ) [ [ AS ] alias ] |
field_path |
{ UNNEST( array_expression ) | UNNEST( array_path ) | array_path }
[ [ AS ] alias ] [ WITH OFFSET [ [ AS ] alias ] ] |
with_query_name [ [ AS ] alias ]
}
join:
from_item [ join_type ] JOIN from_item
[ { ON bool_expression | USING ( join_column [, ...] ) } ]
join_type:
{ INNER | CROSS | FULL [OUTER] | LEFT [OUTER] | RIGHT [OUTER] }
표기법:
- 대괄호 '[ ]'는 절(선택사항)
- 괄호 '( )'는 리터럴 괄호
- 세로 막대 '|'는 논리 OR
- 중괄호 '{ }'는 옵션 조합을 묶는 데 사용
- 꺾쇠 괄호 '[, ...]' 안에 있는 쉼표 다음에 오는 줄임표는 앞의 항목이 쉼표로 구분된 목록으로 반복될 수 있음
SELECT
- SELECT expression
- SELECT expression.* : 열마다 출력 열을 한 개씩 생성
WITH groceries AS
(SELECT "milk" AS dairy,
"eggs" AS protein,
"bread" AS grain)
SELECT g.*
FROM groceries AS g;
+-------+---------+-------+
| dairy | protein | grain |
+-------+---------+-------+
| milk | eggs | bread |
+-------+---------+-------+
- SELECT DISTINCT : 중복 행 삭제 / 나머지 행만 반환 / STRUCT , ARRAY 유형의 열은 반환할 수 없음
- SELECT * EXCEPT : 결과에서 제외할 열의 이름을 한 개 이상 지정 / 일치하는 모든 열 이름은 출력에서 생략
WITH orders AS
(SELECT 5 as order_id,
"sprocket" as item_name,
200 as quantity)
SELECT * EXCEPT (order_id)
FROM orders;
+-----------+----------+
| item_name | quantity |
+-----------+----------+
| sprocket | 200 |
+-----------+----------+
- SELECT * REPLACE : expression AS identifier 절 한 개 이상 지정 / 각 식별자는 SELECT * 문의 열 이름 한개와 일치
출력 열 목록에서 REPLACE 절의 식별자와 일치하면, 표현식으로 바뀜
WITH orders AS
(SELECT 5 as order_id,
"sprocket" as item_name,
200 as quantity)
SELECT * REPLACE ("widget" AS item_name)
FROM orders;
+----------+-----------+----------+
| order_id | item_name | quantity |
+----------+-----------+----------+
| 5 | widget | 200 |
+----------+-----------+----------+
WITH orders AS
(SELECT 5 as order_id,
"sprocket" as item_name,
200 as quantity)
SELECT * REPLACE (quantity/2 AS quantity)
FROM orders;
+----------+-----------+----------+
| order_id | item_name | quantity |
+----------+-----------+----------+
| 5 | sprocket | 100 |
+----------+-----------+----------+
반응형