본문 바로가기
IT

SQL with 빅쿼리 - 데이터베이스, 테이블, SQL, 쿼리문, 조건문

by Dyudyu_Data 2026. 4. 20.
반응형

1. 데이터베이스와 테이블

1️⃣ 데이터(Data)란?

  • 데이터(Data)는 모든 기록들, 사실이나 정보를 나타내는 값을 의미
  • 아직 가공되지 않은 정보의 기본 요소
  • 숫자, 문자, 날짜, 이미지 등 모든 정보의 기본 값
  • 의미 있는 정보를 만들기 위한 기본 자료

2️⃣ 데이터베이스(Database)란?

  • 데이터베이스(DB)는 데이터가 모여져 있는 공간
  • 구조적인 방식으로 관리되는 데이터들의 집합
  • 여러 데이터를 체계적으로 모아서 조직적으로 저장하고 관리하는 시스템
  • 데이터를 쉽게 저장, 검색, 수정, 삭제할 수 있도록 정리해 놓은 데이터의 집합

3️⃣ 데이터베이스의 특징

1. 실시간 접근성 (Real-time Access)

  • 사용자가 요청하면 즉시 데이터를 검색하고 처리할 수 있습니다.

2. 계속적인 변화 (Continuous Evolution)

  • 데이터베이스는 데이터 추가, 수정, 삭제가 계속 이루어집니다.
  • 새로운 데이터의 삽입, 삭제, 갱신으로 항상 최신의 데이터를 유지합니다.

3. 동시 공유 (Concurrent Sharing)

  • 여러 사용자가 동시에 같은 내용의 데이터를 사용할 수 있습니다.

4. 내용에 의한 참조 (Content Reference)

  • 데이터의 행의 주소나 위치가 아니라 값을 기준으로 데이터를 검색할 수 있습니다.
  • 사용자가 요구하는 데이터 내용으로 데이터를 찾을 수 있습니다.

4️⃣ 관계형 데이터베이스(Relational Database)

  • 관계형 데이터베이스(RDB)는 데이터를 테이블(Table) 형태로 저장하고 서로 관계(Relation)로 연결하는 데이터베이스
  • 2차원 테이블(행, 열) 구성인 표 형태로 데이터를 관리하는 데이터베이스
  • 구조화된 데이터는 SQL을 통해 조회 가능
  • 일관성이 있고, 안정적이며 신뢰성이 있음

5️⃣ 관계형 데이터베이스 특징

  • 데이터를 테이블 형태로 저장
  • 행(Row)열(Column) 구조
  • SQL이라는 언어로 데이터 관리
  • 테이블 간 관계(Relationship) 존재

6️⃣ 테이블

  • 테이블은 데이터를 표 형태로 저장하는 구조(엑셀의 표와 비슷)
  • 관계형 데이터베이스에서 자료의 구조를 2차원의 표로 나타낸 것
  • 행/열의 형태로 구성 및 관리
  • Key를 지정함으로써 원하는 데이터를 빠르고 쉽게 찾아낼 수 있음

7️⃣ 행(Row), 열(Column)

행(Row)

  • 행(Row)은 ****한 개의 데이터 묶음(한 사람 또는 한 객체의 정보)을 의미
  • 하나의 대상에 대한 모든 데이터 묶음
  • 레코드(Record), 튜플(Tuple)이라고도 부름

열(Column)

  • 열(Column)은 데이터의 속성(항목)을 의미
  • 데이터의 속성 또는 항목
  • 속성(Attribute), 필드(Field)라고도 부름

8️⃣ 스키마(Schema)

  • 스키마(Schema)는 데이터베이스의 구조와 설계를 정의한 것
  • 테이블의 뼈대를 구성하는 것
  • 데이터베이스에서 어떤 테이블이 있고, 어떤 열이 있으며, 컬럼별로 저장할 수 있는 데이터 타입까지 명시해야함

스키마의 특징

  • 테이블 이름
  • 열(Column) 이름
  • 데이터 타입
  • 관계(Relationship)
  • 제약조건(Primary Key 등)

9️⃣ 데이터 타입(Data Type)

  • 데이터 타입(Data Type)은 각 열(Column)에 어떤 종류의 데이터를 저장할지 정하는 것
  • 데이터의 형태를 지정하는 규칙
  • 프로그래밍 관점에서 데이터를 식별하기 위한 분류
  • 문자열, 숫자, 날짜 등의 속성이 있음
  • 데이터 타입에 따라 사용하는 SQL 구문이 다름

대표적인 데이터 타입

  1. 숫자형 (Numeric)
타입 설명
INT 정수
FLOAT 실수
DOUBLE 큰 실수
  1. 문자형 (Character)
