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
🕵️♂️ 문제 풀이 및 해답
-- 1. 업무(JOB)가 MANAGER 인 사원의 이름, 입사일 출력
SELECT ENAME, HIREDATE FROM EMP WHERE JOB = 'MANAGER';
-- 2. 사원명이 WARD 인 사원의 급여, 커미션을 출력
SELECT SAL, COMM FROM EMP WHERE ENAME = 'WARD';
-- 3. 30번 부서에 속하는 사원의 이름, 부서번호를 출력
SELECT ENAME, DEPTNO FROM EMP WHERE DEPTNO = 30;
-- 4-1. 급여가 1250을 초과, 3000이하인 사원의 이름, 급여를 출력
SELECT ENAME, SAL FROM EMP WHERE SAL > 1250 AND SAL <= 3000;
-- 4-2. 급여가 1250이상이고, 3000이하인 사원의 이름, 급여를 출력(범위가 포함됨)
SELECT ENAME, SAL FROM EMP WHERE SAL BETWEEN 1250 AND 3000;
-- 5. 커미션이 0 인 사원이 이름, 커미션을 출력
SELECT ENAME, COMM FROM EMP WHERE COMM = 0;
-- 6-1. 커미션 계약을 하지 않은 사원의 이름을 출력
SELECT ENAME FROM EMP WHERE COMM IS NULL;
-- 6-2. 커미션 계약을 한 사원의 이름을 출력
SELECT ENAME FROM EMP WHERE COMM IS NOT NULL;
-- 7. 입사일이 81/06/09 보다 늦은 사원이 이름, 입사일 출력(입사일을 기준으로 오름차순.)
SELECT ENAME, HIREDATE FROM EMP WHERE HIREDATE > '81/06/09' ORDER BY HIREDATE;
-- 8. 모든 사원의 급여마다 1000을 더한 급여를 출력
SELECT SAL + 1000 AS SAL FROM EMP;
-- 9. FORD 의 입사일, 부서번호를 출력
SELECT HIREDATE, DEPTNO FROM EMP WHERE ENAME = 'FORD';
-- 10. 사원명이 ALLEN인 사원의 급여를 출력하세요.
SELECT SAL FROM EMP WHERE ENAME = 'ALLEN';
-- 11. ALLEN의 급여보다 높은 급여를 받는 사원의 사원명, 급여를 출력
SELECT ENAME, SAL FROM EMP
WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME = 'ALLEN');
-- 12. 가장 높은/낮은 커미션을 구하세요.(최대값/최소값)
SELECT MAX(COMM), MIN(COMM) FROM EMP;
-- 13. 가장 높은 커미션을 받는 사원의 이름을 구하세요.
SELECT ENAME FROM EMP WHERE COMM = (SELECT MAX(COMM) FROM EMP);
-- 14. 가장 높은 커미션을 받는 사원의 입사일보다 늦은 사원의 이름 입사일을 출력
SELECT ENAME, HIREDATE FROM EMP
WHERE HIREDATE > (SELECT HIREDATE FROM EMP
WHERE COMM = (SELECT MAX(COMM) FROM EMP));
-- 15. JOB이 CLERK 인 사원들의 급여의 합을 구하세요.
SELECT SUM(SAL) FROM EMP WHERE JOB = 'CLERK';
-- 16. JOB 이 CLERK 인 사원들의 급여의 합보다 급여가 많은 사원이름을 출력.
SELECT ENAME FROM EMP WHERE SAL
> (SELECT SUM(SAL) FROM EMP WHERE JOB = 'CLERK');
-- 17. JOB이 CLERK 인 사원들의 급여와 같은 급여를 받는 사원의 이름, 급여를 출력(급여 내림차순으로)
-- 값이 2개 이상이라서 = 사용 불가능? 대신 IN 사용?
SELECT ENAME, SAL FROM EMP WHERE SAL = (SELECT SAL FROM EMP WHERE JOB = 'CLERK')
ORDER BY SAL DESC;
-- 값이 1개일 경우엔 = 사용가능?
SELECT ENAME, SAL FROM EMP WHERE SAL = (SELECT SAL FROM EMP WHERE JOB = 'PRESIDENT')
ORDER BY SAL DESC;
-- 카페정답
SELECT ename, sal FROM EMP WHERE sal IN (SELECT SAL FROM EMP WHERE JOB = 'CLERK')
ORDER BY sal; -- DESC 추가?
사원명 같은 건 =로 했는데, 동명이인이 있을 수 있으니 IN으로 처리하는 것이 더 좋은건가??ㅠ
💻 후기
= 와 IN 정리. =은 단일값 비교, IN은 다중값 비교 시 사용
728x90
'🤯TIL > Oracle SQL' 카테고리의 다른 글
[SQL 기본쿼리] 연습문제 3 (0) | 2022.11.23 |
---|---|
[SQL 기본쿼리] 연습문제 2 (0) | 2022.11.23 |
[SQL 기본쿼리] 연습문제 테이블 생성 준비 (0) | 2022.11.23 |
[연습문제] 테이블 구조 생성하기 (0) | 2022.10.18 |
[연습문제] 테이블 칼럼 만들기 (0) | 2022.10.17 |