Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
Archives
Today
Total
관리 메뉴

Everything has an expiration date

[Oracle] 20231101 [프로그램 소스] 본문

[Oracle]/SQL (Program source)

[Oracle] 20231101 [프로그램 소스]

Jelly-fish 2023. 11. 1. 23:19

 

20231101_01_scott.sql
SELECT USER
FROM DUAL;
--==>> SCOTT


--■■■ UPDATE ■■■--


-- 1. 테이블에서 기존 데이터를 수정(변경)하는 구문

-- 2. 형식 및 구조
-- UPDATE 테이블명
-- SET 컬럼명 = 변경할 값[, 컬럼명-변경할값, ...]
-- [WHERE 조건절]


SELECT *
FROM TBL_SAWON;




--○ TBL_SAWON 테이블에서 사원번호 1005번 사원의
--   주민번호를 『7609172234567』로 수정한다.


UPDATE TBL_SAWON
SET JUBUN = '7609172234567'
WHERE SANO = 1005;



-- 특정 테이블 전체를 변경할 때는 WHERE 절 X

UPDATE TBL_SAWON
SET 주민번호를 '7609172234567'
WHERE 사원번호가 1005


UPDATE TBL_SAWON
SET JUBUN = '7609172234567'
WHERE SANO = 1005;
--==>> 1 행 이(가) 업데이트되었습니다.

-- 확인
SELECT *
FROM TBL_SAWON;
--==>>
/*
                :
1005	아이유	7609172234567	2015-10-19	1000
                :
*/



-- 실행 후 COMMIT 또는 ROLLBACK 을 반드시 선택적으로 실행
COMMIT;
--==>> 커밋완료.



--○ TBL_SAWON 테이블에서 1005번 사원의 입사일과 급여를
--   각각 2020-04-01, 1200 으로 변경한다.


UPDATE TBL_SAWON
SET HIREDATE = TO_DATE('2020-04-01', 'YYYY-MM-DD')
    , SAL = 1200
    -- SET 에서는 쉼표를 사용하도록 하자. AND 아님!
WHERE SANO = 1005;


SELECT *
FROM TBL_SAWON;


-- 조건이 아니므로 AND 쓰지 않는다! 변경할 값들을 ,(콤마)로 열거하면 된다.

UPDATE TBL_SAWON
SET HIREDATE = TO_DATE('2020-04-01', 'YYYY-MM-DD'), SAL=1200
WHERE SANO = 1005;
--==>> 1 행 이(가) 업데이트되었습니다.


-- 확인

SELECT *
FROM TBL_SAWON;
--==>>
/*
        :
1005	아이유	7609172234567	2020-04-01	1200
        :
*/


-- 커밋
COMMIT;
--==>> 커밋 완료.


--○ TBL_INSA 테이블 복사(구조와 데이터만...)


SELECT *
FROM TBL_INSA;


CREATE TABLE TBL_INSABACKUP
AS
SELECT *
FROM TBL_INSA;
--==>> Table TBL_INSABACKUP이(가) 생성되었습니다.

-- 확인

SELECT *
FROM TBL_INSABACKUP;
--==>>
/*
NUM	    NAME	SSN	IBSADATE	CITY	TEL	BUSEO	JIKWI	BASICPAY	SUDANG
1001	홍길동	771212-1022432	1998-10-11	서울	011-2356-4528	기획부	부장	2610000	200000
1002	    이순신	801007-1544236	2000-11-29	경기	010-4758-6532	총무부	사원	1320000	200000
1003	이순애	770922-2312547	1999-02-25	인천	010-4231-1236	개발부	부장	2550000	160000
1004	김정훈	790304-1788896	2000-10-01	전북	019-5236-4221	영업부	대리	1954200	170000
1005	한석봉	811112-1566789	2004-08-13	서울	018-5211-3542	총무부	사원	1420000	160000
1006	이기자	780505-2978541	2002-02-11	인천	010-3214-5357	개발부	과장	2265000	150000
1007	장인철	780506-1625148	1998-03-16	제주	011-2345-2525	개발부	대리	1250000	150000
1008	김영년	821011-2362514	2002-04-30	서울	016-2222-4444	홍보부	사원	950000	145000
1009	나윤균	810810-1552147	2003-10-10	경기	019-1111-2222	인사부	사원	840000	220400
1010	김종서	751010-1122233	1997-08-08	부산	011-3214-5555	영업부	부장	2540000	130000
1011	유관순	801010-2987897	2000-07-07	서울	010-8888-4422	영업부	사원	1020000	140000
1012    	정한국	760909-1333333	1999-10-16	강원	018-2222-4242	홍보부	사원	880000	114000
1013	조미숙	790102-2777777	1998-06-07	경기	019-6666-4444	홍보부	대리	1601000	103000
1014	황진이	810707-2574812	2002-02-15	인천	010-3214-5467	개발부	사원	1100000	130000
1015	이현숙	800606-2954687	1999-07-26	경기	016-2548-3365	총무부	사원	1050000	104000
1016	이상헌	781010-1666678	2001-11-29	경기	010-4526-1234	개발부	과장	2350000	150000
1017	엄용수	820507-1452365	2000-08-28	인천	010-3254-2542	개발부	사원	950000	210000
1018	이성길	801028-1849534	2004-08-08	전북	018-1333-3333	개발부	사원	880000	123000
1019	박문수	780710-1985632	1999-12-10	서울	017-4747-4848	인사부	과장	2300000	165000
1020	유영희	800304-2741258	2003-10-10	전남	011-9595-8585	자재부	사원	880000	140000
1021	홍길남	801010-1111111	2001-09-07	경기	011-9999-7575	개발부	사원	875000	120000
1022	이영숙	800501-2312456	2003-02-25	전남	017-5214-5282	기획부	대리	1960000	180000
1023	김인수	731211-1214576	1995-02-23	서울		영업부	부장	2500000	170000
1024	김말자	830225-2633334	1999-08-28	서울	011-5248-7789	기획부	대리	1900000	170000
1025	우재옥	801103-1654442	2000-10-01	서울	010-4563-2587	영업부	사원	1100000	160000
1026	김숙남	810907-2015457	2002-08-28	경기	010-2112-5225	영업부	사원	1050000	150000
1027	김영길	801216-1898752	2000-10-18	서울	019-8523-1478	총무부	과장	2340000	170000
1028	이남신	810101-1010101	2001-09-07	제주	016-1818-4848	인사부	사원	892000	110000
1029	김말숙	800301-2020202	2000-09-08	서울	016-3535-3636	총무부	사원	920000	124000
1030	정정해	790210-2101010	1999-10-17	부산	019-6564-6752	총무부	과장	2304000	124000
1031	지재환	771115-1687988	2001-01-21	서울	019-5552-7511	기획부	부장	2450000	160000
1032	심심해	810206-2222222	2000-05-05	전북	016-8888-7474	자재부	사원	880000	108000
1033	김미나	780505-2999999	1998-06-07	서울	011-2444-4444	영업부	사원	1020000	104000
1034	이정석	820505-1325468	2005-09-26	경기	011-3697-7412	기획부	사원	1100000	160000
1035	정영희	831010-2153252	2002-05-16	인천		개발부	사원	1050000	140000
1036	이재영	701126-2852147	2003-08-10	서울	011-9999-9999	자재부	사원	960400	190000
1037	최석규	770129-1456987	1998-10-15	인천	011-7777-7777	홍보부	과장	2350000	187000
1038	손인수	791009-2321456	1999-11-15	부산	010-6542-7412	영업부	대리	2000000	150000
1039	고순정	800504-2000032	2003-12-28	경기	010-2587-7895	영업부	대리	2010000	160000
1040	박세열	790509-1635214	2000-09-10	경북	016-4444-7777	인사부	대리	2100000	130000
1041	문길수	721217-1951357	2001-12-10	충남	016-4444-5555	자재부	과장	2300000	150000
1042	    채정희	810709-2000054	2003-10-17	경기	011-5125-5511	개발부	사원	1020000	200000
1043	양미옥	830504-2471523	2003-09-24	서울	016-8548-6547	영업부	사원	1100000	210000
1044	지수환	820305-1475286	2004-01-21	서울	011-5555-7548	영업부	사원	1060000	220000
1045	홍원신	690906-1985214	2003-03-16	전북	011-7777-7777	영업부	사원	960000	152000
1046	허경운	760105-1458752	1999-05-04	경남	017-3333-3333	총무부	부장	2650000	150000
1047	산마루	780505-1234567	2001-07-15	서울	018-0505-0505	영업부	대리	2100000	112000
1048	이기상	790604-1415141	2001-06-07	전남		            개발부	대리	2050000	106000
1049	이미성	830908-2456548	2000-04-07	인천	010-6654-8854	개발부	사원	1300000	130000
1050	이미인	810403-2828287	2003-06-07	경기	011-8585-5252	홍보부	대리	1950000	103000
1051	권영미	790303-2155554	2000-06-04	서울	011-5555-7548	영업부	과장	2260000	104000
1052	    권옥경	820406-2000456	2000-10-10	경기	010-3644-5577	기획부	사원	1020000	105000
1053	김싱식	800715-1313131	1999-12-12	전북	011-7585-7474	자재부	사원	960000	108000
1054	정상호	810705-1212141	1999-10-16	강원	016-1919-4242	홍보부	사원	980000	114000
1055	정한나	820506-2425153	2004-06-07	서울	016-2424-4242	영업부	사원	1000000	104000
1056	전용재	800605-1456987	2004-08-13	인천	010-7549-8654	영업부	대리	1950000	200000
1057	이미경	780406-2003214	1998-02-11	경기	016-6542-7546	자재부	부장	2520000	160000
1058	김신제	800709-1321456	2003-08-08	인천	010-2415-5444	기획부	대리	1950000	180000
1059	임수봉	810809-2121244	2001-10-10	서울	011-4151-4154	개발부	사원	890000	102000
1060	김신애	810809-2111111	2001-10-10	서울	011-4151-4444	개발부	사원	900000	102000
*/


