[DE] SQL(1)

박경국·2022년 1월 22일
0

Data Engineering

목록 보기
4/16
post-thumbnail

1. SQL이란?

  • 익숙한 python이나 엑셀을 쓰지 않고 SQL이라는 프로그램으로 데이터베이스를 관리하는 이유가 무엇일까요.

    • In-Memory
      • 파이썬에서 데이터를 다룰 때는 프로그램이 실행 중일 때만 존재합니다.
      • pandas로 아무리 table을 예쁘게 만들어도 python을 끄면 메모리에서 사라집니다. 데이터를 다시 꺼내오기 위해서는 python을 다시 켜고 변수를 실행해야 하는 번거로움이 있습니다.
    • File I/O
      • 엑셀 시트나 csv 같이 파일을 불러올 때 파일의 크기에 따라 읽어오는 데 많은 리소스가 듭니다. 큰 파일을 python에 임포트하는 것 자체가 하나의 관문이 됩니다.
      • 만약 용량이 큰 여러 개의 파일을 동시에 다뤄야 하는 등의 복잡한 작업을 한다면 그 난이도는 더 상승합니다.
  • 위와 같은 이유로 SQL 기반의 데이터베이스를 사용합니다. 그 말은 즉, SQL을 사용하면 위의 단점을 대부분 극복할 수 있다는 의미입니다.

  • SQL은 Structured Query Language의 약자로, 구조화된 쿼리 언어라는 의미입니다. '구조화'된 '쿼리' '언어'라는 단어를 하나씩 살펴보겠습니다.

1) Query

  • 쿼리를 직역하면 '질의문'입니다.
  • 검색할 때 입력하는 검색어도 일종의 쿼리입니다. 검색어를 입력하면 기존에 존재하는 데이터를 필터하듯이, 쿼리는 저장된 정보를 필터하기 위한 질문으로도 볼 수 있습니다.
  • SQL에서 쿼리는 데이터베이스에 쿼리를 보내 원하는 데이터만 가져올 수 있게 하는 언어입니다.

2) Structured

  • SQL에서 Structured는 테이블 간의 relation을 의미합니다.
  • 이전 포스팅에서 다뤘던 1:1, 1:N, N:N 관계 등의 구조화된 테이블을 사용하는 데이터베이스에서 활용할 수 있는 언어라는 의미입니다.
  • 반면에 데이터 구조가 고정되어 있지 않은 데이터베이스들은 NoSQL이라고 부릅니다.

3) Language

  • SQL의 언어는 기능에 따라 다음과 같이 분류됩니다.
  • Data Definition Language
    • DDL은 데이터를 정의할 때 사용하는 언어입니다.
    • CREATE나 DROP 등이 대표적입니다.
  • Data Manipulation Language
    • DML은 데이터베이스에 데이터를 저장할 때 사용하는 언어입니다.
    • DELETE, UPDATE 등이 대표적입니다.
  • Data Control Language
    • DCL은 데이터베이스 접근 권한과 관련된 언어입니다.
    • GRANT, REVOKE 등이 대표적입니다.
  • Data Query Language
    • DQL은 정해진 스키마 안에서 쿼리를 하는 언어입니다.
    • SELECT, WHERE 등이 대표적입니다.
  • Transaction Control Language
    • TCL은 DML을 거친 데이터 변경사항을 다루는 문법입니다.
    • COMMIT으로 데이터베이스에 작업 내용을 커밋하거나 ROLLBACK으로 커밋했던 내용을 다시 롤백할 수 있습니다.

2. SQL 기본 명령어

  • SELECT : 데이터셋에 포함될 특성들을 특정합니다.
  • FROM : 결과를 도출할 데이터베이스 테이블을 명시합니다.
  • WHERE : 선택적으로 원하는 데이터를 필터하는 쿼리문입니다.
  • ORDER BY : 돌려받는 데이터 결과를 정렬하는 쿼리문입니다.
  • LIMIT : 돌려받는 데이터 갯수를 정할 수 있는 쿼리문입니다.
  • DISTINCT : 유니크한 값들을 받는 쿼리문입니다.
  • JOIN : 두개 이상의 테이블을 서로 조인하는 쿼리문입니다.
    • INNER JOIN : 서로 공통된 부분으로 연결합니다.
    • OUTER JOIN : 한 쪽 데이터를 기준으로 테이블을 연결합니다.
      • LEFT JOIN : 왼쪽 테이블을 기준으로 연결합니다.
      • RIGHT JOIN : 오른쪽 테이블을 기준으로 연결합니다.
      • FULL JOIN : 공통된 부분과 상관없이 데이터를 연결합니다.
        *SELECT하는 메인 테이블이 왼쪽에 있는 테이블입니다.
  • 위의 쿼리를 사용한 예시입니다.
SELECT *            #customer 테이블의 모든 열을 출력
FROM customer c
JOIN invoice i      #invoice 테이블과 customerId로 INNER JOIN
ON c.customerId = i.cutomerId
WHERE i.Total > 100 #100달러 이상 주문한 invoice만 출력
ORDER BY i.Total #주문금액을 오름차순으로 정렬
LIMIT 10            #그 중 10개만 출력

0개의 댓글