검색
tee / insights
LEARNING / SQLHOME
DATA → QUERY → RESULT

SQL 문법 맵

조회·집계부터 COPY INTO, 데이터 수정, 객체 정의, 권한 관리까지 목적에 따라 SQL을 찾고 Snowflake와 BigQuery의 구문·조건·효과를 비교하세요.

SQL 방언

수록 범위와 공식 자료

조회 비교 23개 그룹과 작업 22개 항목을 수록합니다. 대표 예제이며 모든 옵션이나 제품 명령을 망라하지 않습니다.

작업 구문 확인: 2026-10-06

수록 범위와 공식 자료
영역구문·기능수록 상태공식 자료
조회·분석SELECT / JOIN / GROUP BY / WINDOW대표 예제 포함Snowflake · BigQuery
적재·내보내기COPY INTO / LOAD DATA / EXPORT DATA대표 예제 포함Snowflake · BigQuery
데이터 변경INSERT / UPDATE / DELETE / MERGE / TRUNCATE대표 예제 포함Snowflake · BigQuery
객체 정의TABLE / VIEW / SCHEMA / FUNCTION / PROCEDURE대표 예제 포함Snowflake · BigQuery
트랜잭션·권한·스크립트TRANSACTION / GRANT / REVOKE / DECLARE / INFORMATION_SCHEMA대표 예제 포함Snowflake · BigQuery
자동화·파이프라인PIPE / STREAM / TASK / DYNAMIC TABLE / scheduled queries공식 자료 참조만 제공Snowflake · BigQuery
외부·특수 테이블EXTERNAL TABLE / ICEBERG / SNAPSHOT / CLONE / MATERIALIZED VIEW공식 자료 참조만 제공Snowflake · BigQuery
계정·컴퓨팅 자원ACCOUNT / USER / ROLE / WAREHOUSE / IAM / reservations공식 자료 참조만 제공Snowflake · BigQuery
보안·공유POLICY / MASKING / ROW ACCESS / sharing / connections공식 자료 참조만 제공Snowflake · BigQuery
기계 학습·제품 확장ML / Cortex / search indexes / vector indexes / applications공식 자료 참조만 제공Snowflake · BigQuery

SQL 전체 흐름

조회와 주요 작업 명령을 다룹니다. 수록 표에서 예제와 자료 참조 범위를 확인하세요.

입력 만들기

데이터 출처

FROM은 처리할 테이블이나 결과를 지정한다.

이름 붙이기 / 중첩하기

WITH와 FROM의 하위 쿼리는 같은 중간 결과를 표현할 수 있다.

가로 결합: 어떤 행을 남길까?

일치 / 왼쪽 전체 / 양쪽 전체 / 모든 조합.

결합 조건 / 결합 후 필터

LEFT JOIN에서는 조건 위치에 따라 남는 행이 달라진다.

중첩 값을 행으로

복합 값의 요소를 행으로 펼친다.

행 필터링

언제 필터링할까?

WHERE는 집계 전, HAVING은 집계 후, QUALIFY는 window 후.

행 집계

N행 → 1값

무엇을 세고 어떤 요약값을 구할지 선택한다.

집계 안에서 정렬하기 / 백분위수 계산

WITHIN GROUP은 집계할 값의 순서를 정한다. BigQuery 집계 함수는 괄호 안에 ORDER BY를 쓴다.

집계에 넣을 값 고르기

중복, NULL, 최댓값을 가진 행, 입력 개수를 집계 함수 안에서 제어한다.

집계 단위 / 중복 제거

GROUP BY는 집계 단위를 만들고 DISTINCT는 선택한 출력 행의 중복을 없앤다.

행 수를 유지하며 분석

줄이기 / 각 행에 붙이기

Aggregate: N행→그룹당 1행. Window: N행→N행.

순위: 동점 처리

연번 / 동순위와 건너뛰기 / 동순위와 연속 순위.

NULL 건너뛰기 / NULL 정렬

IGNORE·RESPECT NULLS는 함수가 보는 값을, NULLS FIRST·LAST는 행의 정렬 위치를 바꾼다.

응용: 행 위치 / 값 범위

ROWS는 행 위치, RANGE는 정렬 값으로 범위를 정한다.

값 만들기

비교 / 조건 결합