--○ TBL_INSABACKUP 테이블에서
--   과장과 부장만 수당 10% 인상하는 쿼리문을 작성한다.


SELECT SUDANG
FROM TBL_INSABACKUP
WHERE JIKWI IN ('과장', '부장');
/*
[변경전]
200000
160000
150000
130000
150000
165000
170000
170000
124000
160000
187000
150000
150000
104000
160000
*/



UPDATE TBL_INSABACKUP
SET SUDANG = SUDANG + SUDANG * 0.1
WHERE JIKWI IN ('과장', '부장');
--==>> 15개 행 이(가) 업데이트되었습니다.


SELECT SUDANG
FROM TBL_INSABACKUP
WHERE JIKWI IN ('과장', '부장');

/*
[변경후]
220000
176000
165000
143000
165000
181500
187000
187000
136400
176000
205700
165000
165000
114400
176000
*/


SELECT NAME "사원명", JIKWI "직위", SUDANG "수당"
     , SUDANG + (SUDANG * 0.1) "10%인상된수당"
     , SUDANG * 1.1 "10%인상된수당"
FROM TBL_INSABACKUP
WHERE JIKWI IN ('과장', '부장');
--==>>
/*
1001	홍길동	771212-1022432	1998-10-11	서울	011-2356-4528	기획부	부장	2610000	220000
1003	이순애	770922-2312547	1999-02-25	인천	010-4231-1236	개발부	부장	2550000	176000
1006	이기자	780505-2978541	2002-02-11	인천	010-3214-5357	개발부	과장	2265000	165000
1010	김종서	751010-1122233	1997-08-08	부산	011-3214-5555	영업부	부장	2540000	143000
1016	이상헌	781010-1666678	2001-11-29	경기	010-4526-1234	개발부	과장	2350000	165000
1019	박문수	780710-1985632	1999-12-10	서울	017-4747-4848	인사부	과장	2300000	181500
1023	김인수	731211-1214576	1995-02-23	서울		영업부	부장	2500000	187000
1027	김영길	801216-1898752	2000-10-18	서울	019-8523-1478	총무부	과장	2340000	187000
1030	정정해	790210-2101010	1999-10-17	부산	019-6564-6752	총무부	과장	2304000	136400
1031	지재환	771115-1687988	2001-01-21	서울	019-5552-7511	기획부	부장	2450000	176000
1037	최석규	770129-1456987	1998-10-15	인천	011-7777-7777	홍보부	과장	2350000	205700
1041	문길수	721217-1951357	2001-12-10	충남	016-4444-5555	자재부	과장	2300000	165000
1046	허경운	760105-1458752	1999-05-04	경남	017-3333-3333	총무부	부장	2650000	165000
1051	권영미	790303-2155554	2000-06-04	서울	011-5555-7548	영업부	과장	2260000	114400
1057	이미경	780406-2003214	1998-02-11	경기	016-6542-7546	자재부	부장	2520000	176000
*/


UPDATE TBL_INSABACKUP
SET SUDANG = SUDANG * 1.1
WHERE JIKWI IN ('과장', '부장');
--==>> 15개 행 이(가) 업데이트되었습니다.

-- 확인
SELECT *
FROM TBL_INSABACKUP;
--==>>
/*
NUM	NAME	SSN	IBSADATE	CITY	TEL	BUSEO	JIKWI	BASICPAY	SUDANG
1001	홍길동	771212-1022432	1998-10-11	서울	011-2356-4528	기획부	부장	2610000	220000
1002	    이순신	801007-1544236	2000-11-29	경기	010-4758-6532	총무부	사원	1320000	200000
1003	이순애	770922-2312547	1999-02-25	인천	010-4231-1236	개발부	부장	2550000	176000
1004	김정훈	790304-1788896	2000-10-01	전북	019-5236-4221	영업부	대리	1954200	170000
1005	한석봉	811112-1566789	2004-08-13	서울	018-5211-3542	총무부	사원	1420000	160000
1006	이기자	780505-2978541	2002-02-11	인천	010-3214-5357	개발부	과장	2265000	165000
1007	장인철	780506-1625148	1998-03-16	제주	011-2345-2525	개발부	대리	1250000	150000
1008	김영년	821011-2362514	2002-04-30	서울	016-2222-4444	홍보부	사원	950000	145000
1009	나윤균	810810-1552147	2003-10-10	경기	019-1111-2222	인사부	사원	840000	220400
1010	김종서	751010-1122233	1997-08-08	부산	011-3214-5555	영업부	부장	2540000	143000
1011	유관순	801010-2987897	2000-07-07	서울	010-8888-4422	영업부	사원	1020000	140000
1012    	정한국	760909-1333333	1999-10-16	강원	018-2222-4242	홍보부	사원	880000	114000
1013	조미숙	790102-2777777	1998-06-07	경기	019-6666-4444	홍보부	대리	1601000	103000
1014	황진이	810707-2574812	2002-02-15	인천	010-3214-5467	개발부	사원	1100000	130000
1015	이현숙	800606-2954687	1999-07-26	경기	016-2548-3365	총무부	사원	1050000	104000
1016	이상헌	781010-1666678	2001-11-29	경기	010-4526-1234	개발부	과장	2350000	165000
1017	엄용수	820507-1452365	2000-08-28	인천	010-3254-2542	개발부	사원	950000	210000
1018	이성길	801028-1849534	2004-08-08	전북	018-1333-3333	개발부	사원	880000	123000
1019	박문수	780710-1985632	1999-12-10	서울	017-4747-4848	인사부	과장	2300000	181500
1020	    유영희	800304-2741258	2003-10-10	전남	011-9595-8585	자재부	사원	880000	140000
1021	    홍길남	801010-1111111	2001-09-07	경기	011-9999-7575	개발부	사원	875000	120000
1022	    이영숙	800501-2312456	2003-02-25	전남	017-5214-5282	기획부	대리	1960000	180000
1023	    김인수	731211-1214576	1995-02-23	서울		영업부	부장	2500000	187000
1024	    김말자	830225-2633334	1999-08-28	서울	011-5248-7789	기획부	대리	1900000	170000
1025	    우재옥	801103-1654442	2000-10-01	서울	010-4563-2587	영업부	사원	1100000	160000
1026	    김숙남	810907-2015457	2002-08-28	경기	010-2112-5225	영업부	사원	1050000	150000
1027	    김영길	801216-1898752	2000-10-18	서울	019-8523-1478	총무부	과장	2340000	187000
1028	    이남신	810101-1010101	2001-09-07	제주	016-1818-4848	인사부	사원	892000	110000
1029	    김말숙	800301-2020202	2000-09-08	서울	016-3535-3636	총무부	사원	920000	124000
1030	정정해	790210-2101010	1999-10-17	부산	019-6564-6752	총무부	과장	2304000	136400
1031	지재환	771115-1687988	2001-01-21	서울	019-5552-7511	기획부	부장	2450000	176000
1032	    심심해	810206-2222222	2000-05-05	전북	016-8888-7474	자재부	사원	880000	108000
1033	김미나	780505-2999999	1998-06-07	서울	011-2444-4444	영업부	사원	1020000	104000
1034	이정석	820505-1325468	2005-09-26	경기	011-3697-7412	기획부	사원	1100000	160000
1035	정영희	831010-2153252	2002-05-16	인천		개발부	사원	1050000	140000
1036	이재영	701126-2852147	2003-08-10	서울	011-9999-9999	자재부	사원	960400	190000
1037	최석규	770129-1456987	1998-10-15	인천	011-7777-7777	홍보부	과장	2350000	205700
1038	손인수	791009-2321456	1999-11-15	부산	010-6542-7412	영업부	대리	2000000	150000
1039	고순정	800504-2000032	2003-12-28	경기	010-2587-7895	영업부	대리	2010000	160000
1040	박세열	790509-1635214	2000-09-10	경북	016-4444-7777	인사부	대리	2100000	130000
1041	문길수	721217-1951357	2001-12-10	충남	016-4444-5555	자재부	과장	2300000	165000
1042	    채정희	810709-2000054	2003-10-17	경기	011-5125-5511	개발부	사원	1020000	200000
1043	양미옥	830504-2471523	2003-09-24	서울	016-8548-6547	영업부	사원	1100000	210000
1044	지수환	820305-1475286	2004-01-21	서울	011-5555-7548	영업부	사원	1060000	220000
1045	홍원신	690906-1985214	2003-03-16	전북	011-7777-7777	영업부	사원	960000	152000
1046	허경운	760105-1458752	1999-05-04	경남	017-3333-3333	총무부	부장	2650000	165000
1047	산마루	780505-1234567	2001-07-15	서울	018-0505-0505	영업부	대리	2100000	112000
1048	이기상	790604-1415141	2001-06-07	전남		개발부	대리	2050000	106000
1049	이미성	830908-2456548	2000-04-07	인천	010-6654-8854	개발부	사원	1300000	130000
1050	이미인	810403-2828287	2003-06-07	경기	011-8585-5252	홍보부	대리	1950000	103000
1051	권영미	790303-2155554	2000-06-04	서울	011-5555-7548	영업부	과장	2260000	114400
1052	    권옥경	820406-2000456	2000-10-10	경기	010-3644-5577	기획부	사원	1020000	105000
1053	김싱식	800715-1313131	1999-12-12	전북	011-7585-7474	자재부	사원	960000	108000
1054	정상호	810705-1212141	1999-10-16	강원	016-1919-4242	홍보부	사원	980000	114000
1055	정한나	820506-2425153	2004-06-07	서울	016-2424-4242	영업부	사원	1000000	104000
1056	전용재	800605-1456987	2004-08-13	인천	010-7549-8654	영업부	대리	1950000	200000
1057	이미경	780406-2003214	1998-02-11	경기	016-6542-7546	자재부	부장	2520000	176000
1058	김신제	800709-1321456	2003-08-08	인천	010-2415-5444	기획부	대리	1950000	180000
1059	임수봉	810809-2121244	2001-10-10	서울	011-4151-4154	개발부	사원	890000	102000
1060	김신애	810809-2111111	2001-10-10	서울	011-4151-4444	개발부	사원	900000	102000
*/

