일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 스프링
- 김영한
- 기술 대비
- 서블릿
- 프로그래머스
- Join
- select
- MVC2
- JSP
- AOP
- order by
- 인텔리제이
- Model1
- Model2
- 세션
- 뉴렉처
- @Controller
- toUpperCase
- 자바
- 프레임워크
- 코테
- MVC
- SQL
- @RestController
- STS
- DDL
- 서브쿼리
- 코딩테스트
- 인프런
- 메이븐
- Today
- Total
Heestory
0602 NewLecture) 29강~33강, 서브쿼리, 집계함수 본문
29강) SELECT 구절과 정렬 (ORDER BY)
SELECT , FROM , WHERE , GROUY BY , HAVING, ORDER BY
*순서 꼭 암기하기
실행 순서
: FROM → CONNECT BY → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
정렬 순서 : ASC(오름차순), DESC(내림차순, 큰→작은순)
ORDER BY 기준 ASC,DESC;
Q.이름을 기준으로 역순으로 정렬해서 조회하시오.
SELECT NAME FROM NMEMBER ORDER BY NAME DESC;
기본값 : ASC
********************
30강 ) 집계함수와 GROUP BY
#.집계함수 : SUM, MIN, MAX, COUNT, AVG()
-이때 NULL 값은 계산 되지 않는다.
→ NULL이 들어가지 않는 값으로 COUNT & SELECT COUNT(*) FROM NOTICE;
Q.회원별 게시글 수를 조회하시오.
SELECT COUNT(ID) FROM NOTICE GROUP BY WRITER_ID;
작성자 별로 ID 카운팅
SELECT WRITER_ID, COUNT(ID) FROM NOTICE GROUP BY WRITER_ID;
작성자별 COUNT 하여 볼 수 있다.
SELECT WRITER_ID, TITLE, COUNT(ID) FROM NOTICE GROUP BY WRITER_ID; ☞ ERROR
TITLE과 같이 함께 집계 안된 TITLE을 쓰면 안됨.
SELECT WRITER_ID, COUNT(ID) FROM NOTICE GROUP BY WRITER_ID ORDER BY COUNT DESC;
Q2.회원별 게시글 수를 조회하시오. 단 게시글이 2미만인 레코드만 출력하시오.
SELECT WRITER_ID, COUNT(ID) FROM NOTICE GROUP BY WRITER_ID HAVING COUNT<=2;
SELECT WRITER_ID, COUNT(ID) FROM NOTICE WHERE COUNT(ID) <2 GROUP BY WRITER_ID;
WHERE 절에선 COUNT(집계함수)를 쓸 수 없다.
GROUP BY 이후부터 사용 가능
실행 순서
: FROM → CONNECT BY → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
************
ROW_NUMBER() : ORDER BY 정렬 후에 쓰임
SELECT ROW_NUMBER() OVER (ORDER BY HIT), ID, TITLE, WRITER_ID, REGDATE, HIT FROM NOTICE;
:HIT 순서대로 정렬 후 ROW_NUM를 통해 일련번호를 붙일 수 있다.
RANK() : 1,2,3,4,4,6,7,7 (등수 같을 때, 다음 번호로 넘어감)
DENSE_RANK() : 1,2,3,4,4,5,6,6 (등수 같을 떄 )
SELECT ROW_NUMBER() OVER (PARTITION BY WRITER_ID ORDER BY HIT), ID, TITLE, WRITER_ID, REGDATE, HIT FROM NOTICE;
- 작성자 별로 나뉜 후 HIT순으로 ROW_NUM 일련 번호 정렬
- 기본값 ASC PARTITION BY WRITER_ID
- PARTITION BY WRITER_ID ORDER BY HIT EDSC → WRITER_ID는 ASC 기본경 변경 없이 HIT만 DESC
33강) 부조회(서브쿼리)
실행 순서
: FROM → CONNECT BY → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
SELECT * FROM NMEMBER ORDER BY REGDATE DESC WHERE ROWNUM BETWEEN 1 AND 10;
→순서때문에 오류 발생, WHERE이 먼저
SELECT * FROM (SELECT * FROM NMEMBER ORDER BY REGDATE DESC)
WHERE ROWNUM BETWEEN 1 AND 10);
Q.나이가 30 이상인 회원 목록을 조회하시오.
SELECT * FROM NMEMBER WHERE AGE>=30;
Q2.평균 나이가 30이상인 회원 목록을 조회하시오.
SELECT * FROM NMEMBER WHERE AGE>=(SELECT AVG(AGE) FROM NMEMBER);
'개발(~국비) > SQL' 카테고리의 다른 글
0602 NewLecture)제약 조건 (0) | 2022.06.02 |
---|---|
0602 NewLecture)INNER JOIN,OUTER JOIN,SELF JOIN,UNION(34~39강) (0) | 2022.06.02 |
0602 NewLecture) 20~28강 (0) | 2022.06.02 |
0602 NewLecture) 정규식 표현 (0) | 2022.06.02 |
0601 NewLecture) 6강~17강 (0) | 2022.06.02 |