SELECT 문 구절/ 집계함수 / 순위함수 / 서브쿼리(부조회)

JiyN·2023년 9월 7일
0
post-thumbnail
post-custom-banner

SELECT 문

작성 순서

  1. SELECT
  2. FROM: 데이터 가공처리를 위한 기본적인 구조를 연산하는 공간
  3. WHERE: 레코드 필터링
  4. GROUP BY: 집계
  5. HAVING: 집계된 결과를 필터링
  6. ORDER BY: 정렬

실행 순서

  1. FROM
  2. CONNECT BY
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. SELECT
  7. ORDER BY

정렬순서

ASC(오름차순), DESC(내림차순)

<내림차순>
SELECT * FROM MEMBERS ORDER BY NAME DESC; 

<오름차순>
SELECT * FROM MEMBERS ORDER BY NAME ASC;
SELECT * FROM MEMBERS ORDER BY NAME; 

ORDER BY 한 순서 내에서 또다른 순서가 필요한 경우

SELECT * FROM MEMBERS ORDER BY AGE(컬럼1) DESC, REGDATE(컬럼2) DESC;

집계함수 / GROUP BY

  • 집계함수 : GROUP BY 이하의 실행 순서에서만 사용 가능
    SUM, MIN, MAX, COUNT, AVG
SELECT COUNT(*) FROM NOTICE;
SELECT WRITER_ID, COUNT(ID) CNT NOTICE GROUP BY WRITER ID; | 작성글 개수
SELECT WRITER_ID, COUNT(ID) CNT NOTICE 
GROUP BY WRITER ID 
ORDER BY COUNT(ID) DESC;

회원별 게시글 수가 2 이하인 레코드의 게시글 수

SELECT WRITER_ID, COUNT(ID) CNT FROM NOTICE
GROUP BY WRITER_ID
HAVING COUNT(ID) <= 2;

순위함수

SELECT ROWNUM ~~ + ORDER BY 시, ROWNUM이 WHERE 절 순서에서 만들어짐, ORDER BY 와 충돌
ROW_NUMBER() 함수 사용

SELECT ROWNUM, 컬럼 1, 컬럼2 , ...
FROM 테이블
ORDER BY 컬럼 5; > ROWNUM이 섞임
함수설명
ROW_NUMBER() OVER(ORDER BY 정렬힐 값) ~정렬된 상태에서 ROWNUM
RANK() OVER(ORDER BY 정렬할 값) ~등수 (4등 4등 6등)
DENSE_RANK() OVER(ORDER BY 정렬할 값) ~겹치는 등수가 있을 경우, (4등 4등 5등)
RANK() OVER(PARTITION BY 기준값 ORDER BY 정렬할 값) ~작성자를 기준으로 정렬값을 정렬(작성자별 정렬값들 정렬)

서브쿼리

구절의 작성 순서를 바꾸는 경우 오류 발생 > 서브쿼리 사용

SELECT * FROM (SELECT * FROM MEMBERS ORDER BY REGDATE DESC) >(서브쿼리)
WHERE ROWNUM BETWEEN 1 AND 10;
  • Q. 평균나이 이상인 회원 목록 조회
    SELECT * FROM (SELECT AVG(AGE) FROM MEMBERS) AVG_AGE
    WHERE AGE >= AVG_AGE;
profile
공부블로거
post-custom-banner

0개의 댓글