COMMIT;
--==>> 커밋 완료.

--○ TBL_INSABACKUP 테이블에서
--   전화번호가 016, 017, 018, 019 로 시작하는 전화번호인 경우
--   이를 모두 010 으로 변경하는 쿼리문을 구성한다.

SELECT *
FROM TBL_INSABACKUP;


SELECT '010' || '-' || SUBSTR(TEL, 5, 4) || '-' || SUBSTR(TEL, 10, 4)
     , '010-' || SUBSTR(TEL, 5, 9)
     , '010' || SUBSTR(TEL, 4)
FROM TBL_INSABACKUP;


UPDATE TBL_INSABACKUP
SET TEL = '010' || '-' || SUBSTR(TEL, 5, 4) || '-' || SUBSTR(TEL, 10, 4)
-- SET TEL = '010-' || SUBSTR(TEL, 5, 9)
--           '010'  || '-' || SUBSTR(TEL, 5, 4) || '-' || SUBSTR(TEL, 10, 4)
--           '010-' || SUBSTR(TEL, 5, 9)
--           '010'  || SUBSTR(TEL, 4)
WHERE TEL LIKE '016%'
      OR
      TEL LIKE '017%'
      OR
      TEL LIKE '018%'
      OR
      TEL LIKE '019%';

-- 혜성오빠 풀이!
/*
WHERE SUBSTR(TEL, 1, 3) IN ('016', '017', '018', '019')
*/



SELECT *
FROM TBL_INSABACKUP;

--[전화번호가 오로지 016이여야만 조건에 맞게되는 것.]
SELECT *
FROM TBL_INSABACKUP
WHERE TEL IN ('016', '017', '018', '019');
--==>> 조회 결과 없음.


--[전화번호 맨 앞 3자리만 추출하여 비교하자.]
SELECT *
FROM TBL_INSABACKUP
WHERE SUBSTR(TEL, 1, 3) IN ('016', '017', '018', '019');


-- '010' 이 아니라 숫자타입 010 으로 작성하지 않도록 한다!
SELECT TEL "기존전화번호", '010' || TEL "변경될전화번호"
FROM TBL_INSABACKUP
WHERE SUBSTR(TEL, 1, 3) IN ('016', '017', '018', '019');



-- SUBSTR(대상, 시작값) 끝 값을 정해주지 않으면, 맨 끝까지 추출.

SELECT TEL "기존전화번호", '010' || SUBSTR(TEL, 4) "변경될전화번호"
FROM TBL_INSABACKUP
WHERE SUBSTR(TEL, 1, 3) IN ('016', '017', '018', '019');





UPDATE TBL_INSABACKUP
SET TEL = 
WHERE SUBSTR(TEL, 1, 3) IN ('016', '017', '018', '019');
--==>> 24개 행 이(가) 업데이트되었습니다.


SELECT *
FROM TBL_INSABACKUP;
--==>> 
/*
NUM	NAME	SSN	IBSADATE	CITY	TEL	BUSEO	JIKWI	BASICPAY	SUDANG
1001	홍길동	771212-1022432	1998-10-11	서울	011-2356-4528	기획부	부장	2610000	220000
1002	이순신	801007-1544236	2000-11-29	경기	010-4758-6532	총무부	사원	1320000	200000
1003	이순애	770922-2312547	1999-02-25	인천	010-4231-1236	개발부	부장	2550000	176000
1004	김정훈	790304-1788896	2000-10-01	전북	010-5236-4221	영업부	대리	1954200	170000
1005	한석봉	811112-1566789	2004-08-13	서울	010-5211-3542	총무부	사원	1420000	160000
1006	이기자	780505-2978541	2002-02-11	인천	010-3214-5357	개발부	과장	2265000	165000
1007	장인철	780506-1625148	1998-03-16	제주	011-2345-2525	개발부	대리	1250000	150000
1008	김영년	821011-2362514	2002-04-30	서울	010-2222-4444	홍보부	사원	950000	145000
1009	나윤균	810810-1552147	2003-10-10	경기	010-1111-2222	인사부	사원	840000	220400
1010	김종서	751010-1122233	1997-08-08	부산	011-3214-5555	영업부	부장	2540000	143000
1011	유관순	801010-2987897	2000-07-07	서울	010-8888-4422	영업부	사원	1020000	140000
1012	정한국	760909-1333333	1999-10-16	강원	010-2222-4242	홍보부	사원	880000	114000
1013	조미숙	790102-2777777	1998-06-07	경기	010-6666-4444	홍보부	대리	1601000	103000
1014	황진이	810707-2574812	2002-02-15	인천	010-3214-5467	개발부	사원	1100000	130000
1015	이현숙	800606-2954687	1999-07-26	경기	010-2548-3365	총무부	사원	1050000	104000
1016	이상헌	781010-1666678	2001-11-29	경기	010-4526-1234	개발부	과장	2350000	165000
1017	엄용수	820507-1452365	2000-08-28	인천	010-3254-2542	개발부	사원	950000	210000
1018	이성길	801028-1849534	2004-08-08	전북	010-1333-3333	개발부	사원	880000	123000
1019	박문수	780710-1985632	1999-12-10	서울	010-4747-4848	인사부	과장	2300000	181500
1020	유영희	800304-2741258	2003-10-10	전남	011-9595-8585	자재부	사원	880000	140000
1021	홍길남	801010-1111111	2001-09-07	경기	011-9999-7575	개발부	사원	875000	120000
1022	    이영숙	800501-2312456	2003-02-25	전남	010-5214-5282	기획부	대리	1960000	180000
1023	    김인수	731211-1214576	1995-02-23	서울		영업부	부장	2500000	187000
1024	김말자	830225-2633334	1999-08-28	서울	011-5248-7789	기획부	대리	1900000	170000
1025	    우재옥	801103-1654442	2000-10-01	서울	010-4563-2587	영업부	사원	1100000	160000
1026	    김숙남	810907-2015457	2002-08-28	경기	010-2112-5225	영업부	사원	1050000	150000
1027	    김영길	801216-1898752	2000-10-18	서울	010-8523-1478	총무부	과장	2340000	187000
1028	    이남신	810101-1010101	2001-09-07	제주	010-1818-4848	인사부	사원	892000	110000
1029	    김말숙	800301-2020202	2000-09-08	서울	010-3535-3636	총무부	사원	920000	124000
1030	정정해	790210-2101010	1999-10-17	부산	010-6564-6752	총무부	과장	2304000	136400
1031	지재환	771115-1687988	2001-01-21	서울	010-5552-7511	기획부	부장	2450000	176000
1032	    심심해	810206-2222222	2000-05-05	전북	010-8888-7474	자재부	사원	880000	108000
1033	김미나	780505-2999999	1998-06-07	서울	011-2444-4444	영업부	사원	1020000	104000
1034	이정석	820505-1325468	2005-09-26	경기	011-3697-7412	기획부	사원	1100000	160000
1035	정영희	831010-2153252	2002-05-16	인천		개발부	사원	1050000	140000
1036	이재영	701126-2852147	2003-08-10	서울	011-9999-9999	자재부	사원	960400	190000
1037	최석규	770129-1456987	1998-10-15	인천	011-7777-7777	홍보부	과장	2350000	205700
1038	손인수	791009-2321456	1999-11-15	부산	010-6542-7412	영업부	대리	2000000	150000
1039	고순정	800504-2000032	2003-12-28	경기	010-2587-7895	영업부	대리	2010000	160000
1040	박세열	790509-1635214	2000-09-10	경북	010-4444-7777	인사부	대리	2100000	130000
1041	문길수	721217-1951357	2001-12-10	충남	010-4444-5555	자재부	과장	2300000	165000
1042	    채정희	810709-2000054	2003-10-17	경기	011-5125-5511	개발부	사원	1020000	200000
1043	양미옥	830504-2471523	2003-09-24	서울	010-8548-6547	영업부	사원	1100000	210000
1044	지수환	820305-1475286	2004-01-21	서울	011-5555-7548	영업부	사원	1060000	220000
1045	홍원신	690906-1985214	2003-03-16	전북	011-7777-7777	영업부	사원	960000	152000
1046	허경운	760105-1458752	1999-05-04	경남	010-3333-3333	총무부	부장	2650000	165000
1047	산마루	780505-1234567	2001-07-15	서울	010-0505-0505	영업부	대리	2100000	112000
1048	이기상	790604-1415141	2001-06-07	전남		개발부	대리	2050000	106000
1049	이미성	830908-2456548	2000-04-07	인천	010-6654-8854	개발부	사원	1300000	130000
1050	이미인	810403-2828287	2003-06-07	경기	011-8585-5252	홍보부	대리	1950000	103000
1051	권영미	790303-2155554	2000-06-04	서울	011-5555-7548	영업부	과장	2260000	114400
1052	    권옥경	820406-2000456	2000-10-10	경기	010-3644-5577	기획부	사원	1020000	105000
1053	김싱식	800715-1313131	1999-12-12	전북	011-7585-7474	자재부	사원	960000	108000
1054	정상호	810705-1212141	1999-10-16	강원	010-1919-4242	홍보부	사원	980000	114000
1055	정한나	820506-2425153	2004-06-07	서울	010-2424-4242	영업부	사원	1000000	104000
1056	전용재	800605-1456987	2004-08-13	인천	010-7549-8654	영업부	대리	1950000	200000
1057	이미경	780406-2003214	1998-02-11	경기	010-6542-7546	자재부	부장	2520000	176000
1058	김신제	800709-1321456	2003-08-08	인천	010-2415-5444	기획부	대리	1950000	180000
1059	임수봉	810809-2121244	2001-10-10	서울	011-4151-4154	개발부	사원	890000	102000
1060	김신애	810809-2111111	2001-10-10	서울	011-4151-4444	개발부	사원	900000	102000
*/