타입 설명
CHAR 고정 길이 문자
VARCHAR 가변 길이 문자
  1. 날짜형 (Date)
타입 설명
DATE 날짜
TIME 시간
DATETIME 날짜 + 시간
  1. 논리형 (Boolean)
타입 설명
BOOLEAN 참(True) 또는 거짓(False)

2. 데이터 다루기

파이썬 판다스 환경에서 SQL문을 돌릴 수 있도록 도와주는 라이브러리 설치

!pip install pandasql

쿼리문 작성하기(SELECT, FROM)

전체 컬럼 조회하기

  • SELECT 구문에 * 기호를 사용하면 해당 테이블의 모든 컬럼을 조회할 수 있습니다.
SELECT *
FROM 테이블명

특정 컬럼 조회하기

SELECT 컬럼명1, 컬럼명2, 컬럼명3
FROM 테이블명

전체 데이터 필터링하기(WHERE)

  • SQL에서 쿼리 결과 필터링은 중요한 기술입니다.
  • WHEREFROM절 다음에 위치합니다.
  • WHERE절에는 연산자를 같이 사용해야 합니다.
  • LIMIT 전체 컬럼에서 100개만 볼 수 있도록 필터, LIMIT은 가장 마지막에 넣어줘야함
SELECT 원하는 컬럼
FROM 테이블명
WHERE 조건절
LIMIT 100

비교 연산자

  • 같거나 같지 않다는 숫자형과 문자형 다 필터할 수 있음
  • 크거나 작거나를 비교할 때는 숫자형만 가능
비교 연산자 의미 예시
= 같다 점수 = 90
!= 또는 <> 같지 않다 점수 != 90
> 크다 점수 > 80
< 작다 점수 < 80
>= 크거나 같다 점수 >= 80
<= 작거나 같다 점수 <= 80

논리 연산자

  • AND : 모든 조건이 참일 때만 결과를 반환
WHERE [조건1] AND [조건2]
  • OR : 조건 중 하나라도 참이면 결과를 반환
WHERE [조건1] OR [조건2]
  • IN : 여러 개의 값 중 하나와 일치하는 데이터를 찾음
mysql("""

SELECT *
FROM bike
WHERE mnth IN ('Jan', 'Mar', 'May')

""")
  • NOT : 조건의 결과를 반대로 반환
mysql("""

SELECT *
FROM bike
WHERE mnth NOT IN ('Jan', 'Mar', 'May')

""")
  • IS NULL : NULL(값이 지정되지 않아 알 수 없는 값)값을 검색할 때 사용
mysql("""

SELECT *
FROM bike
WHERE weathersit IS NULL

""")
  • BETWEEN : 특정 범위의 값을 검색할 때 사용
mysql(""" 

SELECT *
FROM bike
WHERE dteday Between '2011-03-30' and '2011-03-31'

""")
연산자 설명
AND 모든 조건이 참
OR 하나라도 참
NOT 조건 반대
BETWEEN 범위 검색
IN 여러 값 중 하나
IS NULL NULL 값 검색

산술 연산자

  • +, -, *, / 를 사용하여 데이터값을 계산하고 할 때 사용
    • 우선 순위: () > *, / > +,-
  • SELECT, WHERE 문에서 사용
  • 문자열 또는 날짜타입 데이터에 산술 연산자를 적용하면 에러가 나거나 원하지 않는 값이 나올 수 있음
  • 산술 연산자를 통해 계산한 temp + 2 는 출력한 결과일 뿐, 새로운 컬럼을 만들어 데이터베이스에 추가한 것은 아님
mysql("""

SELECT temp, temp + 2, temp - 2, temp * 2, temp / 2
FROM bike

""")

3. 다양한 데이터 활용법

LIKE

  • 문자열 패턴을 검색할 때 사용
  • 주로 WHERE 절에서 사용하고 Wildcard와 함께 사용
  • Wildcard (와일드카드) : 문자 패턴을 표현하기 위해 사용하는 특수 문자
기호 의미
% 0개 이상의 모든 문자
_ 한 글자
# 홍으로 시작하는 이름
SELECT * 
FROM 학생
WHERE 이름 
LIKE '홍%'

# 이름에 길이 들어가는 경우
LIKE '%길%'

# 동으로 끝나는 이름
LIKE '%동'

# 앞에 한 글자가 있는 길동
# _ 의 개수에 따라 문자열의 개수를 정할 수 있음
LIKE '_길동'

별칭(Alias)

  • 임시로 컬럼명을 변경할 때 별칭을 사용
  • 기존의 컬럼명이 물리적으로 변경되는 것은 아님
  • 컬럼 이름이나 테이블 이름을 다른 이름으로 표시하는 것
  • 결과를 더 보기 쉽게 만들기 위해 사용
  • SELECT, FROM 절에서 사용
