동일 컬럼이 없이 다른 조건을 사용하여 조인 할 때 사용
📌 EQUI JOIN과 NON-EQUI JOIN의 차이점
EQUI JOIN : JOIN조건에 서로 다른 조건(=)을 가진 데이터를 JOIN해서 가져오는 방법
NON-EQUI JOIN : 같은 조건이 아닌 크거나 작거나 하는 경우 JOIN을 수행하는 방법
✔ 각 사원의 급여가 몇 등급인지 살펴보는 쿼리문
select ename, sal, grade from emp, salgrade where sal between losal and hisal;
- 결과
✔ 사원 이름과 소속 부서명, 급여 등급을 출력하는 쿼리문
select e.ename, d.dname, s.grade, e.sal from emp e, dept d, salgrade s where e.deptno = d.deptno and e.sal between s.losal and s.hisal;
- 결과
✔ SMITH의 매니저 이름을 출력하는 쿼리문
SELECT e.ename, e.empno, m.ename, m.empno FROM emp e, emp m -- 자기 자신과 조인할 때 별칭을 지정하여 셀프 조인 WHERE e.mgr = m.empno AND e.ename = 'SMITH';
- 결과
✔ SMITH의 매니저 이름을 출력하는 쿼리문
SELECT ename FROM emp where empno = (select mgr from emp where ename = 'SMITH');
✔ 사원들의 평균 급여(서브쿼리)보다 더 많은 급여를 받는 사원(메인쿼리)을 검색하는 쿼리문
SELECT ename, sal FROM emp WHERE sal > ( SELECT AVG(sal) FROM emp );
- 결과
✔ ALLEN(서브쿼리)이 근무하는 위치(메인쿼리)
SELECT loc FROM dept WHERE deptno = ( SELECT deptno FROM emp WHERE ename = 'ALLEN' );
✔ 연봉을 3000이상 받는 사원이 소속된 부서(서브쿼리)와 동일한 부서(연산자)에서 근무하는 사원들의 정보(메인쿼리)를 출력하는 쿼리문
SELECT
*
FROM
emp
WHERE
deptno IN ( -- 연산자
SELECT
deptno
FROM
emp
WHERE
sal >= 3000
);
연산자 | 기능 |
---|---|
IN | 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 하나라도 일치하면 참인 연산자 (or연산) |
ANY, SOME | 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참인 연산자 > ANY : 가장 작은 값보다 크다 - 최대값 < ANY: 가장 큰 값보다 작다 - 최소값 |
ALL | 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참인 연산자 (and연산) > ALL : 가장 큰 값보다 크다 - 최대값 < ALL : 가장 작은 값보다 작다 - 최소값 |
EXISTS | 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참인 연산자 ✔ IN과의 차이점 : IN연산자는 실제 존재하는 데이터들의 모든 값까지 확인하지만 EXISTS연산자는 해당 로우(ROW)가 존재하는지의 여부만 확인 |