inblog logo
|
sxias
    데이터베이스SELECT

    [데이터베이스] 5. Subquery

    문정준's avatar
    문정준
    Feb 26, 2025
    [데이터베이스] 5. Subquery
    Contents
    1. Subquery2. Inline View3. Scalar Subquery

    1. Subquery

    • where 절에 포함됨
      • 두 테이블의 중복되는 데이터를 연관 관계(Relation)를 만들어 참조
        • 다른 테이블을 참조하는 키 = 외래 키(FK, Foreign Key)
        • 테이블의 행을 유일하게 결정하는 키 = 기본 키(PK, Primary Key)
    -- 1. 서브쿼리 (where) -- 중복해서 만들지 않는다. = 변경에 대처하기 힘들다. -- 연관 관계를 가지도록 테이블을 두 개 만든다. (relation) -- 다른 테이블을 참조하는 키를 FK(Foreign Key) -- 내 테이블에서 행을 유일하게 결정하는 키를 PK(Primary Key) -- DALLAS에서 일하는 직원을 추출해주세요. SELECT * FROM emp where deptno = ( SELECT deptno FROM dept where loc = 'DALLAS' );
    notion image
    notion image
     
    -- 문제 : RESEARCH 부서의 직원을 출력해주세요. select * from emp where deptno = ( select deptno from dept where dname = 'RESEARCH' );
    notion image
    notion image
     
    -- 김재수 학생의 담당 교수를 출력해주세요. select * from professor where profno = ( select profno from student where name = '김재수' );
    notion image
     

    2. Inline View

    • from 절에 포함됨
      • 별칭을 where, group by에 기본적으로 사용할 수 없음 (SQL 동작 순서)
      • 별칭을 포함한 테이블을 처음에 올려주면 사용 가능 (from 연산이 1순위)
        • 이 테이블은 따로 이름이 없어서 이름 지정이 필요
    -- 2. Inline View (from에 select) -- 아래 경우는 오류 발생 (SQL 실행 순서) select ename, sal*12 '연봉' from emp where 연봉 = 9600; -- 해결법 -- 새로 만든 테이블은 이름이 필요 select e.* from ( select ename, sal*12 '연봉' from emp ) e where 연봉 = 9600;
    notion image
     
    -- having과 동일한 역할 (사용할 필요 없어짐) select * from ( select avg(sal) 'avg_sal' from emp group by deptno ) e where e.avg_sal < 2000; select avg(sal) 'avg_sal' from emp group by deptno having avg_sal < 2000;
    notion image

    3. Scalar Subquery

    • select 절에 포함됨
    • 결과값이 스칼라(1개)일때만 사용 가능
      • 커서를 다른 테이블에 옮기기 위해 별칭 사용
    -- 3. Scalar Subquery (select 절에 서브쿼리) -- 결과값이 Scalar (행과 값이 딱 1개) select d.deptno, d.dname, d.loc, ( select count(*) from emp where deptno = d.deptno ) '직원수' from dept d;
    notion image

    Subquery

    • 규칙을 찾는 것이 가장 중요
      • 규칙을 찾아서 연산 횟수를 감소 = 속도 증가
    • 규칙을 찾기 위해서는 직접 DB 테이블을 보면서 실제 동작을 확인해볼 것
    notion image
    Share article
    Contents
    1. Subquery2. Inline View3. Scalar Subquery

    Sxias ㆍ a32176740@gmail.com

    RSS·Powered by Inblog