비교는 TRUE / FALSE / NULL을 반환하고 논리 연산이 결합한다.

결측 판정 / 채우기

NULL과의 등호 비교는 모름이다. IS NULL로 판정한다.

일반 분기 / 두 갈래 단축형

CASE는 여러 조건, IF / IFF는 두 결과를 간결하게 쓴다.

일반 변환 / 안전한 변환

변환 불가 값: CAST는 오류, 안전 버전은 NULL.

부호 제거 / 반올림

ABS는 절댓값, ROUND는 지정 자릿수로 반올림.

변환 / 추출 / 연결

같은 문자열에 네 가지 연산을 적용한다.

현재 / 더하기 / 차이 / 절삭

기능은 같고 인수 순서와 단위 문법이 다르다.

중첩 값 / SQL 문자열

둘 다 7로 보여도 자료형이 다르다.

집합 조합

세로 결합: 중복은?

같은 A·B로 중복 유지 / 제거 / 공통 / 왼쪽만 비교한다.

응용: 열 이름으로 맞추기

열 위치가 달라도 같은 이름끼리 맞춘다.

결과 정리

결과 정리

중복 제거 → 정렬 → 앞부분 건너뛰기 → 제한 수만큼 반환.

파일 가져오기와 내보내기

파일을 테이블로 가져오기COPY INTO <table>파일의 행을 테이블에 적재합니다. 적재 결과와 대상 행을 확인합니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

빈 orders와 id,amount 헤더가 있는 CSV를 준비하세요. Snowflake 내부 스테이지 csv_stage 또는 BigQuery와 위치 조건이 맞는 Cloud Storage에 업로드하고 YOUR_BUCKET을 바꾸세요.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
COPY INTO tbi_lab.orders
FROM @tbi_lab.csv_stage/orders.csv
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1)
ON_ERROR = 'ABORT_STATEMENT';

예상 변화

파일의 행을 테이블에 적재합니다. 적재 결과와 대상 행을 확인합니다.

확인 방법

확인 방법
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

ON_ERROR는 오류 처리 방식입니다. ABORT_STATEMENT는 문장을 중단합니다. 적재 이력으로 재실행 시 파일을 건너뛸 수 있으며 FORCE=TRUE는 중복을 만들 수 있습니다.

공식 자료 · Snowflake 1

# load-files
테이블을 파일로 내보내기COPY INTO <location>조회 결과를 CSV 파일로 저장합니다. 저장 위치에서 확인합니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

두 행이 있는 orders와 쓰기 가능한 위치를 준비하세요. Snowflake는 csv_stage, BigQuery는 YOUR_BUCKET을 바꾼 Cloud Storage를 사용합니다.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
COPY INTO @tbi_lab.csv_stage/export_run/
FROM (SELECT id, amount FROM tbi_lab.orders)
FILE_FORMAT = (TYPE = CSV)
HEADER = TRUE;

예상 변화

조회 결과를 CSV 파일로 저장합니다. 저장 위치에서 확인합니다.

확인 방법

확인 방법
LIST @tbi_lab.csv_stage/export_run/;

매번 새 출력 위치를 쓰세요. 파일이 여러 개 생성될 수 있습니다. 파일 수와 내용을 확인하세요.

공식 자료 · Snowflake 1

# unload-files
스테이지와 파일 형식 준비CREATE STAGE · CREATE FILE FORMAT · PUT · LISTSnowflake에 빈 내부 스테이지와 CSV 형식 정의를 만듭니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab과 필요한 생성·조회 권한을 준비하세요.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
CREATE FILE FORMAT tbi_lab.csv_format
  TYPE = CSV SKIP_HEADER = 1;
CREATE STAGE tbi_lab.csv_stage
  FILE_FORMAT = (FORMAT_NAME = 'tbi_lab.csv_format');

예상 변화

Snowflake에 빈 내부 스테이지와 CSV 형식 정의를 만듭니다.

확인 방법

확인 방법
LIST @tbi_lab.csv_stage;

스테이지 생성만으로 파일이 올라가지 않습니다. Snowsight나 PUT 지원 클라이언트로 orders.csv를 업로드하세요. PUT은 내부 스테이지용입니다.

공식 자료 · Snowflake 1 · Snowflake 2 · Snowflake 3

