각각 다른 용도로 사용됩니다.
1. ' (Single Quotes)
문자열 리터럴을 정의할 때 사용합니다.
- 용도 : 문자열 값을 나타냅니다.
예시 :
SELECT *
FROM dataset_name.table_name
WHERE column_name = 'example_value';
설명 : 'example_value'는 문자열로 간주된다. 문자열 비교, 필터링 시 반드시 사용해야 한다.
2. " (Double Quotes)
식별자(Identifiers, 예: 컬럼명, 테이블명, 데이터셋명 등)를 정의하거나 예약어를 사용할 때 사용한다.
- 용도 : 컬럼명이나 테이블명이 공백, 특수 문자, 또는 SQL 예약어를 포함할 때.
대소문자를 구분하는 식별자를 사용할 때.
예시 :
SELECT "Column Name"
FROM "My Dataset"."My Table"
WHERE "Column Name" = 'value';
설명 : "Column Name": 공백이 포함된 컬럼명을 식별자로 지정.
My Dataset과 My Table도 이스케이프 처리로 사용.
차이점 요약
구분 ' (Single Quotes) " (Double Quotes)
주 용도 | 문자열 리터럴 | 식별자 (컬럼명, 테이블명 등) |
대소문자 구분 | 대소문자를 구분하지 않음 | 대소문자를 구분 (식별자가 민감한 경우) |
사용 위치 | 값 비교, 패턴 매칭, 텍스트 조건 | 예약어 또는 특수 문자가 포함된 이름 처리 |
예시 | 'text_value', 'example' | "Column Name", "SELECT", "TableName" |
잘못된 사용 예
- 문자열에 이중 따옴표 사용 : "example_value"는 식별자로 간주되어 오류 발생.
-
SELECT *
FROM dataset_name.table_name
WHERE column_name = "example_value"; -- 오류 발생 - 식별자에 단일 따옴표 사용 : 'column_name'는 문자열로 간주되어 오류 발생.
-
SELECT 'column_name'
FROM dataset_name.table_name; -- 오류 발생
올바른 사용 예
- 문자열 조건 필터링:
SELECT *
FROM dataset_name.table_name
WHERE column_name = 'text_value'; - 예약어가 포함된 식별자 사용:
-
SELECT "select"
FROM "dataset.table"; - 대소문자 민감한 식별자:
-
SELECT "CaseSensitiveColumn"
FROM dataset_name.table_name;
- Single Quotes (') : 문자열 리터럴에 사용.
- Double Quotes (") : 식별자나 예약어, 특수 문자 포함된 이름에 사용.
BigQuery의 표준 SQL은 이러한 구분을 엄격히 따르므로 올바르게 활용해야 한다.
빅쿼리에서 테이블명과 컬럼명이 동일할 때 발생하는 에러를 방지하기 위한 방법들
1. 별칭(Alias) 사용
별칭으로 이름 충돌 방지
sqlSELECT t.column_name AS renamed_column
FROM project.dataset.table_name AS t
2. 완전한 컬럼 경로
테이블 경로 포함해 컬럼 지정
sqlSELECT project.dataset.table_name.column_name
FROM project.dataset.table_name``
3. 뷰(View) 활용
충돌 테이블을 뷰로 재정의
sqlCREATE VIEW dataset.new_view AS
SELECT * FROM dataset.conflicting_table
4. EXCEPT 구문
충돌 컬럼 제외 후 새 이름으로 추가
sqlSELECT
* EXCEPT(conflicting_column),
conflicting_column AS renamed_column
FROM `project.dataset.table_name`
5. STRUCT 사용
컬럼을 STRUCT로 묶어 충돌 방지
sqlSELECT
(SELECT AS STRUCT * FROM `project.dataset.table_name`) AS table_struct
FROM `project.dataset.table_name`
위 방법들로 테이블명과 컬럼명 충돌 에러를 해결할 수 있다. 가장 좋은 방법은 처음부터 중복되지 않게 설계하는 것입니다
데이터로 가치를 만드는 Steven, Follow on LinkedIn
'데이터 분석가:Applied Data Analytics > SQL' 카테고리의 다른 글
WHERE, ORDER BY 차이점 (0) | 2025.03.18 |
---|---|
혼자공부하는 SQL 한빛미디어 (0) | 2025.03.09 |
SQL 심화학습 PV, UV (0) | 2025.01.13 |
그룹 함수 (0) | 2025.01.13 |
윈도우함수 (0) | 2025.01.13 |