COMMIT;
--==>> 커밋 완료.

 

 

 

 

20231101_02_hr.sql

SELECT USER
FROM DUAL;
--==>> HR

--○ EMPLOYEES 테이블의 직원들 SALARY 를 10% 인상한다.
--   단, 부서명이 'IT'인 직원들만 한정한다.
--   (또한, 쿼리문에 대한 변경 결과 확인 후 ROLLBACK 을 수행한다~!!!)


-- #1 부서명이 IT인 부서번호 찾기
SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME = 'IT';


SELECT SALARY "이전급여"
     , SALARY * 1.1 "10%인상급"
FROM EMPLOYEES
WHERE DEPARTMENT_ID
      IN
      (
        SELECT DEPARTMENT_ID
        FROM DEPARTMENTS
        WHERE DEPARTMENT_NAME = 'IT'
      );
--==>>
/*
이전급여	    10%인상급
9000	    9900
6000	    6600
4800	    5280
4800	    5280
4200	        4620
*/


UPDATE EMPLOYEES
SET SALARY = SALARY * 1.1
WHERE DEPARTMENT_ID
      IN
      (
        SELECT DEPARTMENT_ID
        FROM DEPARTMENTS
        WHERE DEPARTMENT_NAME = 'IT'
      );
      

SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID
      IN
      (
        SELECT DEPARTMENT_ID
        FROM DEPARTMENTS
        WHERE DEPARTMENT_NAME = 'IT'
      );

ROLLBACK;




SELECT *
FROM EMPLOYEES;
SELECT *
FROM DEPARTMENTS;



--[INNER JOIN 사용한 풀이]===================================
SELECT *
FROM EMPLOYEES E
INNER JOIN DEPARTMENTS D
ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE D.DEPARTMENT_NAME = 'IT';
--==========================================================

-- IT 부서 직원들의 FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_ID 조회


SELECT FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_ID
FROM EMPLOYEES;


SELECT FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_ID
FROM EMPLOYEES
WHERE 부서명 = 'IT';


SELECT FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_ID
FROM EMPLOYEES
WHERE 부서아이디 = 부서명이 'IT'인 부서의 부서아이디;


SELECT FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 60;


SELECT FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = (부서명이 'IT'인 부서의 부서아이디);


-- IT 부서의 부서 ID를 구하는 쿼리문
SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME = 'IT';



SELECT FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = (
                        SELECT DEPARTMENT_ID
                        FROM DEPARTMENTS
                        WHERE DEPARTMENT_NAME = 'IT'
                      ); --> 내부적으로 60으로 변한다.
       
                   

--==>> 
/*
FIRST_NAME	LAST_NAME	    SALARY	    DEPARTMENT_ID
Alexander	Hunold	        9000	        60
Bruce	    Ernst	        6000	        60
David	    Austin	        4800	        60
Valli	    Pataballa	    4800	        60
Diana	    Lorentz	        4200	            60
*/



SELECT FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_ID
     , SALARY * 1.1 "10%인상된급여"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = (
                        SELECT DEPARTMENT_ID
                        FROM DEPARTMENTS
                        WHERE DEPARTMENT_NAME = 'IT'
                      ); 
--==>>
/*
FIRST_NAME	LAST_NAME	SALARY	DEPARTMENT_ID	10%인상된급여
Alexander	Hunold	    9000	    60	        9900
Bruce	    Ernst	    6000	    60	        6600
David	    Austin	    4800	    60  	    5280
Valli	    Pataballa	4800	    60	        5280
Diana	    Lorentz 	    4200	        60	        4620
*/





UPDATE EMPLOYEES
SET SALARY = SALARY * 1.1
WHERE DEPARTMENT_ID = (
                        SELECT DEPARTMENT_ID
                        FROM DEPARTMENTS
                        WHERE DEPARTMENT_NAME = 'IT'
                      ); 
--==>> 5개 행 이(가) 업데이트되었습니다.



-- 확인

