Google BigQuery

[강의 수강 2일차] select 절 이해하기

쭈경잉 2025. 5. 5. 12:22

SQL의 꽃이라고 할 수 있는 SELECT절! 분석을 하는 데에는 select 위주로 학습할 필요성이 있다. 

 

2일차. 데이터 탐색(SELECT, FROM, WHERE) 에 대한 이해 & 연습 문제 풀기

 

데이터가 여러 장소에 저장되어 있는 경우,

특정 테이블에 있는 데이터를 각각 추출 후 > 연결하는 개념으로 이해하면 된다.

 

이때 "집합"의 개념으로 생각하면 좋다. 

겹치는 부분에 대한 교집합 부분을 가져온다는 것이니 로직을 고려할 때 참고해두자.

이때 데이터 구조를 이해할 때 도식화를 해주면 이해하기 편하다. 

 

✅ 추출 및 테이블 조회 > Join > 원하는 데이터 추출을 통해 연결지어 보여주는 로직! 

(구글 빅쿼리는 1TB에 6달러가 과금되기에 보다 적은 용량으로 읽는 과정이 필요하다)

 

프로젝트 id, dataset, table 명시 기준
SELECT 
  * EXCEPT(eng_name)
  -- id AS pokemon_id, # AS는 별칭을 지어줄 때 사용한다
  -- kor_name,
  -- type1,
  -- total # command + / 하면 주석문 처리됨 
FROM `inflearn-bigquery-458812.basic.pokemon`
WHERE
  type1 = 'Fire'
 #infrlearn-bigquery : 프로젝트 id
 #basic : dataset
 #pokemon : table
 #'<프로젝트id>.<데이터셋>.<테이블>'
 #프로젝트 id는 꼭 명시할 필요는 없을 수도 있음(프로젝트가 단일인 경우)
 # 프로젝트를 여러 개 사용한다면 명시하는 것이 좋음 => 쿼리를 실행할 때 어떤 프로젝트인 지 확인하는 과정이 존재
 # 프로젝트 id을 제외하고 작성할 때는 '없어도 괜찮음
 # 데이터를 활용하고 싶은 목적이 있어야 어떤 컬럼을 선택할 지 알 수 있게 됨

 

✅ Point : 데이터를 활용하고 싶은 목적이 있어야 어떤 컬럼을 선택해 추출할 지 결정된다. 

✅ Except 는 특정 컬럼을 제외하고 추출할 때 활용한다. 

✅ AS 별칭 활용해줄 때는 따옴표가 필요없다. 실행되지 않는다.

(참고) 단축키 확인 가능, 우측 파란색 아이콘 자판기 쪽 클릭시 확인 가능

가독성 있는 쿼리

 

쿼리를 잘 읽을 수 있으려면 잘 작성해야 한다. 이는 이후 협업할 때 중요하며

문서화를 작업하는 "템플릿화" 과정 중에 하나이기에 처음부터 잘 정리해두는 게 중요하다!

 

이 부분은 습관의 차이도 있고 초반에 잘 해두면 나중이 편한 작업이라고 생각한다. 

 

SQL 문법

SQL 의 경우, FROM > WHERE > SELECT 의 로직으로 처리가 된다고 한다. 

 

SQL 쿼리 구조는 SELECT > FROM > WHERE 순이며 반드시 이 구조를 유지해야 한다. 

SELECT 컬럼 1, 컬럼 2, 컬럼 3

FROM 테이블 

WHERE <조건문> 

 

SELECT 연습 문제

여기서 핵심적으로 해야 할 부분은 "테이블에 있는 데이터 저장 형태를 떠올려야 한다" 

데이터셋 > 미리보기를 통해 테이블 속성과 값들을 확인할 수 있다

 

1. Trainer 테이블에 있는 모든 데이터를 보여주는 SQL 쿼리를 작성해주세요.

# Tranier 테이블에 어떤 데이터가 있는 지 확인해보기
# Trainer 테이블을 어디에 명시해야 할까? => FROM
# 필터링 조건이 있을까? => 모든 데이터 => 필터링 할 필요가 없음
# 모든 데이터 => 모든 데이터의 정의는? 모든 컬럼일 수 있음(추측) 쿼리 작성 
# => 애매하면 모든 데이터 정의 추출 요청한 사람에게 물어봐야 함 

SELECT 
  * 
FROM `inflearn-bigquery-458812.basic.trainer`

 

2. Trainer 테이블에 있는 트레이너의 name을 출력하는 쿼리를 작성해주세요.

# Tranier 테이블에 있는 트레이너의 name을 출력하는 쿼리 작성
# 필터링 조건이 있을까? 없다. 
# 트레이너 이름만 필요한 상황으로 name 컬럼만 추출하기  

SELECT  
  name
FROM `inflearn-bigquery-458812.basic.trainer`

 

3. Tranier 테이블에 있는 트레이너의 name, age를 출력하는 쿼리 작성해주세요.

# 3. Tranier 테이블에 있는 트레이너의 name, age을 출력하는 쿼리 작성
# 1) trainer 테이블 사용
# 2) 조건 설정 없음
# 3) name, age 컬럼 사용

SELECT  
  name,
  age
FROM `inflearn-bigquery-458812.basic.trainer`

 

4. Trainer의 테이블에서 id가 3인 트레이너의 name, age, hometown을 출력하는 쿼리를 작성해주세요.

# 1) trainer 테이블 사용
# 2) 조건 설정 : id가 3
# 3) 컬럼 : name, age, hometown
SELECT
  name, 
  age, 
  hometown
FROM
  basic.trainer
WHERE
  id = 3
# 현업에서는 이름, 나이를 알려주세요 => 컬럼의 의미를 파악해서 작성해야 함 
# => 어떤 컬럼을 요구하는 지, 어떤 컬럼을 봐야 하는 지?

 

5. pokemon 테이블에서 '피카츄'의 공격력과 체력을 확인할 수 있는 쿼리를 작성해주세요.

# 1) pokemon 테이블 사용
# 2) 조건 설정 : kor_name = 피카츄
# 3) 컬럼 : kor_name, hp(체력), attack(공격력)
SELECT
  kor_name,
  hp,
  attack
FROM
  basic.pokemon
WHERE
  kor_name = '피카츄'

 

*로 해서 모두 추출할 수 있지만 그러면 또 가공해야 하는 상황이 발생될 수 있으니

분석의 목적을 파악한 뒤 > 필요 데이터를 파악하는 과정이 꼭 필요한 것 같다. 

 

핵심은 필요한 정보만을 추출하고 활용하는 능력, 어떤 컬럼을 통해 어떻게 볼 수 있을 지 고민이 선행되어야 한다.

✏️ 이번 강의와 학습을 통해 느낀점
✅ 데이터 구조와 테이블 자체를 이해하고 어떤 컬럼이 왜 필요한 지 정의가 먼저이다.

 

💪🏻 Next to do 

☑️ 회사 내의 데이터셋 > 테이블 이해하기 / 각 연결성 확인하기

☑️ 집계를 통해 간단 추출하기 & 연습 문제를 통한 select절 익숙해지기

☑️ 회사 내 고객 통계 기반의 select 절 이해하기 => 다른 동료들이 짜놓은 쿼리 "왜 필요한 지" 관점에서 이해하기