# stage-format
적재 전에 파일 검증VALIDATION_MODE · RETURN_ERRORS · ON_ERROR · COPY INTOSnowflake에서 행을 추가하지 않고 파일 오류를 반환합니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

빈 orders와 id,amount 헤더가 있는 CSV를 준비하세요. Snowflake 내부 스테이지 csv_stage 또는 BigQuery와 위치 조건이 맞는 Cloud Storage에 업로드하고 YOUR_BUCKET을 바꾸세요.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
COPY INTO tbi_lab.orders
FROM @tbi_lab.csv_stage/orders.csv
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1)
VALIDATION_MODE = 'RETURN_ERRORS';

예상 변화

Snowflake에서 행을 추가하지 않고 파일 오류를 반환합니다.

확인 방법

확인 방법
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

VALIDATION_MODE는 적재 없이 검증합니다. 변환 SELECT와 함께 쓸 수 없습니다. 오류를 고친 후 일반 COPY를 실행하세요.

공식 자료 · Snowflake 1

# validate-load

저장된 행 변경

행 추가INSERT INTO · INSERT SELECTid=3, amount=300인 행을 추가합니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab.orders(id, amount)에 (1,100), (2,200)이 있는 상태에서 시작합니다. 각 예제 전에 초기 상태로 되돌리세요. 연속 실행 단계가 아닙니다.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
INSERT INTO tbi_lab.orders (id, amount)
VALUES (3, 300);

예상 변화

id=3, amount=300인 행을 추가합니다.

확인 방법

확인 방법
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

공식 자료 · Snowflake 1

# insert-rows
조건에 맞는 행 수정UPDATE · SET · WHEREid=1의 amount를 150으로 바꿉니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab.orders(id, amount)에 (1,100), (2,200)이 있는 상태에서 시작합니다. 각 예제 전에 초기 상태로 되돌리세요. 연속 실행 단계가 아닙니다.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
UPDATE tbi_lab.orders SET amount = 150 WHERE id = 1;

예상 변화

id=1의 amount를 150으로 바꿉니다.

확인 방법

확인 방법
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

같은 WHERE의 SELECT로 변경 대상을 먼저 확인하세요. BigQuery의 UPDATE와 DELETE에는 WHERE가 필요합니다.

공식 자료 · Snowflake 1

# update-rows
조건에 맞는 행 삭제DELETE FROM · WHEREid=2인 행을 삭제합니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab.orders(id, amount)에 (1,100), (2,200)이 있는 상태에서 시작합니다. 각 예제 전에 초기 상태로 되돌리세요. 연속 실행 단계가 아닙니다.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
DELETE FROM tbi_lab.orders WHERE id = 2;

예상 변화

id=2인 행을 삭제합니다.

확인 방법

확인 방법
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

같은 WHERE의 SELECT로 변경 대상을 먼저 확인하세요. BigQuery의 UPDATE와 DELETE에는 WHERE가 필요합니다.

공식 자료 · Snowflake 1

# delete-rows
일치하는 행 수정과 새 행 추가MERGE INTO · WHEN MATCHED · WHEN NOT MATCHEDid=1을 150으로 수정하고 id=3, amount=300을 추가합니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab.orders(id, amount)에 (1,100), (2,200)이 있는 상태에서 시작합니다. 각 예제 전에 초기 상태로 되돌리세요. 연속 실행 단계가 아닙니다.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
MERGE INTO tbi_lab.orders AS t
USING (SELECT 1 AS id, 150 AS amount
       UNION ALL SELECT 3, 300) AS s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET amount = s.amount
WHEN NOT MATCHED THEN INSERT (id, amount)
  VALUES (s.id, s.amount);

예상 변화

id=1을 150으로 수정하고 id=3, amount=300을 추가합니다.

확인 방법

확인 방법
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

하나의 수정 대상 키에 여러 입력 행이 일치하지 않게 확인하세요. 중복 처리 방식은 제품과 작업에 따라 다릅니다.

공식 자료 · Snowflake 1

# merge-rows
모든 행 삭제, 테이블 정의 유지TRUNCATE TABLE행은 0개가 되고 열 정의는 남습니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab.orders(id, amount)에 (1,100), (2,200)이 있는 상태에서 시작합니다. 각 예제 전에 초기 상태로 되돌리세요. 연속 실행 단계가 아닙니다.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
TRUNCATE TABLE tbi_lab.orders;

