SJ_Koding

SQLD 대비 (7) - SQL 문법 및 라이브러리_2 본문

SQL/SQLD

SQLD 대비 (7) - SQL 문법 및 라이브러리_2

성지코딩 2023. 11. 13. 23:06
 

SQLD 대비 (6) - SQL 문법 및 라이브러리_1

SQLD 대비 (5) - 관계형 데이터베이스 (RDBMS) 과목 II 시작 ! 노랭이 책으로 과목 I을 모두 풀고 오답정리까지 마무리했다. SQLD 대비 (4) - 성능 데이터 모델링 및 정규화/반정규화, 데이터베이스 2023.11.

sjkoding.tistory.com

이전 글과 이어지는 글입니다. 해당 정리글은 아래의 유튜브 영상을 참고하여 만들었습니다. 문제 시 삭제하겠습니다.
빨간색 형광펜은 강의에서 강조한 부분, 노란색 형광펜은 추가 서치로 내용을 '직접' 보강한 부분입니다.

Group by

  • Group by는 집합(테이블) 내에서 하나 혹은 여러 행을 그룹화 하여 집계함수(SUM, MIN, AVG등)를 이용하는 것
  • Having 절을 이용하여 group by 된 상태에서 조건 추가 가능
  • 그룹화 전
SELECT customer_id, avg(amount) 평균, sum(amount) 합계
FROM customer_orders
GROUP BY customer_id

그룹화 후

Having

  • Having은 group by와 같이 다니는 조건절이다.
  • Where 절은 group by 하기 전 조건에 해당하고, having은 group by 연산 이후 조건이다.
SELECT customer_id, avg(amount) 평균, sum(amount) 합계
FROM customer_orders
GROUP BY customer_id
Having avg(amount) > 100

분기문

1. VNL (MySQL에서 COALESCE)

  • NVL은 null인 값을 제거 하기 위한 일반 함수이다.
  • Null 대신 특정 숫자나 다른 값을 출력 할 수 있다.
  • NVL(값, 'null일 때 출력 값')

2. VNL2

  • NVL2는 NVL에 의해 파라미터가 하나 더 있다.
  • NVL(값, 'null이 아닐 때 출력 값', 'null일 때 출력 값')
SELECT id, name, nvl(bonus_type, '해당없음') as NVL_, nvl2(bonus, 보너스 대상자', '미 대상자') as NVL2_
from SALARY

3. DECODE

  • Decode는 한 컬럼에 여러가지 조건을 적용 하여 출력 할 때 사용한다.
  • Decode(값, 조건1, 결과1, 조건2, 결과2, ...)
SELECT id, name, decode(bonus_type, 'AB', '1등급', 'AC', '2등급', 'FA', '4등급', '미 대상자' as decode_
FROM SALARY

4. CASE WHEN

  • 여러가지 컬럼 및 조건으로 다양한 조건을 적용해야 할 때 사용한다.
  • 하나의 컬럼 값으로 비교 할 때와 여러 컬럼으로 비교 할 때와 문법을 두가지로 나눠 사용할 수 있다.
  • 나열된 순으로 조건 비교를 한다.
/* 첫 번째 방법: SEARCHED_CASE_EXPRESSION */
SELECT ID, NAME, CASE bonus_type WHEN 'AB' THEN 1등급 WHEN 'AC' THEN '2등급' END as case_
FROM salary

/* 두 번째 방법: SIMPLE_CASE_EXPRESSION */
SELECT CASE WHEN bonus_type = 'AB' THEN '1등급' WHEN bonus_type = 'AC' THEN '2등급' END as case2_
FROM salary

rownum, rowid, with문

1. rownum

  • Oracle에서 출력 rows를 설정하는 기능이다.
  • MSsql 에서는 top() 기능으로 대체 하여 사용 할 수 있다.
/* ORACLE */
SELECT *
FROM salary
WHERE rownum <3

/* MSsql */
SELECT top(2) *
FROM salary

2. rowid

  • Oracle에서 row가 생성 될 때 부여되는 row의 고유 id.
  • Rowid로 조건을 입력할 수도 있음
  • 데이터 객체번호, 상대적파일번호, 블록번호, 행번호의 조합
SELECT rowed, *
FROM salary

3. with문

  • 일종의 임시적인 view 테이블(데이터가 저장되지 않은 테이블)이다.
  • 특정 sql 블록의 재사용성을 위해 사용된다.
  • SQL 실행 속도에 유리하게 작용할 수 있다.
  • 여러 번 사용될수록 유리하다.
  • 하나의 SQL문에서 여러 개의 with문을 사용할 수 있다.
WITH sql1 as (SELECT *
FROM salary
WHERE rownum < 3) ,
sql2 as (select *
FROM salary
WHERE rownum < 2)
SELECT * FROM sql1 UNION all
SELECT * from sql2