STRUCT
방법 1. 소괄호만 이용하여 작성하기
단, 소괄호만 쓸 때는 세부 필드명을 지정할 수 없다. 필드명을 지정하려면 아래에 있는 방법 2 처럼 STRUCT를 꼭 붙이자.
-- 가능
SELECT ('bread', 100) AS pid_1
, ('fruit', 50) AS pid_2
-- 불가능
-- SELECT ('bread' AS category, 100 AS price) AS pid_1
-- , ('fruit' AS category, 50 AS price) AS pid_2

방법 2. STRUCT 이용하여 작성하기
2-1. AS로 '세부 필드명'만 지정하기
SELECT STRUCT('bread' AS category, 100 AS price) AS pid_1
, STRUCT('fruit' AS category, 50 AS price) AS pid_2
, STRUCT('furniture' AS category, 700 AS price) AS pid_3

2-2. <> 안에 '타입'과 '세부 필드명' 모두 지정하기
SELECT STRUCT<category STRING, price INT64>('bread', 100) AS pid_1
, STRUCT<category STRING, price INT64>('fruit', 50) AS pid_2
, STRUCT<category STRING, price INT64>('furniture', 700) AS pid_3

ARRAY
방법 1. 대괄호만 이용하여 작성하기
SELECT ['pencil', 'eraser', 'sticker'] AS school_supplies

ARRAY 안에 STRUCT 넣기 (STRUCT in ARRAY)
SELECT [STRUCT('bread' AS column_name, 100 AS price)
, ('fruit', 50)
, ('furniture', 700)
] AS product

UNNEST로 ARRAY 분리하기
- 기본적으로 UNNEST는 배열을 “테이블”로 바꾸는 연산자이므로 FROM 절에서 사용할 수 있다.
- 주로 FROM의 JOIN(특히 CROSS/LEFT/INNER)과 함께 쓰는 형태가 많이 사용된다.
- 따라서 SELECT 구문에서 바로 사용할 수는 없다.
- 단, UNNEST를 WHERE + IN 연산자와 함께 사용할 수 있는데, 예외적으로 FROM 밖에서 쓸 수 있는 경우다.
위에서 만든 STRUCT in ARRAY 쿼리를 UNNEST 로 한 행씩 분리해보자.
SELECT *
FROM UNNEST([STRUCT('bread' AS column_name, 100 AS price)
, ('fruit', 50)
, ('furniture', 700)
])

'데이터 처리 도구 > SQL' 카테고리의 다른 글
| 자주 쓰는 정규 표현식 (0) | 2025.10.13 |
|---|---|
| [빅쿼리(BigQuery)] JSON을 다루는 함수 (1) (0) | 2025.10.03 |
| 인덱스 알고리즘 (B-Tree, Hash) (0) | 2025.08.12 |
| SQL 성능 향상을 위한 공부: 1-4) 실행 계획을 확인하는 방법 (0) | 2025.07.21 |
| SQL에서 날짜 데이터 타입 차이 (DATETIME vs. TIMESTAMP) (0) | 2025.07.17 |