예상 변화

행은 0개가 되고 열 정의는 남습니다.

확인 방법

확인 방법
SELECT COUNT(*) AS rows_left FROM tbi_lab.orders;

모든 행이 대상이며 WHERE로 필터링할 수 없습니다.

공식 자료 · Snowflake 1

# truncate-table

테이블·뷰·루틴 정의

열과 자료형으로 테이블 생성CREATE TABLE · TEMPORARY TABLEid와 amount 열이 있는 빈 테이블을 만듭니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab을 준비하고 새 객체 이름이 사용되지 않았는지 확인하세요.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
CREATE TABLE tbi_lab.orders (id INTEGER, amount NUMBER(12,2));

예상 변화

id와 amount 열이 있는 빈 테이블을 만듭니다.

확인 방법

확인 방법
DESCRIBE TABLE tbi_lab.orders;

이 예제는 기존 데이터를 덮어쓰는 OR REPLACE를 사용하지 않습니다.

공식 자료 · Snowflake 1

# create-table
조회 결과를 새 테이블로 저장CREATE TABLE AS SELECT · CTASamount가 200 이상인 행을 새 테이블에 저장합니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab.orders(id, amount)에 (1,100), (2,200)이 있는 상태에서 시작합니다. 각 예제 전에 초기 상태로 되돌리세요. 연속 실행 단계가 아닙니다.

tbi_lab을 준비하고 새 객체 이름이 사용되지 않았는지 확인하세요.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
CREATE TABLE tbi_lab.large_orders AS
SELECT id, amount FROM tbi_lab.orders WHERE amount >= 200;

예상 변화

amount가 200 이상인 행을 새 테이블에 저장합니다.

확인 방법

확인 방법
SELECT * FROM tbi_lab.large_orders ORDER BY id;

이 예제는 기존 데이터를 덮어쓰는 OR REPLACE를 사용하지 않습니다.

공식 자료 · Snowflake 1

# create-as-select
조회를 뷰로 저장CREATE VIEW · ALTER VIEW · DROP VIEW조회 정의를 저장합니다. 일반 뷰는 결과 행의 복사본을 보관하지 않습니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab.orders(id, amount)에 (1,100), (2,200)이 있는 상태에서 시작합니다. 각 예제 전에 초기 상태로 되돌리세요. 연속 실행 단계가 아닙니다.

tbi_lab을 준비하고 새 객체 이름이 사용되지 않았는지 확인하세요.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
CREATE VIEW tbi_lab.large_orders_view AS
SELECT id, amount FROM tbi_lab.orders WHERE amount >= 200;

예상 변화

조회 정의를 저장합니다. 일반 뷰는 결과 행의 복사본을 보관하지 않습니다.

확인 방법

확인 방법
SELECT * FROM tbi_lab.large_orders_view ORDER BY id;

ALTER VIEW와 DROP VIEW는 뷰 정의를 변경·삭제합니다. 원본 테이블 의존성을 확인하세요.

공식 자료 · Snowflake 1

# create-view
테이블에 열 추가ALTER TABLE · ADD COLUMN · DROP COLUMN · RENAMEnote 열을 추가하며 기존 행의 값은 NULL입니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab.orders(id, amount)에 (1,100), (2,200)이 있는 상태에서 시작합니다. 각 예제 전에 초기 상태로 되돌리세요. 연속 실행 단계가 아닙니다.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
ALTER TABLE tbi_lab.orders ADD COLUMN note VARCHAR;

예상 변화

note 열을 추가하며 기존 행의 값은 NULL입니다.

확인 방법

확인 방법
DESCRIBE TABLE tbi_lab.orders;

열 추가 예제입니다. 열 삭제나 자료형 변경에는 별도 데이터·의존성 확인이 필요합니다.

공식 자료 · Snowflake 1

# alter-table
테이블 삭제DROP TABLE · IF EXISTS테이블 정의와 데이터를 삭제합니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab.orders(id, amount)에 (1,100), (2,200)이 있는 상태에서 시작합니다. 각 예제 전에 초기 상태로 되돌리세요. 연속 실행 단계가 아닙니다.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
DROP TABLE tbi_lab.orders;

예상 변화

테이블 정의와 데이터를 삭제합니다.

확인 방법

