728x90
📌 연습문제 테이블 생성하기
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),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87')-85,3000,NULL,20);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,to_date('13-JUL-87')-51,1100,NULL,20);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,to_date('19-4-1987','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,to_date('23-5-1987','dd-mm-yyyy'),1100,NULL,20);
COMMIT;
📌 기본쿼리 1 문제
1. 업무(JOB)가 MANAGER 인 사원의 이름, 입사일 출력
2. 사원명이 WARD 인 사원의 급여, 커미션을 출력
3. 30번 부서에 속하는 사원의 이름, 부서번호를 출력
4-1. 급여가 1250을 초과, 3000이하인 사원의 이름, 급여를 출력
4-2. 급여가 1250이상이고, 3000이하인 사원의 이름, 급여를 출력(범위가 포함됨)
5. 커미션이 0 인 사원이 이름, 커미션을 출력
6-1. 커미션 계약을 하지 않은 사원의 이름을 출력
6-2. 커미션 계약을 한 사원의 이름을 출력
7. 입사일이 81/06/09 보다 늦은 사원이 이름, 입사일 출력(입사일을 기준으로 오름차순.)
8. 모든 사원의 급여마다 1000을 더한 급여를 출력
9. FORD 의 입사일, 부서번호를 출력
10. 사원명이 ALLEN인 사원의 급여를 출력하세요.
11. ALLEN의 급여보다 높은 급여를 받는 사원의 사원명, 급여를 출력
12. 가장 높은/낮은 커미션을 구하세요.(최대값/최소값)
13. 가장 높은 커미션을 받는 사원의 이름을 구하세요.
14. 가장 높은 커미션을 받는 사원의 입사일보다 늦은 사원의 이름 입사일을 출력
15. JOB이 CLERK 인 사원들의 급여의 합을 구하세요.
16. JOB 이 CLERK 인 사원들의 급여의 합보다 급여가 많은 사원이름을 출력.
17. JOB이 CLERK 인 사원들의 급여와 같은 급여를 받는 사원의 이름, 급여를 출력(급여 내림차순으로)
🧐 버터감자 기본쿼리 문제풀이
-- 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 인 사원들의 급여와 같은 급여를 받는 사원의 이름, 급여를 출력(급여 내림차순으로)
SELECT ENAME, SAL FROM EMP WHERE SAL IN (SELECT SAL FROM EMP WHERE JOB='CLERK')
ORDER BY SAL;
'📓 TechNote > SQL' 카테고리의 다른 글
[SQL 중급쿼리] 연습 문제 풀이 1 (0) | 2022.12.21 |
---|---|
[SQL 기본쿼리] 연습 문제 풀이 4 (0) | 2022.12.06 |
[SQL 기본쿼리] 연습 문제 풀이 3 (0) | 2022.12.06 |
[SQL 기본쿼리] 연습 문제 풀이 2 (0) | 2022.12.06 |
[DB] SQL관련 온라인북 사이트 (0) | 2022.10.13 |