SELECT *
FROM EMPLOYEES;
--==>>
/*
EMPLOYEE_ID	FIRST_NAME	LAST_NAME	EMAIL	PHONE_NUMBER	HIRE_DATE	JOB_ID	SALARY	COMMISSION_PCT	MANAGER_ID	DEPARTMENT_ID
100	Steven	King	SKING	515.123.4567	2003-06-17	AD_PRES	24000			90
101	Neena	Kochhar	NKOCHHAR	515.123.4568	2005-09-21	AD_VP	17000		100	90
102	Lex	De Haan	LDEHAAN	515.123.4569	2001-01-13	AD_VP	17000		100	90
103	Alexander	Hunold	AHUNOLD	590.423.4567	2006-01-03	IT_PROG	9900		102	60
104	Bruce	Ernst	BERNST	590.423.4568	2007-05-21	IT_PROG	6600		103	60
105	David	Austin	DAUSTIN	590.423.4569	2005-06-25	IT_PROG	5280		103	60
106	Valli	Pataballa	VPATABAL	590.423.4560	2006-02-05	IT_PROG	5280		103	60
107	Diana	Lorentz	DLORENTZ	590.423.5567	2007-02-07	IT_PROG	4620		103	60
108	Nancy	Greenberg	NGREENBE	515.124.4569	2002-08-17	FI_MGR	12008		101	100
109	Daniel	Faviet	DFAVIET	515.124.4169	2002-08-16	FI_ACCOUNT	9000		108	100
110	John	Chen	JCHEN	515.124.4269	2005-09-28	FI_ACCOUNT	8200		108	100
111	Ismael	Sciarra	ISCIARRA	515.124.4369	2005-09-30	FI_ACCOUNT	7700		108	100
112	Jose Manuel	Urman	JMURMAN	515.124.4469	2006-03-07	FI_ACCOUNT	7800		108	100
113	Luis	Popp	LPOPP	515.124.4567	2007-12-07	FI_ACCOUNT	6900		108	100
114	Den	Raphaely	DRAPHEAL	515.127.4561	2002-12-07	PU_MAN	11000		100	30
115	Alexander	Khoo	AKHOO	515.127.4562	2003-05-18	PU_CLERK	3100		114	30
116	Shelli	Baida	SBAIDA	515.127.4563	2005-12-24	PU_CLERK	2900		114	30
117	Sigal	Tobias	STOBIAS	515.127.4564	2005-07-24	PU_CLERK	2800		114	30
118	Guy	Himuro	GHIMURO	515.127.4565	2006-11-15	PU_CLERK	2600		114	30
119	Karen	Colmenares	KCOLMENA	515.127.4566	2007-08-10	PU_CLERK	2500		114	30
120	Matthew	Weiss	MWEISS	650.123.1234	2004-07-18	ST_MAN	8000		100	50
121	Adam	Fripp	AFRIPP	650.123.2234	2005-04-10	ST_MAN	8200		100	50
122	Payam	Kaufling	PKAUFLIN	650.123.3234	2003-05-01	ST_MAN	7900		100	50
123	Shanta	Vollman	SVOLLMAN	650.123.4234	2005-10-10	ST_MAN	6500		100	50
124	Kevin	Mourgos	KMOURGOS	650.123.5234	2007-11-16	ST_MAN	5800		100	50
125	Julia	Nayer	JNAYER	650.124.1214	2005-07-16	ST_CLERK	3200		120	50
126	Irene	Mikkilineni	IMIKKILI	650.124.1224	2006-09-28	ST_CLERK	2700		120	50
127	James	Landry	JLANDRY	650.124.1334	2007-01-14	ST_CLERK	2400		120	50
128	Steven	Markle	SMARKLE	650.124.1434	2008-03-08	ST_CLERK	2200		120	50
129	Laura	Bissot	LBISSOT	650.124.5234	2005-08-20	ST_CLERK	3300		121	50
130	Mozhe	Atkinson	MATKINSO	650.124.6234	2005-10-30	ST_CLERK	2800		121	50
131	James	Marlow	JAMRLOW	650.124.7234	2005-02-16	ST_CLERK	2500		121	50
132	TJ	Olson	TJOLSON	650.124.8234	2007-04-10	ST_CLERK	2100		121	50
133	Jason	Mallin	JMALLIN	650.127.1934	2004-06-14	ST_CLERK	3300		122	50
134	Michael	Rogers	MROGERS	650.127.1834	2006-08-26	ST_CLERK	2900		122	50
135	Ki	Gee	KGEE	650.127.1734	2007-12-12	ST_CLERK	2400		122	50
136	Hazel	Philtanker	HPHILTAN	650.127.1634	2008-02-06	ST_CLERK	2200		122	50
137	Renske	Ladwig	RLADWIG	650.121.1234	2003-07-14	ST_CLERK	3600		123	50
138	Stephen	Stiles	SSTILES	650.121.2034	2005-10-26	ST_CLERK	3200		123	50
139	John	Seo	JSEO	650.121.2019	2006-02-12	ST_CLERK	2700		123	50
140	Joshua	Patel	JPATEL	650.121.1834	2006-04-06	ST_CLERK	2500		123	50
141	Trenna	Rajs	TRAJS	650.121.8009	2003-10-17	ST_CLERK	3500		124	50
142	Curtis	Davies	CDAVIES	650.121.2994	2005-01-29	ST_CLERK	3100		124	50
143	Randall	Matos	RMATOS	650.121.2874	2006-03-15	ST_CLERK	2600		124	50
144	Peter	Vargas	PVARGAS	650.121.2004	2006-07-09	ST_CLERK	2500		124	50
145	John	Russell	JRUSSEL	011.44.1344.429268	2004-10-01	SA_MAN	14000	0.4	100	80
146	Karen	Partners	KPARTNER	011.44.1344.467268	2005-01-05	SA_MAN	13500	0.3	100	80
147	Alberto	Errazuriz	AERRAZUR	011.44.1344.429278	2005-03-10	SA_MAN	12000	0.3	100	80
148	Gerald	Cambrault	GCAMBRAU	011.44.1344.619268	2007-10-15	SA_MAN	11000	0.3	100	80
149	Eleni	Zlotkey	EZLOTKEY	011.44.1344.429018	2008-01-29	SA_MAN	10500	0.2	100	80
150	Peter	Tucker	PTUCKER	011.44.1344.129268	2005-01-30	SA_REP	10000	0.3	145	80
151	David	Bernstein	DBERNSTE	011.44.1344.345268	2005-03-24	SA_REP	9500	0.25	145	80
152	Peter	Hall	PHALL	011.44.1344.478968	2005-08-20	SA_REP	9000	0.25	145	80
153	Christopher	Olsen	COLSEN	011.44.1344.498718	2006-03-30	SA_REP	8000	0.2	145	80
154	Nanette	Cambrault	NCAMBRAU	011.44.1344.987668	2006-12-09	SA_REP	7500	0.2	145	80
155	Oliver	Tuvault	OTUVAULT	011.44.1344.486508	2007-11-23	SA_REP	7000	0.15	145	80
156	Janette	King	JKING	011.44.1345.429268	2004-01-30	SA_REP	10000	0.35	146	80
157	Patrick	Sully	PSULLY	011.44.1345.929268	2004-03-04	SA_REP	9500	0.35	146	80
158	Allan	McEwen	AMCEWEN	011.44.1345.829268	2004-08-01	SA_REP	9000	0.35	146	80
159	Lindsey	Smith	LSMITH	011.44.1345.729268	2005-03-10	SA_REP	8000	0.3	146	80
160	Louise	Doran	LDORAN	011.44.1345.629268	2005-12-15	SA_REP	7500	0.3	146	80
161	Sarath	Sewall	SSEWALL	011.44.1345.529268	2006-11-03	SA_REP	7000	0.25	146	80
162	Clara	Vishney	CVISHNEY	011.44.1346.129268	2005-11-11	SA_REP	10500	0.25	147	80
163	Danielle	Greene	DGREENE	011.44.1346.229268	2007-03-19	SA_REP	9500	0.15	147	80
164	Mattea	Marvins	MMARVINS	011.44.1346.329268	2008-01-24	SA_REP	7200	0.1	147	80
165	David	Lee	DLEE	011.44.1346.529268	2008-02-23	SA_REP	6800	0.1	147	80
166	Sundar	Ande	SANDE	011.44.1346.629268	2008-03-24	SA_REP	6400	0.1	147	80
167	Amit	Banda	ABANDA	011.44.1346.729268	2008-04-21	SA_REP	6200	0.1	147	80
168	Lisa	Ozer	LOZER	011.44.1343.929268	2005-03-11	SA_REP	11500	0.25	148	80
169	Harrison	Bloom	HBLOOM	011.44.1343.829268	2006-03-23	SA_REP	10000	0.2	148	80
170	Tayler	Fox	TFOX	011.44.1343.729268	2006-01-24	SA_REP	9600	0.2	148	80
171	William	Smith	WSMITH	011.44.1343.629268	2007-02-23	SA_REP	7400	0.15	148	80
172	Elizabeth	Bates	EBATES	011.44.1343.529268	2007-03-24	SA_REP	7300	0.15	148	80
173	Sundita	Kumar	SKUMAR	011.44.1343.329268	2008-04-21	SA_REP	6100	0.1	148	80
174	Ellen	Abel	EABEL	011.44.1644.429267	2004-05-11	SA_REP	11000	0.3	149	80
175	Alyssa	Hutton	AHUTTON	011.44.1644.429266	2005-03-19	SA_REP	8800	0.25	149	80
176	Jonathon	Taylor	JTAYLOR	011.44.1644.429265	2006-03-24	SA_REP	8600	0.2	149	80
177	Jack	Livingston	JLIVINGS	011.44.1644.429264	2006-04-23	SA_REP	8400	0.2	149	80
178	Kimberely	Grant	KGRANT	011.44.1644.429263	2007-05-24	SA_REP	7000	0.15	149	
179	Charles	Johnson	CJOHNSON	011.44.1644.429262	2008-01-04	SA_REP	6200	0.1	149	80
180	Winston	Taylor	WTAYLOR	650.507.9876	2006-01-24	SH_CLERK	3200		120	50
181	Jean	Fleaur	JFLEAUR	650.507.9877	2006-02-23	SH_CLERK	3100		120	50
182	Martha	Sullivan	MSULLIVA	650.507.9878	2007-06-21	SH_CLERK	2500		120	50
183	Girard	Geoni	GGEONI	650.507.9879	2008-02-03	SH_CLERK	2800		120	50
184	Nandita	Sarchand	NSARCHAN	650.509.1876	2004-01-27	SH_CLERK	4200		121	50
185	Alexis	Bull	ABULL	650.509.2876	2005-02-20	SH_CLERK	4100		121	50
186	Julia	Dellinger	JDELLING	650.509.3876	2006-06-24	SH_CLERK	3400		121	50
187	Anthony	Cabrio	ACABRIO	650.509.4876	2007-02-07	SH_CLERK	3000		121	50
188	Kelly	Chung	KCHUNG	650.505.1876	2005-06-14	SH_CLERK	3800		122	50
189	Jennifer	Dilly	JDILLY	650.505.2876	2005-08-13	SH_CLERK	3600		122	50
190	Timothy	Gates	TGATES	650.505.3876	2006-07-11	SH_CLERK	2900		122	50
191	Randall	Perkins	RPERKINS	650.505.4876	2007-12-19	SH_CLERK	2500		122	50
192	Sarah	Bell	SBELL	650.501.1876	2004-02-04	SH_CLERK	4000		123	50
193	Britney	Everett	BEVERETT	650.501.2876	2005-03-03	SH_CLERK	3900		123	50
194	Samuel	McCain	SMCCAIN	650.501.3876	2006-07-01	SH_CLERK	3200		123	50
195	Vance	Jones	VJONES	650.501.4876	2007-03-17	SH_CLERK	2800		123	50
196	Alana	Walsh	AWALSH	650.507.9811	2006-04-24	SH_CLERK	3100		124	50
197	Kevin	Feeney	KFEENEY	650.507.9822	2006-05-23	SH_CLERK	3000		124	50
198	Donald	OConnell	DOCONNEL	650.507.9833	2007-06-21	SH_CLERK	2600		124	50
199	Douglas	Grant	DGRANT	650.507.9844	2008-01-13	SH_CLERK	2600		124	50
200	Jennifer	Whalen	JWHALEN	515.123.4444	2003-09-17	AD_ASST	4400		101	10
201	Michael	Hartstein	MHARTSTE	515.123.5555	2004-02-17	MK_MAN	13000		100	20
202	Pat	Fay	PFAY	603.123.6666	2005-08-17	MK_REP	6000		201	20
203	Susan	Mavris	SMAVRIS	515.123.7777	2002-06-07	HR_REP	6500		101	40
204	Hermann	Baer	HBAER	515.123.8888	2002-06-07	PR_REP	10000		101	70
205	Shelley	Higgins	SHIGGINS	515.123.8080	2002-06-07	AC_MGR	12008		101	110
206	William	Gietz	WGIETZ	515.123.8181	2002-06-07	AC_ACCOUNT	8300		205	110
*/

