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을 기준으로 두 날짜 사이의 개월 수 반환
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%'