공부/데이터베이스

[데이터베이스] SELECT

ghhong 2021. 10. 21. 16:28

SELECT, FROM, WHERE, (GROUP BY, HAVING), ORDER BY

순서가 중요-------------------------------------------->

 

ORDER BY ~ ASC(DEFAULT), DESC

SELECT * FROM MEMBER ORDER BY NAME DESC;

SELECT * FROM MEMBER WHERE NAME LIKE ‘%’ ORDER BY NAME DESC, HIT DESC;

 

집계함수 SUM, MIN, MAX, COUNT, AVG

 

SELECT WRITER_ID, COUNT(ID) COUNT

FROM NOTICE

--WHERE

GROUP BY WRITER_ID

ORDER BY COUNT DESC;

--작성자별 게시 수 많은 순으로 게시 수 내림차순

 

-- 작성순서 :

SELECT , FROM , WHERE , GROUP BY , HAVING , ORDER BY

-- 실행순서 :

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

: SELECT 에서 지은 별칭은 SELECT 이전 작업에서는 사용할 수 없다.

SELECT WRITER_ID, COUNT(N.ID) COUNT FROM NOTICE N

GROUP BY WRITER_ID

HAVING COUNT(N.ID) < 2;

 

순위함수

SELECT ROWNUM, ID, TITLE, WRITER_ID, REGDATE, HIT

FROM NOTICE

ORDER BY HIT;

-- ROWNUM이 섞인다. à ROW_NUMBER() OVER (ORDER BY HIT) : 정렬 후에 번호를 매긴다.

-- RANK() OVER (ORDERBY HIT) : 정렬 후에 등수를 매긴다.(값이 같으면 같은 공동등수)

-- DENSE_RANK() OVER (ORDER BY HIT) : 공동4등 이후에 5

-- ROW_NUMBER() OVER (PARTITION BY WRITER_ID ORDER BY HIT) : 그룹별 파티션 후 정렬 후에 그룹별 번호를 매긴다.

 

서브쿼리

SELECT * FROM MEMBER WHERE ROWNUM BETWEEN 1 AND 10

è 최신 등록순으로 정렬한 결과에서 상위 10명을 원하는 경우 ?

SELECT * FROM (SELECT * FROM MEMBER ORDER BY REGDATE DESC)

WHERE ROWNUM BETWEEN 1 AND 10;

SELECT * FROM MEMBER WHERE AGE >= (SELECT AVG(AGE) FROM MEMBER);

--평균나이 이상인 사람들