SELECT FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_ID
     , SALARY * 1.1 "10%인상된급여"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = (
                        SELECT DEPARTMENT_ID
                        FROM DEPARTMENTS
                        WHERE DEPARTMENT_NAME = 'IT'
                      ); 


ROLLBACK;
--==>> 롤백 완료.


--○ EMPLOYEES 테이블에서 JOB_TITLE 이 'Sales Manager' 인 사원들의
--   SALARY 를 해당 직무(직종)의 최고급여 (MAX_SALARY)로 수정한다.
--   단, 입사일이 2006년 이전 (해당 년도 제외) 입사자에 한해 적용할 수 있도록 처리한다.
--   (또한, 변경에 대한 겨로가 확인 후 ROLLBACK 수행한다~!!!)


SELECT *
FROM EMPLOYEES;

SELECT *
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'EMPLOYEES';

SELECT *
FROM JOBS;



-- #1 입사일이 2006년 이전 (HIRE_DATE) (2006년 포함 X)

SELECT *
FROM EMPLOYEES
WHERE EXTRACT(YEAR FROM HIRE_DATE) < 2006;


-- #2 JOB_TITLE 이 'Sales Manager' 인 사원

SELECT *
FROM EMPLOYEES;

SELECT *
FROM EMPLOYEES E
INNER JOIN JOBS J
ON E.JOB_ID = J.JOB_ID
WHERE EXTRACT(YEAR FROM HIRE_DATE) < 2006    -- ① 입사일이 2006년 이전이면서
      AND
      J.JOB_TITLE = 'Sales Manager';         -- ② 직업명이 Sales Manager


-- #3 SALARY 를 해당 직무(직종)의 최고급여 (MAX_SALARY)로 수정



SELECT E.*, J.MAX_SALARY
FROM EMPLOYEES E
INNER JOIN JOBS J
ON E.JOB_ID = J.JOB_ID
WHERE EXTRACT(YEAR FROM HIRE_DATE) < 2006  
      AND
      J.JOB_TITLE = 'Sales Manager'; 
  
  
SELECT E.*
FROM EMPLOYEES E
WHERE EXTRACT(YEAR FROM HIRE_DATE) < 2006  
      AND
      E.JOB_ID
      IN
      (
        SELECT JOB_ID
        FROM JOBS
        WHERE JOB_TITLE = 'Sales Manager'
        
      );
      
SELECT JOB_ID, JOB_TITLE
FROM JOBS
WHERE JOB_TITLE = 'Sales Manager';

SELECT MAX_SALARY
FROM JOBS
WHERE JOB_TITLE = 'Sales Manager';
      
-- #4 실제로 데이터 변경.


UPDATE EMPLOYEES E
SET E.SALARY
    =
    (
        SELECT MAX_SALARY
        FROM JOBS
        WHERE JOB_TITLE = 'Sales Manager'
    )
WHERE EXTRACT(YEAR FROM HIRE_DATE) < 2006  
      AND
      E.JOB_ID
      IN
      (
        SELECT JOB_ID
        FROM JOBS
        WHERE JOB_TITLE = 'Sales Manager'
        
      );  


SELECT *
FROM EMPLOYEES;

SELECT *
FROM EMPLOYEES
WHERE EXTRACT(YEAR FROM HIRE_DATE) < 2006  
      AND
      JOB_ID
      IN
      (
        SELECT JOB_ID
        FROM JOBS
        WHERE JOB_TITLE = 'Sales Manager'
        
      );
--==>>
/*
145	John	Russell	JRUSSEL	    011.44.1344.429268	2004-10-01	SA_MAN	20080	0.4	100	80
146	Karen	    Partners	    KPARTNER	011.44.1344.467268	2005-01-05	SA_MAN	20080	0.3	100	80
147	Alberto 	Errazuriz	AERRAZUR	011.44.1344.429278	2005-03-10	SA_MAN	20080	0.3	100	80
*/

ROLLBACK;


--★★★★★[INNER JOIN을 통해 UPDATE를 한 방식!!!!!!!!!!!!!!!!!!!]===============
UPDATE  
    (   
        SELECT E.*, J.MAX_SALARY
        FROM EMPLOYEES E
        INNER JOIN JOBS J
        ON E.JOB_ID = J.JOB_ID
        WHERE EXTRACT(YEAR FROM HIRE_DATE) < 2006  
              AND
               J.JOB_TITLE = 'Sales Manager'
    ) 
SET SALARY = MAX_SALARY;

--> 
--==============================================================================




SELECT *
FROM JOBS;
--==>>
/*
            :
SA_MAN	Sales Manager	10000	20080
            :
*/




UPDATE EMPLOYEES
SET SALARY = ('Sales Manager'의 MAX_SALARY)
WHERE JOB_TITLE = 'Sales Manager'
      AND 입사일이 2006년 이전;
      

UPDATE EMPLOYEES
SET SALARY = ('Sales Manager'의 MAX_SALARY)
WHERE JOB_ID = ('Sales Manager'의 JOB_ID)
      AND 입사일이 2006년 이전;


UPDATE EMPLOYEES
SET SALARY = ('Sales Manager'의 MAX_SALARY)
WHERE JOB_ID = ('Sales Manager'의 JOB_ID)
  AND HIRE_DATE이 2006년 이전;


UPDATE EMPLOYEES
SET SALARY = ('Sales Manager'의 MAX_SALARY)
WHERE JOB_ID = ('Sales Manager'의 JOB_ID)
  AND TO_CHAR(HIRE_DATE, 'YYYY') < 2006;



UPDATE EMPLOYEES
SET SALARY = ('Sales Manager'의 MAX_SALARY)
WHERE JOB_ID = ('Sales Manager'의 JOB_ID)
  AND TO_NUMBER(TO_CHAR(HIRE_DATE, 'YYYY')) < 2006;



UPDATE EMPLOYEES
SET SALARY = ('Sales Manager'의 MAX_SALARY)
WHERE JOB_ID = ('Sales Manager'의 JOB_ID)
  AND TO_NUMBER(TO_CHAR(HIRE_DATE, 'YYYY')) < 2006;


-- 'Sales Manager'의 MAX_SALARY

SELECT MAX_SALARY
FROM JOBS
WHERE JOB_TITLE = 'Sales Manager';
--==>> 20080


