SELECT 구절
SELECT / WHERE/ GROUP BY / HAVING/ ORDER BY
내장함수
-문자열관련함수
-변환함수
-날짜함수
-NULL 관련함수
-집계함수
SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY , ASC ,DESC (무조건외우기) |
- 집계한결과쓸때는 HAVING
- FROM 에는 격자형태 결과물이오면된다
- ROWNUM: 결과집합에 대한 가상의 순번
- 쿼리문 작성순서와 실행순서가 다르다.
WHERE절과 HAVING절의 차이
|
실행순서 :
WHERE절끝나면 ROWNUM생기고 정렬(번호를붙이고 정렬하니까 순서엉망)
정렬하고나서 번호를 붙여야 한다. 정렬을 끝내고(안쪽FROM) 로우넘버를 다시붙이자
NOTICE 테이블에서 제목에ㅔ 'a'가 들어간것을 등록일 날짜기준으로 내림차순 조회한것을 n 이라고 명명 n을 ROWNUM으로 1~5개 만 출력 |
숫자함수
- ABS(n) : n의 절대값을 반환
- CEIL(n) , FLOOR(n) : n보다 같거나 큰 정수를 반환한다
- ROUND(n,i) : n을 소수점 i+1번째 자리에서 반올림
- TRUNC(n,i) : n을 소수점 i+1번째 자리에서 버림
- POWER(n1,n2) : n1을 n2번 거듭제곱한 결과
- MOD(n1,n2) : n1을 n2로 나눈 나머지 값
문자함수
- INITCAP(char) : char의 첫문자만 대문자 나머지 소문자
- LOWER(char) : char를 소문자로
- UPPER(char) : char을 대문자로
- CONCAT(char1, char2) : char1 char2를 붙인다.
- SUBSTR(char, pos,len) : char의 pos번째 문자부터 len길이만큼 잘라서 반환.
- LTRIM: char1의 좌측부터 char2를 찾아서 삭제후 반환 (한번만 삭제한다.)
- RTRIM: LTRIM과 비슷. 오른쪽부터 검색을 진행
- LPAD(char1,n,char2) : char1의 왼쪽부터 char2를 채운다. n은 연산후 총 문자열 자릿수를 의미한다.
- RPAD(char1,n,char2) : LPAD와 비슷 , 오른쪽부터 진행
- REPLACE(char1,char2,char3) : char1에서 char2를 찾아 char3을 반환한다. LTRIM과 달리 여러번 진행한다.
- LENGTH(char) : char의 길이
- DECODE(input1, search1 , result1, search2, .. ,default) : input1을 search1과 비교하여 같은 값이면 result1을 반환하고, 같지 않을 경우 search2를 비교하는 방식을 반복한다. 최종적으로 같은 값이 없으면 default를 반환한다.
날짜함수
- SYSDATE : 현재 시스템 일자 반환
- ADD_MONTHS(date,int) : date에 int 수 만큼 월을 더한 날짜 반환
- MONTHS_BETWEEN(date1,date2) : date1을 기준으로 두 날짜 사이의 개월 수 반환
- LAST_DAY(date) : date의 월말일 반환
- ROUND(date, format) : format에 따라 반올림한 날짜 반환
- TRUNC(date,format) : format에 따라 잘라낸 날짜 반환
- NEXT_DAY(date,char) : date기준으로 char에 명시한 요일의 날짜를 반환
변환함수
- TO_CHAR(char or date , format) : 숫자나 날짜를 format에 맞는 문자로 변환 ex) to_char(sysdate , 'YYYY/MM/DD'), to_char(12345, 'L9,999.99')
- TO_NUMBER(char,format) : data를 format에 맞는 숫자로 변환
- TO_DATE(char, format) : char를 format에 맞는 날짜로 변환
- TO_TIMESTAMP(char,format) : char을 format에 맞는 타임스탬프로 변환
NULL 관련 함수
- NVL(input1,input2) : input1이 null이면 input2를 반환
- LNNVL(조건식) : 조건식의 결과가 false이거나 unknown이면 true를 , true이면 false를 반환한다.
- NULLIF(input1, input2) : input1과 input2가 동일한 값이면 null을 아니면 input1을 반환한다.
SELECT * FROM NOTICE WHERE ROWNUM BETWEEN 1 AND 5;
SELECT SUBSTR ('HELLO',1,3) FROM DUAL;--인덱스는0부터,3개 HEL
SELECT SUBSTR ('HELLO',3) FROM DUAL; --3부터 나머지 LLO
SELECT * FROM MEMBER ORDER BY NAME DESC;--이름을 기준으로 역순으로 정렬해서조회
SELECT * FROM MEMBER WHERE NAME LIKE '박%' ORDER BY NAME;--회원중에서 박씨성을 가진 회원을 조회하시오, 오름차순으로정렬(ASC생략가능)
--이름이 같을경우 닉네임으로 정렬하자 2차정렬이필요할때
SELECT * FROM MEMBER ORDER BY NAME ASC, NICNAME DESC;--이름오름차순, 이름이같다면 닉네임으로 내림차순정렬
--일별,월별조회수,회원수집계 등 ->집계함수,분석
SELECT COUNT(*) FROM NOTICE; --게시글의 전체수조회. NULL이들어간건 제외된다.되도록 식별자를넣기
SELECT COUNT(ID) FROM NOTICE;
SELECT COUNT(ID),WRITER_ID FROM NOTICE GROUP BY WRITER_ID;--작성자별 게시글 수 조회
SELECT COUNT(ID),WRITER_ID FROM NOTICE GROUP BY WRITER_ID ORDER BY COUNT(ID) DESC, writer_id ASC;
UPDATE MEMBER SET GENDER = '여성' WHERE ID =21;
COMMIT;
SELECT COUNT(ID),GENDER FROM MEMBER GROUP BY GENDER;--ID를 통해서 개수를 구한다.성별기반. 성별로 카운트조회
UPDATE MEMBER SET BIRTHDAY = 19881215 WHERE ID = 21;
COMMIT;
--생년월일에서 년도만잘라내서 YEAR이라는 컬럼을만들고 년생을 오름차순으로정렬
SELECT COUNT(ID),SUBSTR(BIRTHDAY, 1, 4) YEAR
FROM MEMBER
GROUP BY SUBSTR(BIRTHDAY, 1,4)
ORDER BY YEAR ASC;
--회원별 게시글수를 조회(단,게시글 수가 2미만 레코드만출력) 집계함수조건 HAVING
SELECT COUNT(ID),WRITER_ID FROM NOTICE GROUP BY WRITER_ID HAVING COUNT(ID) < 2;
--최신등록순으로 정렬한 결과에서 상위 열명을 원하는 경우조회
SELECT*FROM ( SELECT*FROM MEMBER ORDER BY REGDATE DESC) WHERE ROWNUM BETWEEN 1 AND 10;
--나이가 30이상인 회원목록조회(순서를 바꾸거나 먼저계산해서 실행)
SELECT*FROM MEMBER WHERE AGE > = (SELECT AVG(AGE) FROM MEMBER);
--보조쿼리,서브쿼리 먼저실행 안쪽에별칭만들어 쓰기
SELECT * FROM (SELECT ROWNUM NUM, NOTICE.* FROM NOTICE)
WHERE NUM BETWEEN 6 AND 10;
--등록일자를 기준으로 역정렬, N:결과집합이름, TITLE에 A가들어간것
SELECT * FROM (
SELECT ROWNUM NUM, N.*
FROM (
SELECT *
FROM NOTICE
WHERE TITLE LIKE '%a%'
ORDER BY REGDATE DESC
) N
)
WHERE NUM BETWEEN 1 AND 5;
--where title like'%a%'
더보기
집계한결과쓸때는 HAVING
FROM 에는 격자형태 결과물이오면된다
SELECT * FROM NOTICE ORDER BY REGDATE DESC;
SELECT * FROM (SELECT ROWNUM NUM, NOTICE.* FROM NOTICE) WHERE NUM BETWEEN 1 AND 5;
ROWNUM: 결과집합에 대한 가상의 순번
최신등록순으로 정렬한 결과에서 상위 열명을 원하는 경우조회하려면 ?
1.잘못된 쿼리 : ROWNUM이 순차적이지않다.
2. 순차적이지않은 ROWNUM에서 5개를 뽑은셈
쿼리문 작성순서와 실행순서가 다르다.
실행순서 :
WHERE절끝나면 ROWNUM생기고 정렬(번호를붙이고 정렬하니까 순서엉망)
정렬하고나서 번호를 붙여야 한다. 정렬을 끝내고 로우넘버를 다시붙이자
SELCT * FROM (SELECT ROWNUM NUM, N.* FROM ( SELECT * FROM NOTICE ORDER BY REGDATE DESC) N) WHERE NUM BETWEEN 1 AND 5;
'2021 Newlecture > Servlet & JSP' 카테고리의 다른 글
INNER JOIN / OUTER JOIN / 3개 테이블 조인 (0) | 2021.05.10 |
---|---|
(JSP) 수정한내용 저장 / 등록페이지 / 삭제 (0) | 2021.05.07 |
(JSP) 상세페이지내 수정 / sendRedirect/ service.get(id)으로 기존데이터가져오기 (0) | 2021.05.06 |
(JSP) 페이지연결 , 상세내역 (0) | 2021.05.04 |
정규식 (0) | 2021.04.29 |
IS NULL; BETWEEN 0 AND 2; NOT IN (0,2,7); LIKE '%i%'; (0) | 2021.04.28 |
엔티티만들기 / 성능향상을 위한 연결종료/ (0) | 2021.04.27 |
set / map/ list (0) | 2021.04.26 |