ORACLE DB SQL
๐ฉ๐ผโ๐ป๋ฌธ์ 5๊ฐ ๋ง๋ค๊ธฐ ์ฑ๋ฆฐ์ง๐ฉ๐ผโ๐ป
Last updated
Was this helpful?
๐ฉ๐ผโ๐ป๋ฌธ์ 5๊ฐ ๋ง๋ค๊ธฐ ์ฑ๋ฆฐ์ง๐ฉ๐ผโ๐ป
Last updated
Was this helpful?
์ฌ์ฉํ ๊ณ์ : Homework ์ฌ์ฉํ TABLE : EMPLOYEE, DEPARTMENT, LOCATION, JOB, NATIONAL, SAL_GRADE ์กฐ๊ฑด : SELECT๋ฌธ์ ํ์ฉํ ๊ทธ ์ด๋ ์ฟผ๋ฆฌ๋ผ๋ ๊ฐ๋ฅ
SELECT * FROM EMPLOYEE;
SELECT * FROM DEPARTMENT;
SELECT * FROM LOCATION;
SELECT * FROM JOB;
SELECT * FROM NATIONAL;
SELECT * FROM SAL_GRADE;
Story๋ฅผ ํตํ SQL ๋ฌธ์ ๋ง๋ค๊ธฐ
๋ชจ๋ ํ ์ด๋ธ JOINํด์ ์ ์ฒด๋ณด๊ธฐ
์์ ๋ ๋ฐฐ์ด ๋ด์ฉ์ ์ ์ ํ๊ฒ ์์ด์ ๋ง๋ค๊ธฐ
๋ฌธ์ ๊ผฌ์์ ๋ด์ง ์๊ธฐ - ๋ด๊ฐ ์ด๋ ค์ฐ๋ฉด ๋จ๋ค๋ ์ด๋ ค์
26์ผ 23:59๋ถ๊น์ง 15๋ฌธ์ ์ ์ถ(์ด๋ฉ์ผ ์ ์ถ)
1-2 DB_HW(์กฐ์์ด๋ฆ).sql
JOIN์ ํตํ ์ ์ฒด ์ฌ์์ ์ ๋ณด ์กฐํํด๋ณด๊ธฐ
SELECT * FROM EMPLOYEE
JOIN JOB USING(JOB_CODE)
LEFT JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
LEFT JOIN LOCATION ON(LOCATION_ID = LOCAL_CODE)
JOIN NATIONAL USING(NATIONAL_CODE)
LEFT JOIN SAL_GRADE USING(SAL_LEVEL)
ORDER BY EMP_ID, EMP_NAME;
๋ฌธ์ 1.
--๋ฌธ์ 1.
/*
์ด๋ฒ ํํ์ผ๋ก ์ธํด ์ผ๋ณธ ํ์ฟ ์๋ง ์ง์ญ์ ์๋ ๋ฐฉ์ฌ๋ฅ ํ๊ธฐ๋ฌผ์ด ํผ์ง๊ฒ ๋์์ต๋๋ค.
๋ฐ๋ผ์ ๋ณธ์ฌ๋ ์ผ๋ณธ ์ง์ฌ์ ์๋ ๋ชจ๋ ์ง์๋ค์ ํ๊ตญ์ผ๋ก ๊ท๊ตญ ์กฐ์น ์ํค๊ณ ์ ํฉ๋๋ค.
๊ทผ๋ฌด์ง์ญ ์ฝ๋๊ฐ 'L2'์ธ ์ง์์ ์ฌ๋ฒ, ์ฌ์๋ช
, ๋ถ์๋ช
, ์ง๊ธ์ฝ๋, ์ฐ๋ฝ์ฒ, ์ด๋ฉ์ผ,
๊ทผ๋ฌด์ง์ญ์ ์กฐํํ์์ค.
*/
SELECT EMP_ID ์ฌ๋ฒ, EMP_NAME ์ฌ์๋ช
, DEPT_TITLE ๋ถ์๋ช
, JOB_CODE ์ง๊ธ์ฝ๋,
PHONE ์ฐ๋ฝ์ฒ, EMAIL ์ด๋ฉ์ผ, LOCAL_CODE ์์น์ฝ๋, NATIONAL_CODE ๊ทผ๋ฌด์ง์ญ์ฝ๋,
NATIONAL_NAME ๊ทผ๋ฌด์ง์ญ
FROM EMPLOYEE
JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
JOIN LOCATION ON(LOCAL_CODE = LOCATION_ID)
JOIN NATIONAL USING(NATIONAL_CODE)
WHERE LOCAL_CODE = 'L2';
๋ฌธ์ 2.
--๋ฌธ์ 2.
/*
๊ฐ๋ฐํ์ ์ค์๋ก ์ฌ์๋ค์ ์ฐ๋ฝ์ฒ๊ฐ ์ ์ถ๋์์ต๋๋ค.
๋ชจ๋ ์ฌ์๋ค์ ์ฐ๋ฝ์ฒ ๋ค 4์๋ฆฌ๋ฅผ '*'๋ก ์ฑ์ฐ๊ณ
(์ฐ๋ฝ์ฒ๊ฐ ์๋ ์ฌ๋๋ค์ ๊ณ ๋ คํ์ง ์์)
์ฌ๋ฒ, ์ฌ์์ด๋ฆ, ์ฐ๋ฝ์ฒ, ๋ถ์๋ช
์ ์กฐํํ๋ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ์์ค.
*/
SELECT EMP_ID ์ฌ๋ฒ, EMP_NAME ์ฌ์๋ช
,
RPAD(SUBSTR(PHONE, 1, 7), 11,'*') ์ฐ๋ฝ์ฒ์์ ,
DEPT_TITLE ๋ถ์๋ช
FROM EMPLOYEE
JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID);
๋ฌธ์ 3.
--๋ฌธ์ 3.
/*
์ฐ๋ฝ์ฒ๋ฅผ ์์ ํ๋ค ๋ณด๋, 011, 017 ๋ฒํธ๋ฅผ ์ฐ๋ ์ง์๋ค์ ์ํด
์ต์ ๊ฐค๋ญ์ ๋
ธํธ 10+๋ฅผ ํ์ฌ ๋ณต์ง ์ฐจ์์ผ๋ก ์ง๊ธํ๊ธฐ๋ก ํ๋ค.
์ฐ๋ฝ์ฒ๊ฐ '011', '017'๋ก ์์ํ๋ ์ง์๋ค์ ์ฌ๋ฒ, ์ฌ์๋ช
, ์ฐ๋ฝ์ฒ, ๋ถ์๋ช
,
์ง๊ธ๋ช
์ ์กฐํํ๊ณ ์ฐ๋ฝ์ฒ๋ฅผ '010'์ผ๋ก ์์ํ๋ ๋ฒํธ๋ก ์์ ํ๋
์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ์์ค.
*/
SELECT EMP_ID ์ฌ๋ฒ, EMP_NAME ์ฌ์๋ช
, PHONE ์ฐ๋ฝ์ฒ, DEPT_TITLE ๋ถ์๋ช
,
JOB_NAME ์ง๊ธ๋ช
FROM EMPLOYEE
JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
JOIN JOB USING(JOB_CODE)
WHERE SUBSTR(PHONE, 1, 3) IN('011', '017');
UPDATE EMPLOYEE
SET PHONE = '01047365678'
WHERE SUBSTR(PHONE, 1, 3) = ('011');
UPDATE EMPLOYEE
SET PHONE = '01012839065'
WHERE SUBSTR(PHONE, 1, 3) = ('017');
ROLLBACK;
SELECT EMP_ID, EMP_NAME, PHONE
FROM EMPLOYEE
WHERE EMP_NAME IN('์ค์ํด', '์ฌ๋ด์ ');
๋ฌธ์ 4.
--๋ฌธ์ 4.
/*
๋ณธ์ฌ๋ ๊ทผ๋ฌด๋
์๊ฐ 5๋
์ด์์ธ ์ฌ๋๋ค์๊ฒ ์ฅ๊ธฐ ๊ทผ์ ์๋น(์๊ธ์ 20%)๊ณผ ํจ๊ป
3์ผ๊ฐ์ ํด๊ฐ๋ฅผ ์ฃผ๊ธฐ๋ก ํ์ต๋๋ค.
๊ทผ๋ฌด๋
์๊ฐ 5๋
์ด์ 29๋
๋ฏธ๋ง(๋ํ ์ ์ธ)์ธ
์ฌ์๋ค์ ์ฌ๋ฒ, ์ฌ์๋ช
, ๋ถ์์ฝ๋, ์ง๊ธ์ฝ๋, ์ง๊ธ๋ช
, ์ฅ๊ธฐ๊ทผ์์๋น์ ์กฐํํ์์ค.
*/
SELECT EMP_ID ์ฌ๋ฒ, EMP_NAME ์ฌ์๋ช
, DEPT_CODE ๋ถ์์ฝ๋, JOB_CODE ์ง๊ธ์ฝ๋,
JOB_NAME ์ง๊ธ๋ช
,
TO_CHAR(TRUNC(SALARY*0.2, -4), 'L999,999,999') ์ฅ๊ธฐ๊ทผ์์๋น
FROM EMPLOYEE
JOIN JOB USING(JOB_CODE)
WHERE TRUNC(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)/12) BETWEEN 5 AND 28;
๋ฌธ์ 5.
--๋ฌธ์ 5.
/*
๋ณธ์ฌ์ ์๊ธฐ๊ฐ ๋ฅ์ณ ๊ธํ ๊ตฌ์กฐ์กฐ์ ๊ณต๋ฌธ์ด ๋ด๋ ค์์ต๋๋ค.
์
์ฌ๋
๋๊ฐ 2000๋
์ด์ ์ธ ์ง์์ด๊ฑฐ๋ ๋ถ์๋ณ ๊ฐ์ฅ ๋์ ์๊ธ์
๋ฐ๋ ์ง์๋ค๋ถํฐ 1์์๋ก ๋ช
์ํด์ง ๋์์์
๋๋ค.
ํด๋น ์กฐ๊ฑด์ ๋ง๋ ์ง์๋ค์ ์ฌ๋ฒ, ์ฌ์๋ช
, ๋ถ์์ฝ๋, ์ง๊ธ์ฝ๋, ์๊ธ,
์
์ฌ์ผ์ ์กฐํํ์์ค.
(๋จ, ์๊ธ์ TO_CHAR ์ด์ฉํ์ฌ ํ์ ํ๊ธฐ(์ข์ฐ ๊ณต๋ฐฑ์ ๊ฑฐ)/
๋ถ์์ฝ๋๊ฐ null์ผ ๊ฒฝ์ฐ '์์' ํ๊ธฐ)
*/
SELECT EMP_ID ์ฌ๋ฒ, EMP_NAME ์ฌ์๋ช
, NVL(DEPT_CODE,'์์') ๋ถ์์ฝ๋,
JOB_CODE ์ง๊ธ์ฝ๋, TRIM(TO_CHAR(SALARY, 'L999,999,999')) ์๊ธ,
HIRE_DATE ์
์ฌ์ผ
FROM EMPLOYEE
WHERE (DEPT_CODE, SALARY) IN(SELECT DEPT_CODE, MAX(SALARY)
FROM EMPLOYEE GROUP BY DEPT_CODE)
OR HIRE_DATE < TO_DATE('00/01/01');