-- 'Sales Manager'의 JOB_ID

SELECT JOB_ID
FROM JOBS
WHERE JOB_TITLE = 'Sales Manager';
--==>> SA_MAN




UPDATE EMPLOYEES
SET SALARY = (20080)
WHERE JOB_ID = ('SA_MAN')
  AND TO_NUMBER(TO_CHAR(HIRE_DATE, 'YYYY')) < 2006;
  
  
-- ↓ 고정 값을 서브 쿼리로 구성.
  
  
UPDATE EMPLOYEES
SET SALARY = (
                SELECT MAX_SALARY
                FROM JOBS
                WHERE JOB_TITLE = 'Sales Manager'
             )
WHERE JOB_ID = (
                    SELECT JOB_ID
                    FROM JOBS
                    WHERE JOB_TITLE = 'Sales Manager'
               )
  AND TO_NUMBER(TO_CHAR(HIRE_DATE, 'YYYY')) < 2006;
--==>> 3개 행 이(가) 업데이트되었습니다.


SELECT *
FROM EMPLOYEES
WHERE JOB_ID = (
                    SELECT JOB_ID
                    FROM JOBS
                    WHERE JOB_TITLE = 'Sales Manager'
               )
  AND TO_NUMBER(TO_CHAR(HIRE_DATE, 'YYYY')) < 2006;
--=>>
/*
EMPLOYEE_ID	FIRST_NAME	LAST_NAME	EMAIL	PHONE_NUMBER	HIRE_DATE	JOB_ID	SALARY	COMMISSION_PCT	MANAGER_ID	DEPARTMENT_ID
145	John	Russell	JRUSSEL	011.44.1344.429268	2004-10-01	SA_MAN	20080	0.4	100	80
146	Karen	Partners	KPARTNER	011.44.1344.467268	2005-01-05	SA_MAN	20080	0.3	100	80
147	Alberto	Errazuriz	AERRAZUR	011.44.1344.429278	2005-03-10	SA_MAN	20080	0.3	100	80
*/


ROLLBACK;



--○ EMPLOYEES 테이블에서 SALARY 를
--   각 부서의 이름별로 다른 인상률을 적용하여 수정할 수 있도록 한다.
--   Finance → 10% 인상
--   Executive → 15% 인상
--   Accounting → 20% 인상
--   (쿼리문에 의한 변경 결과 확인 후 ROLLBACK~!!!)
  

-- #1 부서명이 'Finance', 'Executive', 'Accounting' 인 부서테이블 조회
SELECT *
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting');

SELECT *
FROM EMPLOYEES;

-- #2 INNER JOIN을 통해 테이블 조인 후, 인상률 계산

SELECT DECODE(D.DEPARTMENT_NAME, 'Finance', 1.1, 'Executive', 1.15, 'Accounting', 1.2) "인상률"
FROM DEPARTMENTS D
WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting'); 


SELECT E.*, DT.인상률, E.SALARY * DT.인상률 "인상된급여"
FROM
EMPLOYEES E
INNER JOIN
(
    SELECT DECODE(D.DEPARTMENT_NAME, 'Finance', 1.1, 'Executive', 1.15, 'Accounting', 1.2) "인상률"
         , DEPARTMENT_ID "부서ID"
    FROM DEPARTMENTS D
    WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting')
)DT
ON E.DEPARTMENT_ID = DT.부서ID;


















