[Oracle] 오라클 INNER JOIN 연습문제
예제 테이블 SQL 다운로드
https://drive.google.com/file/d/1J-FsC7T67emrsQ52GJWFizrnV8gsuWJa/view?usp=sharing
SELECT * FROM emp;
SELECT * FROM dept;
--INNER JOIN 문제
--직업이 SALESMAN인 사원들 중에서 최대 월급을 출력하시오
SELECT MAX(sal) FROM emp WHERE job = 'SALESMAN';
--부서번호, 부서번호별 최대 월급을 출력하시오.
SELECT deptno, MAX(sal) FROM emp GROUP BY deptno;
--위의 결과에서 20번은 제외하고 출력
SELECT deptno, MAX(sal) FROM emp WHERE deptno<>20 GROUP BY deptno;
--직업, 직업별 최소 월급을 출력하는데, 직업이 SALESMAN인 사원들을 제외하고 출력하시오.
SELECT job, MIN(sal) FROM emp WHERE job <> 'SALESMAN' GROUP BY job;
--위의 결과에서 최소월급이 높은것부터 출력하시오.
SELECT job, MIN(sal) FROM emp WHERE job <> 'SALESMAN' GROUP BY job ORDER BY MIN(sal) DESC;
--직업과 직업별 토탈 월급을 출력하는데, 직업별 토탈 월급이 4000 이상인 것만 출력하시오.
SELECT job, SUM(sal) FROM emp GROUP BY job HAVING SUM(sal) >= 4000;
--직업, 직업별 토탈 월급을 출력하는데, 직업이 SALESMAN은 제외하고 출력하고, 직업별 토탈 월급이 4000이상인 것만 출력하고 또 직업별 토탈 월급이 높은 것 부터 출력하시오.
SELECT job, SUM(sal) FROM emp WHERE job<>'SALESMAN' GROUP BY job HAVING SUM(sal) >= 4000 ORDER BY SUM(sal) DESC;
--입사한 년도(4자리), 입사한 년도별 토탈 월급을 출력하시오.
SELECT 19||SUBSTR(hiredate,1,2), SUM(sal) FROM emp GROUP BY SUBSTR(hiredate,1,2);
SELECT TO_CHAR(hiredate,'RRRR'),SUM(sal) FROM emp GROUP BY TO_CHAR(hiredate,'RRRR');
--위의 문제에서 토탈 월급을 출력할떄 콤마가 찍히게 천단위를 부여하시오.
SELECT 19||SUBSTR(hiredate,1,2), TO_CHAR( SUM(sal) , '999,999,999,999,999') FROM emp GROUP BY SUBSTR(hiredate,1,2);
--사원 테이블의 사원수가 몇명인지 조회하시오.
SELECT COUNT(*) FROM emp;
--커미션을 카운트 하시오. --> MAX, MIN, COUNT => NULL값을 무시(제외)
SELECT COUNT(comm) FROM emp;
SELECT COUNT(NVL(comm,0)) FROM emp;
--사원 테이블의 커미션의 평균값을 출력하시오. --> MAX, MIN, COUNT => NULL값을 무시(제외)
SELECT ROUND( AVG(comm),2) FROM emp;
SELECT ROUND( AVG(NVL(comm,0)),2 ) FROM emp; --위와 나누는 값이 달라서 값이 달라진다.
--직업, 직업별 인원수를 출력하는데, 직업이 SALESMAN은 제외하고 출력하고 직업별 인원수가 3명 이상인 것만 출력하고, 직업별 인원수가 높은것 부터 출력하시오.
SELECT job, COUNT(job) FROM emp WHERE job<>'SALESMAN' GROUP BY job HAVING COUNT(job) >= 3 ORDER BY COUNT(job) DESC;
SELECT job, COUNT(*) FROM emp WHERE job<>'SALESMAN' GROUP BY job HAVING COUNT(*) >= 3 ORDER BY COUNT(*) DESC;
--직업, 직업별 인원수를 출력하는데 직업별 인원수가 3명 이상인것만 출력하시오.
SELECT job, COUNT(job) FROM emp GROUP BY job HAVING COUNT(job) >= 3;
SELECT job, COUNT(*) FROM emp GROUP BY job HAVING COUNT(*) >= 3;
--부서번호, 부서번호별 평균 월급을 출력하는데, 20번 부서번호는 제외하고 출력하고 부서번호별 평균 월급이 2000이상인 것만 출력하며 부서번호별 평균 월급이 높은것 부터 출력하시오
SELECT deptno, AVG(sal) FROM emp WHERE deptno<>20 GROUP BY deptno HAVING AVG(sal) >= 2000 ORDER BY 2 DESC;
SELECT * FROM emp;
SELECT * FROM dept;
--사원이름, 부서위치를 출력하시오.
SELECT ename, loc FROM emp, dept WHERE emp.deptno = dept.deptno;
--직업이 SALESMAN인 사원들의 이름과 월급과 직업과 부서위치를 출력하세요.
SELECT ename, sal, job, loc FROM emp, dept WHERE emp.deptno = dept.deptno AND job='SALESMAN';
--사원이름, 월급, 부서위치, 부서번호를 출력하시오. (SELECT문에서 조회할 데이터의 테이블명을 명시해주면 속도가 빨라진다.)
SELECT ename, sal, loc, emp.deptno FROM emp, dept WHERE emp.deptno = dept.deptno;
--DALLAS에서 근무하는 사원들의 이름과 부서위치와 월급을 출력하시오.
SELECT ename, loc, sal FROM emp, dept WHERE emp.deptno = dept.deptno AND loc='DALLAS';
--월급이 3000이상인 사원들의 이름과 월급과 부서위치와 입사일을 출력하시오.
SELECT ename, loc, hiredate FROM emp, dept WHERE emp.deptno = dept.deptno AND (sal)>=3000;
--1981년도에 입사한 사원들의 이름과 입사일과 부서위치를 출력하시오.
SELECT ename, hiredate, loc FROM emp, dept WHERE emp.deptno = dept.deptno AND TO_CHAR(hiredate,'RRRR')=1981; --ORACLE JOIN
SELECT ename, hiredate, loc FROM emp, dept WHERE emp.deptno = dept.deptno AND TO_CHAR(hiredate,'YYYY')=1981; --ORACLE JOIN
SELECT ename, hiredate, loc FROM emp, dept WHERE emp.deptno = dept.deptno AND hiredate LIKE '81%'; --ORACLE JOIN
SELECT ename, hiredate, loc FROM emp JOIN dept ON emp.deptno = dept.deptno AND TO_CHAR(hiredate,'RRRR')=1981; --ANSI JOIN
--부서위치, 부서위치별 토탈월급을 출력하시오
SELECT loc, TO_CHAR(SUM(sal),'9,999,999') FROM emp, dept WHERE emp.deptno = dept.deptno GROUP BY loc; --ORACLE JOIN
SELECT loc, TO_CHAR(SUM(sal),'9,999,999') FROM emp JOIN dept on emp.deptno = dept.deptno GROUP BY loc; --ANSI JOIN
--emp 테이블과 salgrade 테이블을 조인해서 이름과 월급과 grade(급여등급)을 출력하시오.
SELECT empno, ename, job, hiredate, sal, grade FROM emp, salgrade s WHERE sal BETWEEN s.losal AND s.hisal;
--급여 등급이 2등급인 사원들의 이름과 월급과 급여등급을 출력하시오.
SELECT empno, ename, job, hiredate, sal, grade FROM emp, salgrade s WHERE sal BETWEEN s.losal AND s.hisal AND grade=2;
SELECT e1.empno "사번" ,e1.ename "이름", e2.MGR "사수번호", e2.ename "사수이름"
FROM emp e1, emp e2
WHERE e1.mgr=e2.empno(+);
댓글
댓글 쓰기