[SQL] SQL 문제 풀면서 알게 된 것들

강지영·2023년 2월 23일
0

SQL

목록 보기
15/20
post-custom-banner

📌 JOIN 에서 WHERE vs ON

  • ON
    JOIN 을 하기 전 필터링을 한다
    (=ON 조건으로 필터링이 된 레코드들간 JOIN이 이뤄진다)

  • WHERE
    JOIN 을 한 후 필터링을 한다
    (=JOIN을 한 결과에서 WHERE 조건절로 필터링이 이뤄진다)


📌 FLOOR() vs ROUND() vs CEIL()

  • FLOOR 함수
    소수점 첫째 자리에서 버림하는 함수로,
    주어진 숫자와 가장 근접한 작은 정수를 출력
    ex) FLOOR(564.159) => 564

  • ROUND 함수
    ROUND 함수는 숫자를 각 자리에서 반올림해주는 함수
    ex ) ROUND(564.159, 2) => 564.18
    ROUND( 숫자, N ) => N자리 숫자 뒤에서 반올림

  • CEIL 함수
    소수점 첫째 자리에서 올림하는 함수로,
    주어진 숫자와 가장 근접한 큰 정수를 출력한다
    ex) CEIL(564.759) => 565

📌 OVER(PARTITION BY 컬럼 / ORDER BY 컬럼 / 세부 분할 기준)

ORACLE에서 OVER() 사용 시, GROUP BY나 서브쿼리없이 분석 함수(SUM, MAX, COUNT 등)와 집계함수(GROUP BY, ORDER BY)를 사용할 수 있다.
OVER을 이용하면 집계함수 사용시 서브쿼리를 사용하지 않아 쿼리 길이를 획기적으로 줄일 수 있다.

  • PARTITION BY 컬럼
    어느 컬럼을 기준으로 쪼갤지를 의미한다
    GROUP BY와 동일한 기능

📌 ORDER BY 적용 후 원하는 수만큼 조회(ROWNUM)

오라클은 LIMIT 키워드가 없다.
비슷한 역할을 하는 ROWNUM을 활용하면 된다.

FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY

하지만 문제가 있다!!
ROWNUM은 WHERE절에서 사용할 수 있어 ORDER BY보다 먼저 실행된다.
그래서 정렬 후 적용하려면 서브 쿼리를 활용해 먼저 수행한 후 원하는 개수의 데이터를 뽑아야 한다.

SELECT *
FROM
(
    SELECT *
    FROM SAMPLE
    ORDER BY AGE
)
WHERE ROWNUM <= 2
profile
Hello World!
post-custom-banner

0개의 댓글