SQL 기초

양시준·2022년 2월 14일
0

SQL 레벨업

목록 보기
2/10
post-thumbnail

2장 SQL 기초

SQL 레벨업이라는 도서를 정리한 내용입니다.
2장의 내용은 검색을 통해 쉽게 찾을 수 있기 때문에 2장에서 다루는 것과 중요하다고 생각되는 부분만 작성하였습니다.

SELECT 구문

SQL은 Structured Query Language(구조화 질의 언어)의 약자다.
이름에서 알 수 있듯이 검색은 DB의 핵심이 되는 처리이다.
다른말로 질의(query), 추출(retrieve)이라고 부른다.

SELECT 구와 FROM 구

검색을 위해 사용하는 SQL 구문을 SELECT 구문이라고 한다.

기본적으로 SELECT 구와 FROM 구로 이루어저 있다.

여기서 SQL의 특징을 알 수 있는데 데이터를 '어떤 방법으로' 선택할지 쓰여있지 않다는 것이다.
어떤 데이터가 필요한지 정하기만 하면 DBMS가 프로그래밍에서 절차 지향 같은 부분은 알아서 처리해준다.

WHERE 구

WHERE 구를 사용해 추가적인 조건을 지정한다.

  • WHERE 구에서 사용하는 연산자 (생략)

NULL은 데이터 값이 아니므로, 데이터에 사용하는 연산자(=)를 사용할 수 없다.

SELECT 구문은 절차 지향형 언어의 함수와 동일한 역할을 한다.
SELECT 구문의 입력과 출력 자료형은 테이블 뿐이다. 이러한 성질 때문에 폐쇄성(closure property, 관계가 닫혀있다는 의미)을 띈다고 부른다.

GROUP BY 구

GROUP BY 구를 사용해 합계, 평균과 같은 집계 연산을 수행한다.

GROUP BY 구문을 사용해 여러 그룹을 만들고 숫자 관련 함수를 이용해 집계한다.

  • GROUP BY 구에서 사용하는 집계함수 (생략)
    GROUP BY 구는 "GROUP BY ()"(생략 가능)를 이용해 테이블 전부를 하나의 그룹으로 만들 수 있다.

HAVING 구

GROUP BY를 이용해 구한 그룹에 조건을 건다.

WHERE 구는 '레코드'에 HAVING 구는 '집합'에 조건을 지정한다.

ORDER BY 구

명시적으로 순서를 정할 때 ORDER BY 구를 사용한다.

ASC(ascending order, 오름차순), DESC(descending order, 내림차순)을 키워드로 사용해 차순을 정한다. (명시하지 않으면 ASC)

SELECT 구문을 DB에 저장하는 것을 (View)라고 한다.

다만 테이블과 달리 내부에 데이터를 저장하지 않는다. 뷰는 어디까지나 'SELECT 구문'을 저장한 것이다.
따라서 SELECT 구문의 FROM 구에 뷰가 있다면 내부적으론 SELECT 구문이 중첩(nested)된 상태이다.

서브쿼리

SELECT 구문의 FROM 구에 직접 지정하는 SELECT 구문을 서브쿼리(subquery)라고 부른다.

IN 내부에서 서브쿼리를 사용하면 데이터가 변경되어도 따로 수정할 필요가 없다는 점에서 효율적이다.

조건 분기, 집합 연산, 윈도우 함수, 갱신

SQL과 조건 분기

일반적인 절차 지향형 프로그래밍 언어에는 if, switch 조건문 등이 있다.

SQL은 프로그래밍 언어와 달리 절차적으로 기술하지 않기 때문에 '문장'이 아닌 '식'을 기준으로 조건 분기를 정한다.
SQL에서 조건 분기를 실현하는 기능이 CASE 식이다.

CASE 식은 절차 지향의 switch 문과 거의 동일한 방식으로 작동한다.

CASE 식의 강점은 '식'이라는 것이다. 따라서 SELECT, WHERE, GROUP BY, HAVING, ORDER BY 구와 같은 곳 어디에나 작성할 수 있다.

SQL의 집합 연산

SQL에는 테이블을 활용해 집합 연산을 할 수 있다.

UNION

UNION을 이용해 테이블 간 합집합을 구할 수 있다.
UNION은 합집할을 구할 때 중복을 제거한다. (INTERSECT, EXCEPT도 동일함)

UNION ALL을 이용하면 중복을 제외하지 않는다.

INTERSECT

INTERSECT를 이용해 테이블 간 교집합을 구할 수 있다.

EXCEPT

EXCEPT를 이용해 테이블 간 차집합을 구할 수 있다.

UNION, INTERSECT와 달리 테이블의 순서에 따라 결과가 달라진다.

윈도우 함수

'집약 기능이 없는 GROUP BY 구'이다. GROUP BY 구는 자르기(개인적으로는 나누기라는 표현을 좋아함)와 집약이라는 2개의 기능을 가진다.

기본적인 구문은 집약 함수 뒤에 OVER 구를 작성하고 PARTITION BY 혹은 ORDER BY 구를 입력하는 것이다.

  • 윈도우 전용 함수 (생략)

트랜잭션과 갱신

위에서 말했듯이 DB는 검색 기능이 주가 되는 만큼 SQL의 검색 기능은 복잡하지만 반대로 SQL의 갱신 기능은 간단하다.

기본적으로 SQL의 갱신 작업은 아래와 같이 분류한다.

  1. 삽입(insert)
  2. 제거(delete)
  3. 갱신(update)

1과 3을 합친 MERGE라는 기능도 있지만 일반적으로는 3가지로 분류한다.

데이터 삽입, 제거, 갱신

  • INSERT로 데이터 삽입 (생략)
  • DELETE로 데이터 제거 (생략)
  • UPDATE로 데이터 갱신 (생략)
profile
야크 털 깎기와 러버덕 디버깅을 좋아하는 개발자

0개의 댓글