728x90
📢 테이블 준비
https://dorothy-yang.tistory.com/191
[SQL 기본쿼리] 연습문제 테이블 생성 준비
CREATE TABLE DEPT (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, DNAME VARCHAR2(14) , LOC VARCHAR2(13) ) ; CREATE TABLE EMP (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2
dorothy-yang.tistory.com
🕵️♂️ 문제 풀이 및 해답
-- EMP : EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO -- DEPT : DEPTNO, DNAME 부서명, LOC 지역 -- 공통 : DEPTNO -- 사용문법이 대부분 JOIN, SUB QUERY 문법위주 연습. -- 1. 업무(JOB)가 MANAGER인 사원의 이름, 부서명, 입사일을 출력 SELECT ENAME, DNAME, HIREDATE FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND JOB = 'MANAGER'; -- 2. 사원명이 WARD인 사원의 급여, 부서번호, 부서위치, 커미션을 출력 -- E.DEPTNO 표시 : 어디에서 나온 DEPTNO인지 정확하게 명시해줘야 함! SELECT SAL, E.DEPTNO, LOC, COMM FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND ENAME = 'WARD'; -- 3. 30번 부서에 속하는 사원의 이름, 부서번호, 부서위치를 출력 SELECT ENAME, E.DEPTNO, LOC FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO = 30; -- 4-1. 급여가 1250을 초과, 3000이하인 사원의 이름, 급여, 부서명을 출력 -- AND 사용 SELECT ENAME, SAL, DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND SAL > 1250 AND SAL <= 3000; -- 4-2. 급여가 1250이상 3000 이하인 사원의이름, 급여(BETWEEN 사용) SELECT ENAME, SAL FROM EMP WHERE SAL BETWEEN 1250 AND 3000; -- 5. 커미션이 0 인 사원의 이름, 부서위치, 커미션을 출력 SELECT ENAME, LOC, COMM FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND COMM = 0; -- 6.커미션 계약을 하지않은 사원의 이름, 부서명을 출력 SELECT ENAME, DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND COMM IS NULL; -- 7. 입사일이 81/06/09보다 늦은 사원이 이름, 부서위치, 입사일 출력(입사일 오름차순) SELECT ENAME, LOC, HIREDATE FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND HIREDATE > '81/06/09' ORDER BY HIREDATE ASC; -- 8. 모든 사원의 급여마다 1000을 더한 급여액, 사원명, 급여, 부서명을 출력 SELECT SAL+1000, ENAME, SAL, DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO; -- 9. FORD의 입사일, 부서명을 출력 SELECT HIREDATE, DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND ENAME = 'FORD'; -- 10. 사원명이 ALLEN인 사원의 급여, 부서번호, 부서위치를 출력 SELECT SAL, E.DEPTNO, LOC FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND ENAME = 'ALLEN'; -- 11. ALLEN의 급여보다 높은 급여를 받는 사원의 사원명, 부서명, 부서위치, 급여를 출력 SELECT ENAME, DNAME, LOC, SAL FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND SAL > (SELECT SAL FROM EMP WHERE ENAME = 'ALLEN'); -- 12. 가장 높은/낮은 커미션을 구하세요. SELECT MAX(COMM), MIN(COMM) FROM EMP; -- 13. 가장 높은 커미션을 받는 사원의 이름, 부서명을 구하세요. SELECT ENAME, DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND COMM = (SELECT MAX(COMM) FROM EMP); -- 14. JOB이 CLERK 인 사원들의 급여의 합을 구하세요 SELECT SUM(SAL) FROM EMP WHERE JOB = 'CLERK'; -- 15. JOB 이 CLERK 인 사원들의 급여의 합보다 급여가 많은 사원이름, 부서명을 출력 SELECT ENAME, DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND SAL > (SELECT SUM(SAL) FROM EMP WHERE JOB = 'CLERK'); -- 16. JOB이 CLERK인 사원들의 급여와 같은 급여를 받는 사원의 이름,부서명,급여를 출력(급여가 높은순으로 출력) SELECT ENAME, DNAME, SAL FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND SAL IN (SELECT SAL FROM EMP WHERE JOB = 'CLERK') ORDER BY SAL DESC;
💻 후기
JOIN 관계 생각보다 술술 써 내려져갔다 :) 드디어 완벽이해 완료 !
728x90
'🤯TIL > Oracle SQL' 카테고리의 다른 글
[Oracle] SQL Developer에서 ERD 출력하는 방법 (0) | 2023.01.21 |
---|---|
[SQL 기본쿼리] 연습문제 4 (0) | 2022.11.29 |
[SQL 기본쿼리] 연습문제 2 (0) | 2022.11.23 |
[SQL 기본쿼리] 연습문제 1 (0) | 2022.11.23 |
[SQL 기본쿼리] 연습문제 테이블 생성 준비 (0) | 2022.11.23 |