확인 방법
SHOW TABLES LIKE 'ORDERS' IN SCHEMA tbi_lab;

복구 여부는 제품 보존 설정 등에 따라 다릅니다. 복구를 가정하지 마세요.

공식 자료 · Snowflake 1

# drop-table
스키마·데이터 세트 생성CREATE SCHEMA · USE DATABASE · USE SCHEMA객체를 저장할 tbi_lab을 만듭니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
CREATE SCHEMA tbi_lab;
USE SCHEMA tbi_lab;

예상 변화

객체를 저장할 tbi_lab을 만듭니다.

확인 방법

확인 방법
SELECT CURRENT_DATABASE(), CURRENT_SCHEMA();

현재 데이터베이스에 스키마를 만들고 USE SCHEMA로 기본 위치를 바꿉니다.

공식 자료 · Snowflake 1 · Snowflake 2

# namespace
SQL 함수 생성CREATE FUNCTION · UDF입력값에 1을 더하는 함수를 만듭니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab을 준비하고 새 객체 이름이 사용되지 않았는지 확인하세요.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
CREATE FUNCTION tbi_lab.add_one(x INTEGER)
RETURNS INTEGER LANGUAGE SQL
AS $$ x + 1 $$;

예상 변화

입력값에 1을 더하는 함수를 만듭니다.

확인 방법

확인 방법
SELECT tbi_lab.add_one(2) AS result;

공식 자료 · Snowflake 1

# user-function
프로시저 저장CREATE PROCEDURE · CALL호출 시 3을 반환하는 프로시저를 만듭니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab을 준비하고 새 객체 이름이 사용되지 않았는지 확인하세요.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
CREATE PROCEDURE tbi_lab.answer()
RETURNS INTEGER LANGUAGE SQL
AS $$
BEGIN
  RETURN 3;
END;
$$;

예상 변화

호출 시 3을 반환하는 프로시저를 만듭니다.

확인 방법

확인 방법
CALL tbi_lab.answer();

공식 자료 · Snowflake 1

# procedure

실행·권한·메타데이터 관리

변경 확정 또는 취소BEGIN TRANSACTION · COMMIT · ROLLBACK변경을 취소하므로 id=1의 amount는 100으로 유지됩니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab.orders(id, amount)에 (1,100), (2,200)이 있는 상태에서 시작합니다. 각 예제 전에 초기 상태로 되돌리세요. 연속 실행 단계가 아닙니다.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
BEGIN TRANSACTION;
UPDATE tbi_lab.orders SET amount = 150 WHERE id = 1;
ROLLBACK;

예상 변화

변경을 취소하므로 id=1의 amount는 100으로 유지됩니다.

확인 방법

확인 방법
SELECT id, amount FROM tbi_lab.orders ORDER BY id;

COMMIT은 확정, ROLLBACK은 취소입니다. Snowflake DDL은 진행 중인 트랜잭션을 암묵적으로 커밋하므로 섞지 마세요.

공식 자료 · Snowflake 1

# transaction
읽기 권한 부여GRANT · TO ROLE지정한 대상에 테이블 읽기 권한을 부여합니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

orders와 권한을 변경할 관리 권한이 필요합니다. Snowflake의 tbi_reader 역할 또는 BigQuery 수신 그룹을 미리 확인하세요.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
GRANT SELECT ON TABLE tbi_lab.orders TO ROLE tbi_reader;

예상 변화

지정한 대상에 테이블 읽기 권한을 부여합니다.

확인 방법

확인 방법
SHOW GRANTS ON TABLE tbi_lab.orders;

테이블 SELECT 외에도 데이터베이스·스키마 USAGE와 warehouse 권한을 확인하세요.

공식 자료 · Snowflake 1

# permissions-grant
직접 부여한 권한 회수REVOKE · FROM ROLE지정한 직접 권한을 회수합니다. 다른 경로의 접근 권한은 남을 수 있습니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

orders와 권한을 변경할 관리 권한이 필요합니다. Snowflake의 tbi_reader 역할 또는 BigQuery 수신 그룹을 미리 확인하세요.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
REVOKE SELECT ON TABLE tbi_lab.orders FROM ROLE tbi_reader;

예상 변화

지정한 직접 권한을 회수합니다. 다른 경로의 접근 권한은 남을 수 있습니다.

확인 방법

