데이터 분석가:Applied Data Analytics/SQL

빅쿼리에서 "(double quotes)와 '(single quotes) 차이는?

데이터분석 2025. 1. 16. 05:44

각각 다른 용도로 사용됩니다. 

 

' 와 "은 다르다.

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"

잘못된 사용 예

  1. 문자열에 이중 따옴표 사용 : "example_value"는 식별자로 간주되어 오류 발생.
  2. SELECT *
    FROM dataset_name.table_name
    WHERE column_name = "example_value"; -- 오류 발생
  3. 식별자에 단일 따옴표 사용 : 'column_name'는 문자열로 간주되어 오류 발생.
  4. SELECT 'column_name'
    FROM dataset_name.table_name; -- 오류 발생

올바른 사용 예

  1. 문자열 조건 필터링:
    SELECT *
    FROM dataset_name.table_name
    WHERE column_name = 'text_value';
  2. 예약어가 포함된 식별자 사용:
  3. SELECT "select"
    FROM "dataset.table";
  4. 대소문자 민감한 식별자:
  5. SELECT "CaseSensitiveColumn"
    FROM dataset_name.table_name;
  • Single Quotes (') : 문자열 리터럴에 사용.
  • Double Quotes (") : 식별자나 예약어, 특수 문자 포함된 이름에 사용.

BigQuery의 표준 SQL은 이러한 구분을 엄격히 따르므로 올바르게 활용해야 한다.

SMALL

빅쿼리에서 테이블명과 컬럼명이 동일할 때 발생하는 에러를 방지하기 위한 방법들

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