[DevCourse] Day 11 - SQL 기초(1)

한상우·2023년 12월 5일
0

Data Science Devcourse

목록 보기
11/25

왜 SQL 인가?

  • SQL (Structured Query Language) : 관계형 데이터베이스를 사용하기 위한 표준 언어
  • DB에서 원하는 형태로 데이터를 가져올 수 있다
  • 효율적으로 데이터를 가져올 수 있다
  • 간단한 데이터 분석을 수행할 수 있다 -> 빠르고 쉽게 1차 데이터 가공 후 추가 업무 진행

DBMS(DataBase Management System)의 종류

  • 관계형 데이터베이스 (RDBMS == Relational DBMS)
    • 가장 일반적으로 많이 사용하는 형태의 DBMS
    • table 형태로 데이터를 관리
    • ex) MySQL, ORACLE, ...
  • 비관계형 데이터베이스 (NoSQL == Not only SQL)
    • 엄밀한 정의는 없으며, RDBMS의 범주에서 벗어난 DBMS를 뜻함
    • Key-value Store, Column-family, Document, Graph 등 여러 방식을 사용함
    • ex) cassandra, Mongo DB, ...
  • RDBMS vs NoSQL
    업로드중..

실습 환경

    1. MaraiDB를 설치하여 실습 진행
    1. sqlfiddle 사용
  • 일단은 2번을 사용하여 실습을 진행해보자

SQL :: 데이터 조회

  • MySQL 기본 Query
    • SELECT : 어떤 Col을 가져올거냐?
    • FROM : 어떤 데이터베이스에서 가져올거냐?
    • WHERE : 어떤 조건으로 Row를 가져올거냐(filtering)?
      • 편의성을 위해 "WHERE 1=1"과 같이 사용하고, 논리연산자를 사용하여 필터링도 가능
    • LIMIT : 최대 결과물 개수 지정 (상위 N개만 반환)
    • IN : 좌측 값이 우측 괄호안에 포함된 경우에만 반환
      • ex) ... AND category IN ('스포츠', '디지털', '식품')
    • LIKE : 특정 string의 패턴에 대해서 매칭하는 경우에만 반환. 다양한 연산자(%, _, 등)를 사용하여 범위 지정 가능
      • ex) ... AND name LIKE '%밥%' -> 밥주걱, 찬밥 (앞/뒤로 어떤 문자열이 포함되어도 상관 없음)
      • ex) ... AND name LIKE '밥%' -> 밥주걱 (밥으로 시작하며, 뒤에는 어떤 문자열이 포함되어도 상관 없음)
      • ex) ... AND name LIKE '%밥' -> 찬밥 (밥으로 끝나며, 앞에는 어떤 문자열이 포함되어도 상관 없음)
      • _기호의 경우 문자의 개수가 일치해야됨
      • ex) ... AND name LIKE '__밥' -> 해당 경우에는 찬밥이 반환되지 않음
    • BETWEEN A and B : A와 B 사이에 있는 값들을 반환해준다
      • 문자열에 대해서도 사용이 가능하다!
    • IS NULL : 값이 비어있는 경우(NULL)를 반환해준다

SQL :: 정렬과 집계

  • ORDER BY : 특정 col을 기준으로 정렬. "DESC"를 사용하여 내림차순 정렬 가능하며, 기본은 오름차순 정렬(ASC). 또한, 다른 col을 기준으로 2차 정렬도 가능

    • ex) ... ORDER BY price DESC, name -> price를 내림차순으로 1차 정렬 후 name을 기준으로 정렬
  • 집계함수 : count, sum, avg와 같은 종류가 있다. 이를 사용하여 새로운 col을 만들 수 있음

    • ex) SELECT sum(price) as sum_price, avg(price) as avg_price
  • GROUP BY : 특정 col을 기준으로 그룹을 만들어줌

  • HAVING : WHERE과 비슷하게 필터링을 진행하지만, HAVING의 경우는 그룹화를 진행한 후에 필터링을 한다

SQL :: 기본 함수들

  • CONCAT : col 이름을 하나의 문자열로 합쳐주는 함수
    -ex) SELECT CONCAT(category, '-', name) ...

  • SUBSTRING : col 이름의 일부분을 추출하는 함수
    -ex) SELECT SUBSTRING(col_name, start_index, length) ...

  • CHAR_LENGTH : 문자열의 길이를 반환하는 함수

  • ROUND : 반올림 함수

  • ABS : 절대값 함수

  • MOD : 나머지 함수 (%)

  • COALESCE : NULL 값 채워주는 함수

    • ex) SELECT COALESCE(purchase_date, 'Unknown') as purchase_date ... -> "purchase_date" col의 값중에 NULL 값이 있다면 'Unknown'으로 채워 넣어라
  • 주의사항

    • MySQL에서 Eq 연산자(==)는 "="이다
    • MySQL에서 NotEq 연산자는 "<>", "!="으로 표현된다
    • MySQL에서 and, or, not 연산자는 각각 "AND", "OR", "NOT"으로 표현된다
    • SQL 주석은 "--"으로 처리한다
    • SELECT 문에서 지정한 col들은 및에서 숫자로 표현이 가능하다
      • ex) SELECT name, price -> name에 접근하는 경우 1, price에 접근하는 경우 2 사용 가능
    • count(param)의 경우 param이 "1" 혹은 "*"인 경우 NULL 값을 포함하여 개수를 샌다
    • count(distinct param)의 경우 unique한 element를 count 한다
    • SQL string의 index는 1부터 시작한다
    • DBMS마다 Query가 조금씩 다르다
profile
개인 공부용 블로그입니다

0개의 댓글

관련 채용 정보