SQL-내장함수 & 서브쿼리
DECODE 함수
-
형식 → DECODE ( 컬럼명, 비교데이터1, 결과데이터1, 비교데이터2, 결과데이터2, 비교데이터3, 결과데이터3)
-
문제) 사원들의 사원번호, 사원명, 부서번호, 부서명 , 사원번호에 대한 홀수,짝수 를 출력하시오.
SELECT EMPNO, ENAME, DEPTNO, DECODE(DEPTNO, 10, 'ACCOUNTING', 20, 'RESEARCH', 30, 'SALES') AS 부서명 FROM EMP; EMPNO ENAME DEPTNO 부서명 ---------- -------------------- ---------- -------------------- 7369 SMITH 20 RESEARCH 7499 ALLEN 30 SALES 7521 WARD 30 SALES 7566 JONES 20 RESEARCH 7654 MARTIN 30 SALES 7698 BLAKE 30 SALES 7782 CLARK 10 ACCOUNTING 7788 SCOTT 20 RESEARCH 7839 KING 10 ACCOUNTING SELECT EMPNO, ENAME, DEPTNO, DECODE(DEPTNO, 10, 'ACCOUNTING', 20, 'RESEARCH', 30, 'SALES') AS 부서명, DECODE(MOD(EMPNO,2), 0, '짝수', 1, '홀수') FROM EMP; EMPNO ENAME DEPTNO 부서명 DECODE(MOD(E ---------- -------------------- ---------- -------------------- ------------ 7369 SMITH 20 RESEARCH 홀수 7499 ALLEN 30 SALES 홀수 7521 WARD 30 SALES 홀수 7566 JONES 20 RESEARCH 짝수 7654 MARTIN 30 SALES 짝수 7698 BLAKE 30 SALES 짝수 7782 CLARK 10 ACCOUNTING 짝수 7788 SCOTT 20 RESEARCH 짝수
CASE 함수
-
형식 →CASE WHEN 조건식1 THEN 결과데이터1 WHEN 조건식2 THEN 결과데이터2 WHEN 조건식3 THEN 결과데이터3
- 문제) 사원들의 사원번호, 사원명, 부서번호, 부서명 , 사원번호에 대한 홀수,짝수 를 출력하시오.
SELECT EMPNO, ENAME, DEPTNO,CASE WHEN DEPTNO=10 THEN 'ACCOUNTING' WHEN DEPTNO=20 THEN 'RESEARCH' WHEN DEPTNO=30 THEN 'SALES' ELSE 'OPERATIONS' END AS 부서명,CASE WHEN MOD(EMPNO,2)=0 THEN '짝수' ELSE '홀수' END AS 홀짝 FROM EMP; EMPNO ENAME DEPTNO 부서명 홀짝 ---------- -------------------- ---------- -------------------- ------------ 7369 SMITH 20 RESEARCH 홀수 7499 ALLEN 30 SALES 홀수 7521 WARD 30 SALES 홀수 7566 JONES 20 RESEARCH 짝수 7654 MARTIN 30 SALES 짝수 7698 BLAKE 30 SALES 짝수 7782 CLARK 10 ACCOUNTING 짝수
JOIN 함수
- 한개 이상의 테이블에서 데이터를 조회하기 위해 사용.
- 두개 이상의 테이블을 참조해서 데이터를 검색.
-
from 뒤에 두개 이상의 테이블을 명시 .
-
문제) SCOTT사원이 근무하는 부서의 부서번호와 부서명, 부서위치를 출력하시오.
- 문제) 아래와 같이 ‘SCOTT’사원에 대해 조회하고 그 결과를 출력하시오.
SELECT ENAME, EMP.DEPTNO, DNAME, LOC FROM EMP, DEPT;
- –> 두 테이블에 공통적으로 존재하는 컬럼명에만 테이블 소속을 명시해 주면 됨!!
- –> 특별한 조건 없이 조회를 하면 곱의 형태로 결과행이 출력(CROSS 조인)
- –> EMP(14행)X DEPT(4행)= 56행이 출력됨
SELECT ENAME, EMP.DEPTNO, DNAME, LOC FROM EMP, DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO;
--> 두 테이블이 갖는 공통적인 컬럼비교 : EQUI조인!
--> 결국 14행이 출력됨
ENAME DEPTNO DNAME LOC
-------------------- ---------- ---------------------------- ------------
CLARK 10 ACCOUNTING NEW YORK
KING 10 ACCOUNTING NEW YORK
MILLER 10 ACCOUNTING NEW YORK
JONES 20 RESEARCH DALLAS
FORD 20 RESEARCH DALLAS
ADAMS 20 RESEARCH DALLAS
SMITH 20 RESEARCH DALLAS
SCOTT 20 RESEARCH DALLAS
WARD 30 SALES CHICAGO
// 주의사항 : 테이블에 별명을 지정했을 경우 SELECT나 WHERE절에서는 별명만 사용해야함.
SELECT EMPNO, ENAME, E.DEPTNO, DNAME, LOC FROM EMP E, DEPT D WHERE ENAME ='SCOTT' AND E.DEPTNO=D.DEPTNO;
EMPNO ENAME DEPTNO DNAME LOC
---------- -------------------- ---------- ---------------------------- -------
7788 SCOTT 20 RESEARCH DALLAS
- select ename||’사원은 ‘||e.deptno||’번 부서에 근무하고 부서명은 ‘||dname||’이고 위치는 ‘||loc from emp e, dept d where ename = ‘SCOTT’ and e.deptno=d.deptno; –> SCOTT사원은 20번 부서에 근무하고 부서명은 RESEARCH이고 위치는 DALLAS
EQUI JOIN
- 조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치하는 행을 연결하여 결과를 생성하는 조인.
-
참고: select * from emp,dept; ===> 특별한 조건없이 두 테이블을 곱(14행 * 4행)의 형태로 출력: CROSS JOIN
- 문제) ‘NEW YORK’에 근무하는 사원의 이름과 급여를 출력하시오.
select ename, sal from emp, dept where loc='NEW YORK' and emp.deptno = dept.deptno; ENAME SAL -------------------- ---------- CLARK 2450 KING 5000 MILLER 1300
- 문제) ACCOUNTING부서 소속사원들의 이름과 입사일(yyyy/mm/dd)을 출력하시오.
SELECT ENAME, TO_CHAR(HIREDATE, 'YYYY/MM/DD') FROM EMP, DEPT WHERE DNAME='ACCOUNTING' AND EMP.DEPTNO = DEPT.DEPTNO; ENAME TO_CHAR(HIREDATE,'YY -------------------- -------------------- CLARK 1981/06/09 KING 1981/11/17 MILLER 1982/01/23
- 문제) 직급이 MANAGER인 사원의 이름, 부서명을 출력하시오.
SELECT ENAME, DNAME FROM EMP, DEPT WHERE JOB='MANAGER' AND EMP.DEPTNO = DEPT.DEPTNO; ENAME DNAME -------------------- ---------------------------- CLARK ACCOUNTING JONES RESEARCH BLAKE SALES
Non-Equi JOIN
-
특정 범위내에 있는 값을 조회하기 위해 비교연산자를 사용
- 문제) 각 사원의 사원번호, 사원명, 급여, 급여등급을 출력하시오.
SELECT EMPNO, ENAME, SAL, GRADE FROM EMP, SALGRADE WHERE SAL BETWEEN LOSAL AND HISAL; EMPNO ENAME SAL GRADE ---------- -------------------- ---------- ---------- 7369 SMITH 800 1 7900 JAMES 950 1 7876 ADAMS 1100 1 7521 WARD 1250 2 7654 MARTIN 1250 2 7934 MILLER 1300 2 7844 TURNER 1500 3 7499 ALLEN 1600 3 7782 CLARK 2450 4 7698 BLAKE 2850 4
- 문제) ALLEN사원의 사원번호, 사원명, 급여, 급여등급을 출력하시오.
SELECT EMPNO, ENAME, SAL, GRADE FROM EMP, SALGRADE WHERE SAL BETWEEN LOSAL AND HISAL AND ENAME='ALLEN'; EMPNO ENAME SAL GRADE ---------- -------------------- ---------- ---------- 7499 ALLEN 1600 3
Self JOIN
- 마치 같은 테이블이 두개인 것처럼 자기 자신테이블과 조인하는 것.
-
구하고자 하는 데이터가 같은 행에 존재하지 않을 때
- 문제) SCOTT사원의 사원번호, 사원명, 급여, 직속상사명을 출력하시오.
SELECT E1.EMPNO, E1.ENAME AS 내사원명, E1.SAL, E2.ENAME AS 직속상사명 FROM EMP E1, EMP E2 WHERE E1.MGR=E2.EMPNO AND E1.ENAME='SCOTT'; EMPNO 내사원명 SAL 직속상사명 ---------- -------------------- ---------- -------------------- 7788 SCOTT 3000 JONES
- 문제) 매니저(직속상사)가 KING인 사원들의 이름과 직급을 출력.
SELECT E1.ENAME, E1.JOB FROM EMP E1, EMP E2 WHERE E1.MGR=E2.EMPNO AND E2.ENAME='KING'; ENAME JOB -------------------- ------------------ BLAKE MANAGER JONES MANAGER CLARK MANAGER
- 문제) SCOTT사원과 동일한 근무지(부서)에서 근무하는 사원(동료사원)의 이름을 출력하시오.
SELECT E2.ENAME FROM EMP E1, EMP E2 WHERE E1.DEPTNO = E2.DEPTNO AND E1.ENAME='SCOTT'AND E2.ENAME != 'SCOTT'; ENAME -------------------- SMITH JONES ADAMS FORD
Outer JOIN
-
테이블 조인중 한쪽 테이블에 존재하지 않은 데이터로 인해서 출력되지 않는 행을 출력하고 싶을 때 사용. → ‘(+)’ 기호 사용. → 모자라는 테이블에 기술
- 문제) 각 사원의 이름과 그 사원의 직속 상사이름을 출력하시오.
SELECT E1.ENAME AS 사원명, E2.ENAME AS 상사이름 FROM EMP E1, EMP E2 WHERE E1.MGR= E2.EMPNO(+); 사원명 상사이름 -------------------- -------------------- FORD JONES SCOTT JONES JAMES BLAKE TURNER BLAKE MARTIN BLAKE WARD BLAKE ALLEN BLAKE MILLER CLARK ADAMS SCOTT CLARK KING BLAKE KING JONES KING SMITH FORD KING
- 문제) 각 사원의 이름과 부서번호, 부서명, 부서위치를 출력하시오 (사원이 근무하지 않는 비어있는 부서에 대한 정보도 출력하고 싶다!)
SELECT ENAME, DEPT.DEPTNO, DNAME, LOC FROM EMP, DEPT WHERE EMP.DEPTNO(+)=DEPT.DEPTNO; ENAME DEPTNO DNAME LOC -------------------- ---------- ---------------------------- ------------------- CLARK 10 ACCOUNTING NEW YORK KING 10 ACCOUNTING NEW YORK MILLER 10 ACCOUNTING NEW YORK JONES 20 RESEARCH DALLAS FORD 20 RESEARCH DALLAS ADAMS 20 RESEARCH DALLAS SMITH 20 RESEARCH DALLAS SCOTT 20 RESEARCH DALLAS WARD 30 SALES CHICAGO TURNER 30 SALES CHICAGO ALLEN 30 SALES CHICAGO JAMES 30 SALES CHICAGO BLAKE 30 SALES CHICAGO MARTIN 30 SALES CHICAGO 40 OPERATIONS BOSTON
ANSI Join(표준 조인)
- FROM EMP [조인종류] JOIN DEPT → 이런 식으로 콤마를 안씀.
1. Inner Join
-
테이블 사이에 inner join사용 / 동등 조건식은 ON(조건절) 뒤에 사용.
- where절을 추가하는 것이 가능.
- on절은 반드시 추가!!
- on절에 동등비교와 추가적인 조건식을 기술 가능.
문제) 전체 사원에 대한 사원번호, 사원명, 부서명을 출력.
SELECT EMPNO, ENAME, DNAME FROM EMP INNER JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO;
EMPNO ENAME DNAME
---------- -------------------- ----------------------------
7782 CLARK ACCOUNTING
7839 KING ACCOUNTING
7934 MILLER ACCOUNTING
7566 JONES RESEARCH
7902 FORD RESEARCH
7876 ADAMS RESEARCH
7369 SMITH RESEARCH
7788 SCOTT RESEARCH
7521 WARD SALES
7844 TURNER SALES
7499 ALLEN SALES
7900 JAMES SALES
7698 BLAKE SALES
7654 MARTIN SALES
- 문제) ‘JAMES’사원에 대한 사원번호, 사원명, 부서명을 출력하시오.
SELECT EMPNO, ENAME, DNAME FROM EMP INNER JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO WHERE ENAME='JAMES'; EMPNO ENAME DNAME ---------- -------------------- ---------------------------- 7900 JAMES SALES
- Inner Join에 USING절 사용하기
- 형식 : USING (공통컬럼명)
- ON EMP.DEPTNO=DEPT.DEPTNO → 이 코드를 짧게 줄여주는 효과
SELECT EMPNO, ENAME, DNAME FROM EMP INNER JOIN DEPT USING (DEPTNO) WHERE ENAME='JAMES'; EMPNO ENAME DNAME ---------- -------------------- ---------------------------- 7900 JAMES SALES
2. Natural Join
- 양쪽 테이블에 동일한 이름의 컬럼이 존재한다면 자동 매핑을 해주는 조인. (DEPTNO)
- 위의 INNER JOIN보다 훨씬 간편함
- 문제) ADAMS의 사원번호, 사원명, 부서명을 출력하시오.
SELECT EMPNO, ENAME, DNAME FROM EMP NATURAL JOIN DEPT WHERE ENAME='ADAMS'; EMPNO ENAME DNAME ---------- -------------------- ---------------------------- 7876 ADAMS RESEARCH
3. Outer Join
-
형식) select 컬럼명 from 테이블명1 (LEFT RIGHT FULL) [OUTER] JOIN 테이블명2; - 조건절은 ON!!
-
오라클 OUTER조인의 (+) 반대방향에 LEFT 혹은 RIGHT
- 문제) 각 사원의 이름과 그 사원의 직속상사명을 출력하시오.(KING사원의 정보출력)
SELECT E1.ENAME AS 사원명, E2.ENAME AS 직속상사명 FROM EMP E1 LEFT JOIN EMP E2 ON E1.MGR = E2.EMPNO; 사원명 직속상사명 -------------------- -------------------- FORD JONES SCOTT JONES JAMES BLAKE TURNER BLAKE MARTIN BLAKE WARD BLAKE ALLEN BLAKE MILLER CLARK ADAMS SCOTT CLARK KING BLAKE KING JONES KING SMITH FORD KING
- 문제) 각 사원의 이름과 부서번호, 부서명, 부서위치를 출력하시오.(40번 부서 정보 출력)
SELECT ENAME, DEPTNO, DNAME, LOC FROM EMP RIGHT JOIN DEPT USING (DEPTNO);
ENAME DEPTNO DNAME LOC
-------------------- ---------- ---------------------------- -----------------
CLARK 10 ACCOUNTING NEW YORK
KING 10 ACCOUNTING NEW YORK
MILLER 10 ACCOUNTING NEW YORK
JONES 20 RESEARCH DALLAS
FORD 20 RESEARCH DALLAS
ADAMS 20 RESEARCH DALLAS
SMITH 20 RESEARCH DALLAS
SCOTT 20 RESEARCH DALLAS
WARD 30 SALES CHICAGO
TURNER 30 SALES CHICAGO
ALLEN 30 SALES CHICAGO
JAMES 30 SALES CHICAGO
BLAKE 30 SALES CHICAGO
MARTIN 30 SALES CHICAGO
40 OPERATIONS BOSTON
Sub Query★★
- 특정 테이블에서 검색된 결과를 다른 테이블에 전달하여 새로운 결과를 검색 할 때 사용.
-
검색된 결과가 1행 1열의 데이터값만 하나 가질 때 서브쿼리사용→(SELECT DEPTNO FROM EMP WHERE ENAME=’JAMES’) 이게 서브퀴리인데 딱 하나의 30이라는 값만 가짐.
- 문제) JAMES사원이 근무하는 부서이름을 출력
SELECT DNAME FROM DEPT WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME='JAMES'); DNAME ---------------------------- SALES
- 문제) FORD사원과 동일한 직책을 가진 사원에 대해 사원번호, 사원명, 급여, 직책을 출력.
SELECT EMPNO, ENAME, SAL, JOB FROM EMP WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME='FORD'); EMPNO ENAME SAL JOB ---------- -------------------- ---------- ------------------ 7788 SCOTT 3000 ANALYST 7902 FORD 3000 ANALYST
- 문제) MARTIN사원의 급여와 동일하거나 더 많이 받는 사원의 사원명, 급여를 출력
SELECT ENAME, SAL FROM EMP WHERE SAL >= (SELECT SAL FROM EMP WHERE ENAME='MARTIN'); ENAME SAL -------------------- ---------- ALLEN 1600 WARD 1250 JONES 2975 MARTIN 1250 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 TURNER 1500 FORD 3000 MILLER 1300
- 문제) DALLAS에서 근무하는 사원의 이름, 부서번호를 출력.
SELECT ENAME, DEPTNO FROM EMP WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE LOC='DALLAS'); ENAME DEPTNO -------------------- ---------- SMITH 20 JONES 20 SCOTT 20 ADAMS 20 FORD 20
- 문제) SALES부서에서 근무하는 모든 사원의 이름과 급여, 부서번호를 출력.
SELECT ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE DNAME='SALES'); ENAME SAL DEPTNO -------------------- ---------- ---------- ALLEN 1600 30 WARD 1250 30 MARTIN 1250 30 BLAKE 2850 30 TURNER 1500 30 JAMES 950 30
- 문제) 자신의 직속 상사가 KING인 사원의 이름과 급여, 직속상사의 사원번호를 출력.
SELECT ENAME, SAL, MGR FROM EMP WHERE MGR= (SELECT EMPNO FROM EMP WHERE ENAME='KING'); ENAME SAL MGR -------------------- ---------- ---------- JONES 2975 7839 BLAKE 2850 7839 CLARK 2450 7839
- 문제) 평균급여보다 많은 급여를 받는 사원들의 사번, 사원명, 급여를 출력(급여 내림차순)
SELECT EMPNO, ENAME, SAL FROM EMP WHERE SAL >= (SELECT AVG(SAL) FROM EMP) ORDER BY 3; EMPNO ENAME SAL ---------- -------------------- ---------- 7782 CLARK 2450 7698 BLAKE 2850 7566 JONES 2975 7902 FORD 3000 7788 SCOTT 3000 7839 KING 5000
- 문제) 10번 부서의 사원 중 전체(사원) 최대급여를 받은 사원과 동일한 급여를 받는 사원의 사원번호와 사원명을 출력.
SELECT EMPNO, ENAME FROM EMP WHERE SAL = (SELECT MAX(SAL) FROM EMP) AND DEPTNO=10; EMPNO ENAME ---------- -------------------- 7839 KING
- 문제) BLAKE와 같은 부서에 있는 사원들의 이름과 입사일자, 부서번호를 출력.
SELECT ENAME, HIREDATE, DEPTNO FROM EMP WHERE DEPTNO=(SELECT DEPTNO FROM EMP WHERE ENAME='BLAKE'); ENAME HIREDATE DEPTNO -------------------- -------- ---------- ALLEN 81/02/20 30 WARD 81/02/22 30 MARTIN 81/09/28 30 BLAKE 81/05/01 30 TURNER 81/09/08 30 JAMES 81/12/03 30
단일 행 서브쿼리
- select결과행이 하나의 행인 서브쿼리
- 하나의 행만 검색하여 그 결과를 메인 쿼리에 보내는 것.
- 그룹함수
다중 행 서브쿼리
- 서브쿼리의 결과행이 여러개(2개행 이상)
- 서브쿼리에서 반환되는 결과가 하나이상의 행일 때 사용하는 서브쿼리.
- 반드시 다중 행 연산자(Multiple Row Operator)와 함께 사용.
다중 행 연산자
- IN : 메인쿼리의 비교조건이 서브쿼리의 결과중에서 하나라도 일치하면 참.
-
가장 많이 쓰임.
- ANY,SOME : 메인쿼리의 비교조건이 서브쿼리의 결과와 하나이상 일치하면 참
- ALL : 메인쿼리의 비교조건이 서브쿼리의 결과와 모든값이 일치하면 참.
-
any,all ==> ‘>’ ‘<’와 함께 사용.
- EXISTS: 메인쿼리의 비교조건이 서브쿼리의 결과중에서 만족하는 값이 하나라도 존재하면 참.
select * from dept where exists (select * //서브쿼리 결과가 1행 이상이면 true from emp); select * from dept where exists (select ename //서브쿼리 결과가 1행 이상이면 true from emp where empno=7788); select * from dept where exists (select ename //서브쿼리 결과가 1행 이상이면 true from emp where empno=9000);
- 문제) 급여를 3000 이상 받는 사원이 소속된 부서와 동일한 부서에서 근무하는 사원들의 사원명, 급여, 부서번호를 출력하시오.
SELECT ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM EMPWHERE SAL>=3000); ENAME SAL DEPTNO -------------------- ---------- ---------- FORD 3000 20 ADAMS 1100 20 SCOTT 3000 20 JONES 2975 20 SMITH 800 20 MILLER 1300 10 KING 5000 10 CLARK 2450 10
- 문제) 부서번호가 30번인 사원들 중 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사원명, 급여를 출력하시오. (ALL) - 모두 만족
SELECT ENAME, SAL FROM EMP WHERE SAL > ALL (SELECT SAL FROM EMP WHERE DEPTNO=30); ENAME SAL -------------------- ---------- JONES 2975 SCOTT 3000 FORD 3000 KING 5000
서브쿼리 문제풀어보기
- 문제1) SCOTT와 급여가 동일하거나 더 많이 받는 사원의 이름과 급여출력
SELECT ENAME, SAL FROM EMP WHERE SAL >= (SELECT SAL FROM EMP WHERE ENAME='SCOTT') AND ENAME != 'SCOTT'; ENAME SAL -------------------- ---------- KING 5000 FORD 3000
- 문제2) 직급(job)이 사원(CLERK)인 사람이 속한 부서의 부서번호와 부서명,부서위치를 출력
SELECT DEPTNO, DNAME, LOC FROM DEPT WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE JOB = 'CLERK'); DEPTNO DNAME LOC ---------- ---------------------------- -------------------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO
- 문제3) 사원명에 ‘T’를 포함하고 있는 사원들과 같은 부서에서 근무하고 있는 사원의 사원번호와 이름을 출력
SELECT EMPNO, ENAME FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHEREENAME LIKE '%T%'); EMPNO ENAME ---------- -------------------- 7902 FORD 7876 ADAMS 7788 SCOTT 7566 JONES 7369 SMITH 7900 JAMES 7844 TURNER 7698 BLAKE 7654 MARTIN 7521 WARD 7499 ALLEN
- 문제4) 부서위치가 DALLAS인 모든 사원의 이름, 부서번호를 출력
SELECT ENAME, DEPTNO FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE LOC = 'DALLAS'); ENAME DEPTNO -------------------- ---------- SMITH 20 JONES 20 SCOTT 20 ADAMS 20 FORD 20
- 문제5) SALES부서의 모든 사원의 이름과 급여출력
SELECT ENAME, SAL FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE DNAME='SALES'); ENAME SAL -------------------- ---------- ALLEN 1600 WARD 1250 MARTIN 1250 BLAKE 2850 TURNER 1500 JAMES 950
- 문제6) KING에게 보고하는 모든 사원의 이름과 급여를 출력.
SELECT ENAME, SAL FROM EMP WHERE MGR= (SELECT EMPNO FROM EMP WHERE ENAME='KING'); ENAME SAL -------------------- ---------- JONES 2975 BLAKE 2850 CLARK 2450
- 문제7) 자신의 급여가 평균급여보다 많고 이름에 S가 들어가는 사원과 동일한 부서에서 근무하는 모든 사원의 사원번호, 사원명, 급여 출력.
SELECT EMPNO, ENAME, SAL FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP) AND ENAME LIKE '%S%'); EMPNO ENAME SAL ---------- -------------------- ---------- 7902 FORD 3000 7876 ADAMS 1100 7788 SCOTT 3000 7566 JONES 2975 7369 SMITH 800
댓글남기기