02-01) SQL기초-01

slow_starter·2025년 6월 30일
0

모두의연구소-DS4기

목록 보기
15/30
post-thumbnail

현업 때 약 2년 조금 안되는 기간 동안 SQL을 쓴 적이 있어서,
python보다는 좀 수월하긴 했다. 첫 회사에서 거의 90% 이상 R만 썼으니까.향후에 SQLD, SQLP 등도 도전해 봐야겠다.

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

  • 데이터 베이스 정의
    • 데이터가 모여져 있는 공간으로서 구조적인 방식으로 관리됨
  • 데이터 베이스 특징
    • 실시간 접근성 : 사용자 질의에 대해 즉시 처리
    • 지속적인 변화 : 데이터 삽입, 갱신, 불필요 데이터 삭제 등으로 최신화
    • 동시 공유 : 다수의 사용자가 같은 데이터 확인 가능
    • 내용 참조 : 데이터 물리적 위치가 아니라 사용자 요청 따라 조회
  • 관계형 데이터 베이스(RDB: Relational Data Base)
    • 2차원 테이블(행, 열)로 구성
    • 구조화된 데이터는 SQL로 조회
  • 테이블의 정의 및 특성
    • 관계형 데이터베이스에서 자료의 구조를 2차원의 표로 나타낸 것
    • 행/열의 형태로 구성 및 관리
    • Key 지정해서 데이터를 쉽게 조회
    • 행(row)을 record, 열(column)을 attribute(속성)이라고도 함

02. 스키마와 데이터 타입

  • 스키마 정의 : 데이터베이스의 구조(틀)를 정의하는 설계도로서
  • 스키마 특징 : 테이블, 뷰, 인덱스, 트리거, 제약조건 등을 포함
  • 스키마 예시
-- SQL로 정의
CREATE TABLE student (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    birth_date DATE
);
  • 데이터 타입 : 각 컬럼(열)에 들어가는 데이터의 종류와 형식을 정하는 것
  • 대표적인 데이터 타입
타입 의미 예시
INT 정수 1, 42, -100
FLOAT, REAL 실수 3.14, -2.71
VARCHAR(n) 가변 길이 문자열 (최대 n자) 'Alice', 'abc123'
CHAR(n) 고정 길이 문자열 'YES' → 'YES   '
TEXT 긴 문자열 긴 메모나 설명
DATE 날짜 2024-12-25
TIMESTAMP 날짜 + 시간 2024-12-25 14:23:00
BOOLEAN 참/거짓 TRUE, FALSE

03. 쿼리문 작성 기초

  • 1-2일차 교육 때는 python에서 sql 기초 문법을 연습하였다.
# 환경 설정
# !pip3 install pandasql
import os 
import pandas as pd 
from pandasql import sqldf
# pandasql을 전역 환경으로 지정
mysql = lambda q: sqldf(q, globals())

# 이후 필요한 데이터 불러오기....
  • SELECT문
    • SELECT * FROM 형태
      • 사용 시, 모든 컬럼 선택
    • 데이터가 너무 크면 limit/fetch등을 해서 개수 조절(SQL종류마다 다름)
# python환경에서 sql사용
# python이니 주석을 '#' 사용하지만 sql에서는 --로 주석처리
mysql("""

SELECT * 
FROM bik
limit 10 -- 데이터가 너무 커서 10개만 추출한다고 가정  
""")
# 해석 : bik 데이터의 모든 컬럼을 조회하되, row는 10개로 제한
  • WHERE문
    • WHERE은 FROM 이후 사용
    • WHERE절에는 연산자를 같이 사용
# python환경에서 sql사용
mysql("""
SELECT *
FROM bike
WHERE yr = 2012
limit 10
""")
  • 비교연산자

    구분 연산자 의미
    비교연산자 A = 'value' A와 'value'는 같다
    A !=(<>) 'value' A와 'value'는 같지 않다
    A > n A가 n보다 크다
    A >= n A가 n보다 크거나 같다
    A < n A가 n보다 작다
    A <= n A가 n보다 작거나 같다
  • 논리연산자

    • AND : 여러 조건 만족
    • OR : 조건 하나만 만족
    • NOT : 부정
    • IN : ~에 포함
  • 산술연산자

    • 데이터 값 계산시 +, -, *, / 사용 가능
    • 우선순위 () > *,/ > + - 순서(수학 연산 순서와 같음)

04. 다양한 데이터 활용법

  • Like
    • 조회 조건 값이 명확하지 않을 때, 주로 wildcard(%,_)와 사용
  • Wildcard
    • % : 조건을 포함하는 0개 이상 문자
    • _ : 한 글자를 의미
# 'weekday'에서 %ur%이 들어간 모든 경우 출력
mysql("""

SELECT *
FROM bike
WHERE hr = 0
AND weekday LIKE '%ur%' 

""")
  • 별칭사용하기
    • 예를 들어, EMP 테이블에 EMPLOYEE_ID가 있는 경우
mysql("""
SELECT EMPLOYEE_ID as E_ID
FROM EMP
""")
  • ORDER BY
    • 오름차순 : 컬럼명 뒤에 ASC 적음(기본이 오름차순)
    • 내림차순 : 컬럼명 뒤에 DESC 적음
  • DISTINCT
    • DISTINCT 키워드는 옆에 온 모든 컬럼을 고려하여 중복을 제거
    • 향후 집계함수 사용 시에도 DISTINCT 활용
      • 집계함수 : COUNT, SUM, AVG, MAX, MIN
  • IF
SELECT 
  name,
  score,
  IF(score >= 60, '합격', '불합격') AS result
FROM students;
  • CASE WHEN ~ THEN
SELECT 
  name,
  score,
  CASE 
    WHEN score >= 90 THEN 'A'
    WHEN score >= 80 THEN 'B'
    WHEN score >= 70 THEN 'C'
    WHEN score >= 60 THEN 'D'
    ELSE 'F'
  END AS grade
FROM students;
  • CAST(데이터 타입 변환)
  • 숫자를 문자열로 변환
SELECT CAST(123 AS VARCHAR) AS string_num;
-- 결과: '123'
  • 문자열을 숫자로 변환
SELECT CAST('3.14' AS FLOAT) AS float_num;
  • 문자열을 날짜로 변환
SELECT CAST('2024-12-25' AS DATE) AS holiday;
-- 결과: 2024-12-25 (DATE 타입)
profile
2025화이팅!

0개의 댓글