# 컬럼 별칭
SELECT 컬럼 AS 별칭
FROM 테이블

SELECT 이름 AS 학생이름, 점수 AS 시험점수
FROM 학생

# AS 생략 가능
SELECT 이름 학생이름
FROM 학생
# 테이블 별칭 - 테이블 이름이 길 때 짧게 줄여 사용
SELECT s.이름, s.점수
FROM 학생 AS s

데이터 정렬하기(ORDER BY)

  • 데이터 오름차순, 내림차순으로 정렬할 때 사용
  • 작성순서
SELECT
FROM 
WHERE
ORDER BY 
LIMIT
  • 오름차순 정렬 (ASC) : 기본값이며 작은 값 → 큰 값 순서로 정렬
SELECT * 
FROM 학생
ORDER BY 점수 ASC

# ASC는 기본값이라 생략가능
SELECT * 
FROM 학생
ORDER BY 점수
  • 내림차순 정렬 (DESC) : 큰 값 → 작은 값 순서로 정렬
SELECT * 
FROM 학생
ORDER BY 점수 DESC

# 첫번째 컬럼 기준으로 내림차순으로 정렬하고, 같은 값이 있다면 두번째 컬럼 기준으로 정렬
# 컬럼명말고 순서로도 정렬 가능
ORDER BY 1 DESC, 2

중복제거하기(DISTINCT)

  • 중복된 데이터를 제거하고 고유한 값만 조회할 때 사용
  • DISTINCT 키워드는 옆에 온 모든 컬럼을 고려하여 중복을 제거
  • 집계함수(COUNT, SUM, AVG, MAX, MIN)에도 DISTINCT를 사용
SELECT DISTINCT 컬럼
FROM 테이블

# 학과와 점수의 조합이 같은 경우만 중복 제거
SELECT DISTINCT 학과, 점수
FROM 학생
# 학과 중복 제거 후 기본 값인 오름차순 정렬
SELECT DISTINCT 학과
FROM 학생
ORDER BY 학과

조건문 활용하기

IF(조건, 참일 때 반환값, 거짓일 때 반환값)

  • 단일 조건문
  • 엑셀의 IF 함수와 동일한 역할
  • SELECT, WHERE 절에서 사용 가능
  • 조건이 참(TRUE)인지 거짓(FALSE)인지에 따라 다른 값을 반환하는 함수
  • pandasql에서는 if함수를 iif로 표현
iif(조건, 참일 때 값, 거짓일 때 값)
# 1990년 이전과 이후에 태어난 고객을 분리
# 데이터를 이해하기 쉽게 '고객명', '생년월일', '1990년 기준'이라는 별칭을 사용
mysql("""

SELECT customerName AS "고객명"
    , birthday AS "생년월일"
    , iif(birthday >= '1990-01-01' , '이후', '이전') AS "1990년 이전/이후"
FROM customers

""")

CASE WHEN ~ THEN

  • 다중 조건문
  • WHENTHEN은 한 쌍으로 존재
  • WHENTHEN은 여러 개가 존재 가능
  • ELSE는 앞의 조건들에 모두 해당하지 않았을 때 정해줄 기본 값
  • ELSE가 없고 조건에 맞는 값이 없으면 NULL값을 반환
CASE WHEN '조건1' THEN '조건1 반환값' 
         WHEN '조건2' THEN '조건2 반환값' 
         ELSE '만족하는 조건이 없을 때 반환 값'
    END
mysql("""
SELECT customerName, creditLimit
   , CASE WHEN creditLimit <= 50000 THEN '5만원이하'
           WHEN creditLimit <= 100000 THEN '10만원이하'
           ELSE '10만원초과'
   END AS '고객한도분리'
FROM customers

""")

데이터 타입 변환하기(CAST)

  • 데이터의 타입을 변환하는 함수
  • 실제 데이터 타입이 바뀌는건 아님
CAST(컬럼 AS 변환할 타입)
  • 변환할 타입에는 int, float, varchar(문자열), datetime(날짜) 등이 있음
타입 의미
INT 또는 INTEGER 정수
FLOAT 실수
VARCHAR 문자열
TEXT 문자열
DATETIME 날짜 + 시간
DATE 날짜
mysql("""

SELECT CAST(yr AS varchar) AS yr
FROM bike
LIMIT 5

""")

🚨 오늘의 이슈

함수들이 전부 대문자이길래 SQL은 이름처럼 대문자만 가능한가❓라는 의문이 생김

→ SQL의 키워드(keyword)는 보통 대소문자를 구분하지 않음

그럼 왜 대문자를 많이 쓰는가❓

→ 대문자를 쓰는 이유는 가독성 때문 코드가 훨씬 보기 쉬워서 관례처럼 쓰인다고 함