QUERY 안의 QUERY 한 개의 행(ROW, RECORD, 한 사람에 해당하는 데이터)에서 결과 값이 반환되는 QUERY
서브 칼럼이 *이 아닌 이상 서브 칼럼이랑 외부 칼럼이 같아야 한다. 사용 : 테이블이 있는데 걸러내서 산출하고 싶을 때
현재까지 배운 종류
- SELECT 단일 ROW 단일 COLUMN (산출되는 데이터는 한 개, 컬럼도 한 개) - FROM 다중 ROW 다중 COLUMN - WHERE 다중 ROW 다중 COLUMN(제일 많이 사용)
SELECT절
-- hr 스키마
SELECT employee_id, first_name,
(SELECT first_name -- 단일 COLUMN
FROM employees
WHERE employee_id = 100) -- 단일 ROW
FROM employees;
SELECT first_name,
(SELECT SUM(salary) FROM employees),
(SELECT AVG(salary) FROM employees)
FROM employees;
-- 평균월급에 내 월급이 얼마인지 비교
SELECT first_name, salary, (SELECT AVG(salary) FROM employees)
FROM employees
WHERE department_id = 30;
FROM절
-- 100번 부서에 있는 사람만 걸러내서 테이블을 만듯 것
-- 그테이블의 값을 받아낸 것
-- 별칭으로도 내보낼 수 있다.
SELECT EMPNO, NAME ,SAL
FROM ( SELECT employee_id EMPNO, first_name NAME ,salary SAL
FROM employees
WHERE department_id = 100)
WHERE SAL > 8000;
-- 부서번호가 50번, 급여가 6000이상인 사원
SELECT employee_id, first_name, last_name, salary
FROM ( SELECT *
FROM employees
WHERE department_id = 50)
WHERE salary >= 6000;
-- 업무별 급여의 합계, 인원수, 사원명, 월급
SELECT e.employee_id, e.first_name,j.급여합계, j.인원수
FROM employees e, (SELECT job_id, SUM(salary) 급여합계, COUNT(*) 인원수
FROM employees
GROUP BY job_id) j;
WHERE절
-- 평균 급여보다 많은 사원
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary)
FROM employees);
-- 부서 90인 사원의 업무명
SELECT job_id, first_name, department_id
FROM employees
WHERE job_id IN (SELECT job_id
FROM employees
WHERE department_id = 90);
-- 부서별로 가장 급여를 적게 받는 사월의 급여와 같은 급여를 받는 사원
SELECT first_name, salary, department_id
FROM employees
WHERE salary IN (SELECT MIN(salary)
FROM employees
GROUP BY department_id);
-- 부서별로 가장 급여를 적게 받는 사원과 급여
-- GROUP으로만 못구할 때 서브쿼리 사용
SELECT first_name, employee_id, salary, department_id
FROM employees
WHERE (department_id, salary) IN (SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id);
두 개 이상의 테이블을 연결해서 데이터를 검색하는 방법 보통 두개이상의 행(ROW)들의 공통된 값 기본키(PRIMARY KEY), 외래키를 사용해서 JOIN 한다. 현재 테이블의 외래키(model F)를 통해 상대 테이블의 기본키(model P & U)에 연결 목적 : 현재 테이블에 없는 값을 상대 테이블의 정보(칼럼)에서 산출하기 위한 것. 기본키(Primary key) : 테이블에서 중복되지 않는 키 (model P) 외래키(Foreign key) : 다른 테이블에서 기본키이거나 고유키인 경우가 많다. (model F)
JOIN 종류
inner join = 교집합 ★★★★★ (basic)
full outer join = 합집합
cross join outer join ★★★ left right self join ★★★★★
형식
ANSI문법
SELECT 검색컬럼명
FROM 테이블명1 별명1 JOIN 테이블명2 별명2
ON 별명1.외래키 = 별명2.기본키(OR 고유키);
오라클문법
SELECT 검색컬럼명
FROM 테이블명1 별명1, 테이블명2 별명2
WHERE 별명1.외래키 = 별명2.기본키(OR 고유키);
inner join : 기준테이블과 대상 테이블에 매칭하는 필드값이 있는 경우에 검색한다.
참고
2개이상의 테이블도 JOIN 가능하다.
ANSI문법 사용시 FROM절에 INNER 생략 가능하다.
별명은 양쪽 다 가지고 있지 않는 컬럼일 경우 생략가능하다.
예시
-- hr 스키마
-- ansi SQL (표준, MySQL도 가능)
-- 목적 : 부서명 얻기(d.department_name )
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e INNER JOIN departments d
ON e.department_id = d.department_id; -- 연결
-- oracle (위와 결과값이 같음)
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id; -- 같을때 연결하라
-- 목적 : JOB_ID == IT_PROG 업무명을 꺼내고 싶다
-- 데이터를 가지고 가서 맞춰보고 상대방의 정보를 가져올 수 있다.
SELECT e.employee_id, e.first_name, e.job_id,
j.job_id, j.job_title
FROM employees e, jobs j
WHERE e.job_id = j.job_id
AND e.job_id = 'IT_PROG';
-- 3개 테이블을 조인
-- NULL은 JOIN 불가!
SELECT e.employee_id, e.first_name,
d.department_name , j.job_title
FROM employees e, departments d, jobs j
WHERE e.department_id = d.department_id
AND e.job_id = j.job_id
AND e.employee_id = 101;
cross join : 2개의 테이블을 아무 조건없이 연결시키는 방법(ALL JOIN)
참고
실행시 1번테이블 * 2번테이블 결과값을 가져온다.
거의 사용하지 않는다.
예시
-- ansi
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e CROSS JOIN departments d;
-- oracle
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e, departments d;
full outer join :기준테이블과 대상 테이블에 매칭하는 필드값이 있는 경우모든 필드값으로테이블을 만들어서 데이터를 검색하는 방법
참고
data 전체를 뽑을 때 (간혹 사용)
결과값 : left outer join + right outer join
예시
-- ansi
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON e.department_id = d.department_id;
/* oracle : 결론적으론 안됨 == error.
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id(+); -- left
*/
-- 굳이 사용하겠다면 UNION 사용.
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+) -- left join
UNION
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id; -- right join
-- e.department_id, d.department_id null 가져와라
-- ansi
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id IS NULL
OR d.department_id IS NULL;
-- oracle
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+)
AND e.department_id IS NULL
UNION
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id
AND e.department_id IS NULL;
outer(외부) join : 기준테이블과 대상 테이블에 매칭하는 필드값이 있는 경우동일한 필드값이 없는 행도 검색하는 방법
left join(leftouter join) : 좌측테이블(기준 테이블)의 모든 필드값을 가져온다.
참고
실행시 e.department_id의 null의 값도 가져오게 된다.
예시
-- ansi
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.department_id = d.department_id;
-- oracle
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+);
-- 차집합 (e.department_id의 NULL을 가져와라)
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+)
AND e.department_id IS NULL;
right join(right outer join) : 우측 테이블(대상 테이블)의 모든 필드값을 가져온다.
참고
실행시 d.department_id의 null의 값도 가져오게 된다.
예시
-- ansi
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id;
-- oracle
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id;
-- 차집합 (d.department_id NULL을 가져와라)
SELECT e.employee_id, e.first_name, e.department_id,
d.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id
AND e.department_id IS NULL;
self join : 자기 자신과 join 한다.
참고
테이블 내 동일한 값이 다른 의미를 가지는 즉, 다른 컬럼에 존재하는 경우
예시
SELECT emp.employee_id, emp.first_name, emp.manager_id,
mgr.employee_id, mgr.first_name
FROM employees emp, employees mgr -- emp:사원, mgr:상사
WHERE emp.manager_id = mgr.employee_id;
-- null값까지 뽑기(self join + left outer join)
SELECT emp.employee_id, emp.first_name, emp.manager_id,
mgr.employee_id, mgr.first_name
FROM employees emp, employees mgr -- emp:사원, mgr:상사
WHERE emp.manager_id = mgr.employee_id(+);
-- scott 스키마
-- ASC : 올림차순
SELECT ename, sal FROM emp
ORDER BY sal ASC;
-- DESC : 내림차순
SELECT ename, sal FROM emp
ORDER BY sal DESC;
-- NULL 먼저 나오도록 하는법
SELECT ename, comm FROM emp
ORDER BY comm NULLS FIRST;
-- NULL 나중에 나오도록 하는법
SELECT ename, comm FROM emp
ORDER BY comm NULLS LAST;
-- 위와 동일 : NULLS LAST = default 값
SELECT ename, comm FROM emp
ORDER BY comm;
-- hr 스키마
-- 두가지 정렬 가능
SELECT employee_id, job_id, salary FROM employees
ORDER BY job_id ASC, salary DESC;
GROUP BY : 통계를 내기 위한 그룹화
형식
SELECT 컬럼명
FROM 테이블명
WHERE 조건식
GROUP BY 필드명1, 필드명2,.. 필드명n
HAVING 그룹 내 조건식;
참고
GROUP FUNCTION : COUNT() , SUM(), AVG(), MAX(), MIN()
예시
-- hr 스키마
-- COUNT : 얼마나 있느냐?
SELECT COUNT(salary) FROM employees
WHERE job_id = 'IT_PROG';
SELECT COUNT(salary), COUNT(*), SUM(salary), AVG(salary), MAX(salary), MIN(salary)
FROM employees
WHERE job_id = 'IT_PROG';
SELECT job_id
FROM employees
GROUP BY job_id
ORDER BY job_id;
/* 묶은 다음에는 일반 컬럼은 사용할 수 없다.
SELECT job_id, first_name
FROM employees
GROUP BY job_id
ORDER BY job_id;
*/
SELECT job_id, COUNT(*), SUM(salary), AVG(salary)
FROM employees
GROUP BY job_id
ORDER BY job_id;
-- 업무별로 급여의 합계가 100000이상인 업무만 출력하라.
-- 1. GROUP 2. HAVING
SELECT job_id, SUM(salary)
FROM employees
GROUP BY job_id
HAVING SUM(salary) >= 100000;
-- 급여가 5000이상 받는 사원으로 합계를 내서 업무로 그룹화하여
-- 급여의 합계가 20000을 초과하는 업무명을 구하라
-- 1. WHERE절 2. GROUP 3. HAVING 4. ORDER
SELECT job_id, SUM(salary) AS 합계
FROM employees
WHERE salary >= 5000
GROUP BY job_id
HAVING SUM(salary) > 20000
ORDER BY 합계 DESC;
-- hr 스키마
-- 이름 -> Julia
SELECT first_name, last_name FROM employees WHERE first_name = 'Julia';
-- 급여가 $9000 이상인 사원
SELECT first_name, salary FROM employees WHERE salary >= 9000;
-- 이름이 Shanta 보다 큰 이름 (이름도 비교가능)
SELECT first_name FROM employees WHERE first_name > 'Shanta';
-- 이름의 첫 스팰링이 J보다 큰 이름
SELECT first_name FROM employees WHERE first_name >= 'J';
-- 2007년 12월 31일 이후에 입사한 사원을 출력
-- 날짜 형식 비교시 날짜 -> '07/12/31' 이런식으로 써줘야 한다.
SELECT first_name, hire_date FROM employees WHERE hire_date > '07/12/31';
-- TO_DATE -> DATE -> String으로 변환
SELECT first_name, hire_date FROM employees WHERE hire_date > TO_DATE( '071231', 'yymmdd');
IS NULL( = NULL ), IS NOT NULL( != NULL ) : 값이 없는 상태 검색하기
형식
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 IS NULL;
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 IS NOT NULL;
예시
-- 매니저가 없는 사원
SELECT first_name FROM employees WHERE manager_id IS NULL;
-- = , '' 사용할 수 없다!!!
-- SELECT first_name FROM employees WHERE manager_id = NULL;
-- SELECT first_name FROM employees WHERE manager_id = '';
-- 매니저가 있는 사원
SELECT first_name FROM employees WHERE manager_id IS NOT NULL;
AND : 모두 만족하면 검색하기
형식
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 = 검색값 AND 컬럼명 = 검색값;
예시
-- 이름 John, 월급은 5000이상
SELECT first_name, salary FROM employees WHERE first_name = 'John' AND salary >= 5000;
-- 입사일자가 06/01/01 ~ 06/12/31 사이인 사원
SELECT first_name, hire_date FROM employees
WHERE hire_date >= '06/01/01' AND hire_date <= '06/12/31';
OR : 하나라도 만족하면 검색하기
형식
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 = 검색값 OR컬럼명 = 검색값;
예시
-- 이름이 Shanta이거나 Vollman인 사원 검색
SELECT first_name FROM employees WHERE first_name = 'Shanta' OR first_name = 'Vollman';
IN : 여러 데이터로 검색하기
형식
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 IN (검색값, 검색값);
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 NOT IN (검색값, 검색값);
예시
-- 급여가 8000, 3200, 6000 인 직원들
SELECT first_name, salary FROM employees WHERE salary IN (8000, 3200, 6000);
-- 급여가 8000, 3200, 6000 아닌 직원들
SELECT first_name, salary FROM employees WHERE salary NOT IN (8000, 3200, 6000);
ANY : 여러 데이터로 검색하기(=OR, =IN)
형식
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 = ANY(검색값, 검색값);
예시
-- 급여가 8000, 3200, 6000인 직원들
SELECT first_name, salary FROM employees WHERE salary = ANY(8000, 3200, 6000);
BETWEEN .. AND(범위 연산자) : 범위에 만족하면 검색하기
형식
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 BETWEEN 검색값 AND검색값;
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 NOT BETWEEN 검색값 AND 검색값;
예시
-- 월급이 3200에서 9000사이인 사원 검색
SELECT first_name, salary FROM employees -- WHERE salary >= 3200 AND salary <= 9000;
WHERE salary BETWEEN 3200 AND 9000; -- 위와 동일
-- 월급이 3200에서 9000사이인 사원을 제외한 사원 검색
SELECT first_name, salary FROM employees WHERE salary NOT BETWEEN 3200 AND 9000;
LIKE : 포함된 문자로 검색하기 ★★★★★
형식
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 LIKE '%검색값&';
참고
'문자%' : 문자로 시작하는 값
'%문자' : 문자로 끝나는 값
'%문자%' : 문자가 포함된 값
'_' : 지정한 위치에 1자리 문자면 무엇이든 가능
예시
-- _ 한글자가 어떠한 문자든 허용
SELECT first_name FROM employees WHERE first_name LIKE 'G_ra_d';
-- % 글자수에 제한없이 모두 허용
SELECT first_name FROM employees WHERE first_name LIKE 'K%y';
-- 이름의 시작이 K인 이름 모두 허용
SELECT first_name FROM employees WHERE first_name LIKE 'K%';
-- a 들어있는 이름 모두 허용
SELECT first_name FROM employees WHERE first_name LIKE '%a%';
SELECT 1 FROM DUAL;
SELECT 'A' FROM DUAL;
SELECT '가나' FROM DUAL;
SELECT 23*45 FROM DUAL;
Standard Function (표준 함수)
문자열 함수 (Character Function) 정리
1. 변환함수
LOWER() : 알파벳 값을 소문자로 변환
형식
LOWER(문자열)
예시
SELECT LOWER('HI, HELLO') FROM DUAL; -- hi, hello
UPPER() : 알바펫 값을 대문자로 변환
형식
UPPER(문자열)
예시
SELECT UPPER('hi, hello') FROM DUAL; -- HI, HELLO
INITCAP() : 첫번째 글자만 대문자로 변환
형식
INITCAP(문자열)
예시
SELECT INITCAP('HI, HELLO') FROM DUAL; -- Hi, Hello
2. 문자 조작 함수
CONCAT() : 두 문자열 연결(결합)
형식
CONCAT(값1, 값2)
예시
SELECT CONCAT(CONCAT('나는',' '),'최고입니다') FROM DUAL; -- 나는 최고입니다
|| : 문자열 연결(결합)
형식
값1 || 값2 || ... 값n
예시
SELECT '나는 ' || '최고입니다' FROM DUAL; -- 나는 최고입니다
SUBSTR() : 문자열 중 특정 문자 또는 문자열의 일부분을 선택 ★★★★★
형식
SUBSTR(문자열, 시작INDEX, 취득개수)
예시
SELECT SUBSTR('ABCDE', 3) FROM DUAL; -- CDE
-- 3번째부터 2글자 가져와라 CD
SELECT SUBSTR('ABCDE', 3, 2) FROM DUAL; -- CD
LENGTH() : 문자열의 길이를 구함
형식
LENGTH(문자열)
예시
SELECT LENGTH('ABCDE') FROM DUAL; -- 5
INSTR() : 문자열 내 위치를 구함
형식
INSTR(문자열, 찾을문자열[시작위치[, 검색차수])
참고
시작위치가 있으면 시작위치부터 찾고 시작위치가 없다면 처음부터 찾는다.
검색차수가 있으면 검색차수번째 순서에 있는 찾는문자열의 위치를 구한다.
예시
SELECT INSTR('abcde', 'a') FROM DUAL; -- 1
SELECT INSTR('123ABC456DEFABC', 'A') FROM DUAL; -- 4
-- 7번째 이후의 A의 INDEX번호
SELECT INSTR('123ABC456DEFABC', 'A', 7) FROM DUAL; -- 13
-- 7번째 이후의 1번째 나오는 A의 INDEX번호
SELECT INSTR('123ABC456DEFABCABC', 'A', 7, 2) FROM DUAL; -- 16
-- 공백 삭제
SELECT LTRIM(' BBB' ) FROM DUAL;
SELECT RTRIM('BBB ' ) FROM DUAL;
--반복적인 문자 삭제
SELECT LTRIM('AABBB', 'AA') FROM DUAL; -- BBB
SELECT RTRIM('BBBAA', 'AA') FROM DUAL; -- BBB
REPLACE() : 문자열 치환
형식
REPLACE(문자열, 삭제문자)
REPLACE(문자열, 대상문자, 교체문자)
예시
SELECT REPLACE('AAAAABCD', 'A') FROM DUAL; -- BCD
SELECT REPLACE('AAAAABCD', 'A', 'a') FROM DUAL; -- aaaaaBCD
SELECT REPLACE('AAAAABCD', 'AA', 'a') FROM DUAL; -- aaABCD
TREANSLATE() : 문자 치환
형식
TREANSLATE(문자열, 대상문자, 치환문자)
참고
글자를 지정해주지 않으면 에러발생
예시
SELECT TREANSLATE('AAAAABCD', 'A' , 'a') FROM DUAL; -- aaaaaBCD
-- 위와 동일 : 문자 치환이기 때문에
SELECT TREANSLATE('AAAAABCD', 'AA' , 'a') FROM DUAL; -- aaaaaBCD
숫자 함수 정리
CEIL() : 숫자를 올림
형식
CEIL(숫자)
예시
SELECT CEIL(13.1) FROM DUAL; -- 14
FLOOR() : 숫자를 내림
형식
FLOOR(숫자)
예시
SELECT FLOOR(13.1) FROM DUAL; -- 13
ROUND() : 숫자를 반올림
형식
ROUND(숫자)
ROUND(숫자, 자릿수)
예시
SELECT ROUND(13.4) FROM DUAL; -- 13
-- 소수점 1번째자리 까지만 인정
SELECT ROUND(13.45,1) FROM DUAL; -- 13.5
TRUNC() : 숫자를 버림(절삭)
형식
TRUNC (숫자)
TRUNC (숫자, 자릿수)
예시
SELECT TRUNC(123.456) FROM DUAL; -- 123
-- 소수점 2번째자리 까지만 인정
SELECT TRUNC(123.456, 2) FROM DUAL; -- 123.45
-- 소수점 1번째자리 까지만 인정
SELECT TRUNC(123.456, 1) FROM DUAL; -- 123.4
-- 정수 1번째자리까지 인정
SELECT TRUNC(123.456, -1) FROM DUAL; -- 120
MOD() : 숫자를 나눈 나머지
형식
MOD(숫자, 나눌수)
예시
SELECT MOD(3, 2)FROM DUAL; -- 1
POWER() : 거듭제곱(승수)
형식
POWER (숫자, 승수)
예시
SELECT POWER(3, 2) FROM DUAL; -- 9
SIGN() : 양수, 음수, 0인지 확인
형식
SIGN (숫자)
참고
양수일 때 반환값 : 1
음수일 때 반환값 : -1
0일 때 반환값 : 0
예시
SELECT SIGN(13.4) FROM DUAL; -- 1
SELECT SIGN(-13.4) FROM DUAL; -- -1
SELECT SIGN(0) FROM DUAL; -- 0
CHR() : ASCII 값으로 변환
형식
CHR(숫자)
예시
SELECT CHR(65) FROM DUAL; -- A
SELECT CHR(97) FROM DUAL; -- a
날짜 함수
SYSDATE : 오늘 날짜, 시간 반환
형식
SYSDATE
예시
SELECT SYSDATE FROM DUAL;
MONTHS_BETWEEN() : 두 날짜 사이의 월수를 계산
형식
MONTHS_BETWEEN(기준날짜, 비교날짜)
예시
SELECT MONTHS_BETWEEN(TO_DATE('20/04/23'), TO_DATE('20/01/1')) FROM DUAL; -- 3.7096..
ADD_MONTHS() : 월을 날짜에 더하기
형식
ADD_MONTHS (기준날짜, 개월수)
예시
SELECT ADD_MONTHS(TO_DATE('20/04/23'), 6) FROM DUAL; -- 20/10/23
NEXT_DAY() : 명시된 날짜로부터 다음 요일에 대한 날짜 계산 (오늘은 포함 X)
형식
NEXT_DAY (기준날짜, 요일문자열(요일번호))
참고
요일문자열 : 일요일, 월요일, 화요일, 수요일, 목요일, 금요일, 토요일, 또는 일, 월, 화, 수, 목, 금, 토
요일번호 : 1(일), 2(월), 3(화), 4(수), 5(목), 6(금), 7(토)
예시
SELECT SYSDATE, NEXT_DAY(SYSDATE, '월요일') FROM DUAL;
출력화면
LAST_DAY() : 명시된 날짜가 속한 달의 마지막 날를 반환
형식
LAST_DAY (기준날짜)
예시
SELECT LAST_DAY('24/02/22') FROM DUAL; -- 24/02/29