확인 방법
SHOW GRANTS ON TABLE tbi_lab.orders;

다른 역할이나 상위 리소스에서 상속된 접근은 이 REVOKE로 회수되지 않습니다. 실제 유효 권한을 확인하세요.

공식 자료 · Snowflake 1

# permissions-revoke
테이블과 열 정의 확인SHOW TABLES · DESCRIBE TABLE · INFORMATION_SCHEMA접근 가능한 테이블과 열의 메타데이터를 반환합니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

tbi_lab과 필요한 생성·조회 권한을 준비하세요.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
SHOW TABLES IN SCHEMA tbi_lab;

예상 변화

접근 가능한 테이블과 열의 메타데이터를 반환합니다.

확인 방법

확인 방법
DESCRIBE TABLE tbi_lab.orders;

공식 자료 · Snowflake 1 · Snowflake 2

# inspect-objects
변수와 여러 문장 사용DECLARE · BEGIN · END · EXECUTE IMMEDIATE변수를 2에서 3으로 바꾸고 3을 반환합니다.

Snowflake · 선택한 제품에서 실행할 SQL 예제입니다. 이 페이지에서는 실행하지 않습니다. 공식 문서와 대조했으며 클라우드 계정에서의 실행은 검증하지 않았습니다.

실행 전 조건

Snowflake는 데이터베이스, BigQuery는 프로젝트가 선택되어 있다고 가정합니다. tbi_lab은 연습용 스키마 또는 데이터 세트입니다.

권한이 있는 연습 환경을 사용하세요. 이름·저장 위치·권한 대상을 확인하세요. 클라우드 실행과 저장에는 요금이 발생할 수 있습니다.

독립된 예제
EXECUTE IMMEDIATE $$
DECLARE n INTEGER DEFAULT 2;
BEGIN
  RETURN n + 1;
END;
$$;

예상 변화

변수를 2에서 3으로 바꾸고 3을 반환합니다.

확인 방법

환경의 결과·접근 설정·저장 위치를 예상 변화와 대조하세요.

BEGIN…END는 절차 블록이며 BEGIN TRANSACTION과 구별됩니다.

공식 자료 · Snowflake 1 · Snowflake 2

# script

JOIN 후 행이 늘어나는 이유를 직접 확인하기

한 고객의 주문이 3건이면 결합 결과에 그 고객이 3번 나타납니다. 주문 수와 SQL을 바꾸며 일치하는 행을 확인해 보세요.

입력 데이터 보기

SELECT 또는 WITH로 시작하는 읽기 전용 SQL 한 문장을 실행합니다. 테이블은 customers와 orders입니다. 최대 200행을 표시합니다.

예제를 선택하거나 SQL을 편집한 뒤 실행하세요.

이 SQL을 문장으로 읽기

먼저 FROM으로 고객 테이블 customers를 읽고, AS c로 이 쿼리 안에서 customers를 c라고 부릅니다.

다음으로 INNER JOIN으로 주문 테이블 orders를 결합합니다. AS o로 orders를 o라고 부르고, ON c.id = o.customer_id로 고객 번호 c.id와 주문의 고객 번호 o.customer_id가 같은 쌍만 남깁니다. 고객에게 주문이 여러 건이면 그 수만큼 행이 생깁니다.

SELECT로 고객 번호 c.id, 이름 c.name, 주문 번호 o.id를 가져옵니다. AS order_id는 o.id의 출력 열 이름을 order_id로 정합니다.

마지막으로 ORDER BY c.id, o.id로 고객 번호 오름차순, 같은 고객 안에서는 주문 번호 오름차순으로 정렬합니다.

c.id의 점 .은 테이블 별칭과 열 이름을 연결합니다. 쉼표 ,는 열이나 식을 구분하고 세미콜론 ;은 SQL 문장을 끝냅니다.

이해도 확인
LEFT JOIN 후 주문이 없는 Cara의 주문을 0건으로 세는 식은?

실행기는 SQLite를 사용하며 위의 Snowflake / BigQuery 선택과 별개입니다. 가상 데이터로 브라우저 안에서 실행합니다. 입력은 저장하거나 전송하지 않습니다. 첫 실행 시 외부 CDN에서 실행 엔진을 불러옵니다.

JOIN 종류 비교 · SQLite 공식 SELECT·JOIN 문서