--==가영님꺼!!!!=======================
SELECT DECODE(D.DEPARTMENT_NAME, 
FROM EMPLOYEES E
INNER JOIN
FROM DEPARTMENT D
--=====================================


-- #3 이걸 다시 UPDATE 로 구성...

--① [INNER JOIN 과 UPDATE]■■■■■■■■■■■■■■■■■■■■■■■■■■■■

UPDATE
(
    SELECT E.*, DT.인상률, E.SALARY * DT.인상률 "인상된급여"
    FROM
    EMPLOYEES E
    INNER JOIN
    (
        SELECT DECODE(D.DEPARTMENT_NAME, 'Finance', 1.1, 'Executive', 1.15, 'Accounting', 1.2) "인상률"
             , DEPARTMENT_ID "부서ID"
        FROM DEPARTMENTS D
        WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting')
    )DT
    ON E.DEPARTMENT_ID = DT.부서ID
)

SET SALARY = "인상된급여";

--■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

--------------------------------------------------------------------------------

SELECT E.*, DECODE(D.DEPARTMENT_NAME, 'Finance', 1.1, 'Executive', 1.15, 'Accounting', 1.2) "인상률"
     , D.DEPARTMENT_NAME
FROM EMPLOYEES E
     INNER JOIN
     DEPARTMENTS D
     ON
     E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting'); 

/*
24000	Executive	1.15
17000	Executive	1.15
17000	Executive	1.15
12008	Finance	    1.1
9000	Finance	    1.1
8200    	Finance	    1.1
7700	Finance	    1.1
7800	Finance	    1.1
6900	Finance	    1.1
12008	Accounting	1.2
8300	Accounting	1.2
*/


/*
27600	Executive	1.15
19550	Executive	1.15
19550	Executive	1.15
13208.8	Finance	    1.1
9900	Finance	    1.1
9020    	Finance	    1.1
8470	Finance	    1.1
8580	Finance	    1.1
7590	Finance	    1.1
14409.6	Accounting	1.2
9960	Accounting	1.2
*/

ROLLBACK;


--○ EMPLOYEES 테이블에서 SALARY 를
--   각 부서의 이름별로 다른 인상률을 적용하여 수정할 수 있도록 한다.
--   Finance → 10% 인상
--   Executive → 15% 인상
--   Accounting → 20% 인상
--   (쿼리문에 의한 변경 결과 확인 후 ROLLBACK~!!!)



SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID 
      IN
      (
        SELECT DEPARTMENT_ID
        FROM DEPARTMENTS
        WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting')
      
      );
      

-- [SET 의 CASE WHEN과 UPDATE]■■■■■■■■■■■■■■■■■■■■■■■■■■■
UPDATE EMPLOYEES

SET SALARY  
      =  CASE WHEN DEPARTMENT_ID 
              IN
              (
                SELECT DEPARTMENT_ID
                FROM DEPARTMENTS
                WHERE DEPARTMENT_NAME IN ('Finance')
              )
          THEN SALARY * 1.1
          WHEN DEPARTMENT_ID 
              IN
              (
                SELECT DEPARTMENT_ID
                FROM DEPARTMENTS
                WHERE DEPARTMENT_NAME IN ('Executive')
              )
         THEN SALARY * 1.15
          WHEN DEPARTMENT_ID 
              IN
              (
                SELECT DEPARTMENT_ID
                FROM DEPARTMENTS
                WHERE DEPARTMENT_NAME IN ('Accounting')
              )
         THEN SALARY * 1.2
    END
WHERE DEPARTMENT_ID 
      IN
      (
        SELECT DEPARTMENT_ID
        FROM DEPARTMENTS
        WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting')
      
      ) ; 

--■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


--[선생님 푸링]

--○ EMPLOYEES 테이블에서 SALARY 를
--   각 부서의 이름별로 다른 인상률을 적용하여 수정할 수 있도록 한다.
--   Finance → 10% 인상
--   Executive → 15% 인상
--   Accounting → 20% 인상
--   (쿼리문에 의한 변경 결과 확인 후 ROLLBACK~!!!)



SELECT *
FROM EMPLOYEES;

SELECT *
FROM DEPARTMENTS;



SELECT *
FROM DEPARTMENTS
WHERE 부서명 IN ('Finance', 'Executive', 'Accounting');

SELECT *
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting');


SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting');



--==>>
/*
90
100
110
*/


SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME IN (90, 100, 110);


SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID 
      IN (
            SELECT DEPARTMENT_ID
            FROM DEPARTMENTS
            WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting')
         );
         
         

-- SET에서는 ALIAS를 부여하면 안 된다. 값을 가져오는 것이므로.

-- ★ 인상이 없다면 자신의 급여 그대로 받으면 되므로
--    CASE WHEN 절의 ELSE일 경우 SALARY로 구성!!!
UPDATE  EMPLOYEES
SET SALARY = CASE DEPARTMENT_ID WHEN ('Finance'의 부서아이디)
                                THEN SALARY * 1.1
                                WHEN ('Executive'의 부서아이디)
                                THEN SALARY * 1.15
                                WHEN ('Accounting'의 부서아이디)
                                THEN SALARY * 1.2
                                
                                ELSE SALARY
             END
WHERE DEPARTMENT_ID 
      IN (
            SELECT DEPARTMENT_ID
            FROM DEPARTMENTS
            WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting')
         );

-- ('Finance'의 부서아이디)

SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME = 'Finance';
--==>> 100


-- ('Executive'의 부서아이디)

SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME = 'Executive';
--==>> 90


-- ('Accounting'의 부서아이디)

SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME = 'Accounting';
--==>> 110







UPDATE  EMPLOYEES
SET SALARY = CASE DEPARTMENT_ID WHEN (100)
                                THEN SALARY * 1.1
                                WHEN (90)
                                THEN SALARY * 1.15
                                WHEN (110)
                                THEN SALARY * 1.2
                                
                                ELSE SALARY
             END
WHERE DEPARTMENT_ID 
      IN (
            SELECT DEPARTMENT_ID
            FROM DEPARTMENTS
            WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting')
         );






UPDATE  EMPLOYEES
SET SALARY = CASE DEPARTMENT_ID WHEN (
                                        SELECT DEPARTMENT_ID
                                        FROM DEPARTMENTS
                                        WHERE DEPARTMENT_NAME = 'Finance'
                                     )
                                THEN SALARY * 1.1
                                WHEN (
                                        SELECT DEPARTMENT_ID
                                        FROM DEPARTMENTS
                                        WHERE DEPARTMENT_NAME = 'Executive'
                                     )
                                THEN SALARY * 1.15
                                WHEN (
                                        SELECT DEPARTMENT_ID
                                        FROM DEPARTMENTS
                                        WHERE DEPARTMENT_NAME = 'Accounting'
                                     )
                                THEN SALARY * 1.2
                                
                                ELSE SALARY
             END
WHERE DEPARTMENT_ID 
      IN (
            SELECT DEPARTMENT_ID
            FROM DEPARTMENTS
            WHERE DEPARTMENT_NAME IN ('Finance', 'Executive', 'Accounting')
         );


-- 이 업데이트 쿼리문은 WHERE 절이 없더라도 제대로 동작한다!
-- SET SALARY = CASE WHEN 문에서 조건에 맞을 때만 변경되고
-- ELSE 일 경우 SALARY로 그대로 적용되기 때문에!
-- WHERE 절이 없더라도 전체 레코드를 돌아도 문제 없다!



-- 하지만, 반드시 WHERE 조건절을 작성해 주도록 한다!

--★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
-- WHERE 절을 쓰지 않고 업데이트 할 경우 --> 107개 행 이(가) 업데이트되었습니다.
-- WHERE 절을 쓰고 업데이트 할 경우 --> 11개 행 이(가) 업데이트되었습니다.
--★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

--==>> 즉, 같은 결과를 내는 데도 더 많은 리소스 소모가 일어난다는 것이다.
--     메모리에 107개의 행을 퍼올린 것과
--     메모리에 11개의 행을 퍼올린 것 중 뭐가 더 바람직한가? ==> 11개!!!




--------------------------------------------------------------------------------


--■■■ DELETE ■■■--

-- 1. 테이블에서 지정된 행(레코드)ㅡㅇㄹ 삭제하는데 사용하는 구문


-- 2. 형식 및 구조

--  DELETE [FROM] 테이블명
--  [WHERE 조건절];


-- [ DELETE 강조 2개!!]★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

--  ① DELETE 구문 같은 경우에, FROM 꼭 붙여서 작성하자. 실수를 줄일 수 있다.

--  ② 『SELECT *』 부터 작성하여 먼저 작성할 항목을 조회한 후에 
--     『SELECT *』을 『DELETE』로 바꾸어서 삭제하자!

-- ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★


-- 참조가 어떻게 구성되어 있느냐에 따라서 삭제가 안 될 수 있다.
-- 자기참조가 있는 테이블 EMPLOYEES MANAGER_ID 이 EMP_NO를 참조하게끔 되어있다.
-- 해당 사원번호가 등록되어 있지 않으면 MANAGER_ID 로 등록 불가
-- 내가 관리하는 사원들이 있을 경우(MANAGER_ID) 내 사원번호 삭제 불가.





SELECT *
FROM EMPLOYEES
WHERE EMPLOYEES_ID = 198;




--○ EMPLOYEES 테이블에서 직원들의 데이터를 삭제한다.
--   단, 부서명이 'IT'인 경우로 한정한다.


SELECT *
FROM EMPLOYEES;


SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME = 'IT';




SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID
      IN
      (
            SELECT DEPARTMENT_ID
            FROM DEPARTMENTS
            WHERE DEPARTMENT_NAME = 'IT'
      
      );

/*
103	Alexander	Hunold	AHUNOLD	590.423.4567	2006-01-03	IT_PROG	9000		102	60
104	Bruce	Ernst	BERNST	590.423.4568	2007-05-21	IT_PROG	6000		103	60
105	David	Austin	DAUSTIN	590.423.4569	2005-06-25	IT_PROG	4800		103	60
106	Valli	Pataballa	VPATABAL	590.423.4560	2006-02-05	IT_PROG	4800		103	60
107	Diana	Lorentz	DLORENTZ	590.423.5567	2007-02-07	IT_PROG	4200		103	60
*/




SELECT D.*, D.MANAGER_ID
FROM DEPARTMENTS D
WHERE DEPARTMENT_NAME = 'IT';


SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID
      IN
      (
            SELECT DEPARTMENT_ID
            FROM DEPARTMENTS
            WHERE DEPARTMENT_NAME = 'IT'
      
      );


SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID
      IN
      (
            SELECT DEPARTMENT_ID
            FROM DEPARTMENTS
            WHERE DEPARTMENT_NAME = 'IT'
      
      );





-- 'IT' 부서 사원 지우기 과정

--[ ① EMPLOYEE_ID를 FOREIGN KEY로 갖는 테이블의 컬럼 찾기 ]======================

SELECT *
FROM USER_CONSTRAINTS
WHERE R_CONSTRAINT_NAME = 'EMP_EMP_ID_PK';

/*
OWNER	CONSTRAINT_NAME	CONSTRAINT_TYPE	TABLE_NAME	SEARCH_CONDITION	R_OWNER	R_CONSTRAINT_NAME	DELETE_RULE	STATUS	DEFERRABLE	DEFERRED	VALIDATED	GENERATED	BAD	RELY	LAST_CHANGE	INDEX_OWNER	INDEX_NAME	INVALID	VIEW_RELATED
HR	    JHIST_EMP_ID_FK	R	            JOB_HISTORY		HR	EMP_EMP_ID_PK	NO ACTION	ENABLED	NOT DEFERRABLE	IMMEDIATE	VALIDATED	USER NAME			2023-11-01				
HR	    DEPT_MGR_FK	    R	            DEPARTMENTS		HR	EMP_EMP_ID_PK	NO ACTION	ENABLED	NOT DEFERRABLE	IMMEDIATE	VALIDATED	USER NAME			2023-11-01				
HR	    EMP_MANAGER_FK	R	            EMPLOYEES		HR	EMP_EMP_ID_PK	NO ACTION	ENABLED	NOT DEFERRABLE	IMMEDIATE	VALIDATED	USER NAME			2023-11-01				
*/


--[ ② ①번에서의 제약 조건을 모두 삭제 ]=========================================

--ⓐ [JHIST_EMP_ID_FK : JOB_HISTORY에서의 EMPLOYEE_ID FOREIGN KEY 제거.]
--ALTER TABLE JOB_HISTORY001
--DROP CONSTRAINT JHIST_EMP_ID_FK;

--ⓑ [DEPT_MGR_FK : DEPARTMENTS에서의 EMPLOYEE_ID FOREIGN KEY 제거.]
--ALTER TABLE DEPARTMENTS001
--DROP CONSTRAINT DEPT_MGR_FK;

--ⓒ [EMP_MANAGER_FK : EMPLOYEES에서의 EMPLOYEE_ID FOREIGN KEY 제거.]
--ALTER TABLE EMPLOYEES001
--DROP CONSTRAINT EMP_MANAGER_FK;

--==============================================================================


--[ ③ EMPLOYEE_ID를 FOREIGN KEY로 갖는 제약조건을 모두 삭제했으므로 ]=============
--[    EMP_EMP_ID_PK 제약조건 제거 (PRIMARY KEY)                   ]


--ALTER TABLE EMPLOYEES001
--DROP CONSTRAINT EMP_EMP_ID_PK;

--==============================================================================


--[ ④ EMPLOYEES의 EMPLOYEE_ID는 더이상 PRIMARY KEY가 아니고,              ]=====
--[    이를 참조하는 FOREIGN KEY도 더이상 존재하지 않으므로 데이터삭제 가능. ]

/*
    DELETE
    FROM EMPLOYEES001
    WHERE DEPARTMENT_ID
          IN
          (
                SELECT DEPARTMENT_ID
                FROM DEPARTMENTS
                WHERE DEPARTMENT_NAME = 'IT'
          
          );
*/
--==============================================================================



--※ 실제로는 EMPLOYEES 테이블의 데이터가(→ 삭제하고자 하는 대상 데이터)
--   다른 레코드에 의해 참조당하고 있는 경우
--   삭제되지 않을 수 있다는 사실을 인지할 수 있어야 하며
--   그에 대한 이유도 알아야 한다.