60일 차 - 비등가 조인, 셀프 조인, 서브 쿼리 (23.03.24)

yvonne·2023년 3월 23일
0

📂SQL

목록 보기
3/4
post-thumbnail

📝 조인(JOIN)

🔎 NON-EQUI JOIN(비등가 조인)

  • 동일 컬럼이 없이 다른 조건을 사용하여 조인 할 때 사용

  • 📌 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;
  • 결과

🔎 SELF JOIN(셀프 조인)

  • 자기 자신과 조인을 하는 기법

✔ SMITH의 매니저 이름을 출력하는 쿼리문

SELECT
    e.ename,
    e.empno,
    m.ename,
    m.empno
FROM
    emp  e,
    emp  m -- 자기 자신과 조인할 때 별칭을 지정하여 셀프 조인 
WHERE
        e.mgr = m.empno
    AND e.ename = 'SMITH';
  • 결과




📝 서브 쿼리

  • 쿼리안에 쿼리
  • 하나의 SELECT 문장 내에 포함된 또 하나의 SELECT 문장이 있는 쿼리문
  • 비교 연산자의 오른쪽에 기술해야 하고, 반드시 괄호 안에 넣어야 한다.

✔ SMITH의 매니저 이름을 출력하는 쿼리문

SELECT
    ename
FROM
    emp where empno = (select mgr from emp where ename = 'SMITH');

🔎 단일행 서브 쿼리

  • 수행 결과가 오직 하나의 로우(행)만을 반환하는 것
  • 서브 쿼리를 수행한 결과가 1건만 나오고, 이 결과를 메인 쿼리로 전달해서 메인 쿼리를 수행하게 된다.

✔ 사원들의 평균 급여(서브쿼리)보다 더 많은 급여를 받는 사원(메인쿼리)을 검색하는 쿼리문

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)가 존재하는지의 여부만 확인
profile
개발 연습장

0개의 댓글