[정보처리기사실기] 집합 연산자 / JOIN / 서브쿼리

    반응형

    2과목. 데이터베이스 구축

    📒 11. SQL 문법 - SELECT 활용


    1. 집합 연산자

    (1) 집합 연산자의 개념

    • 여러 개의 SQL 쿼리 결과를 결합하는 데 사용
    • 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회할 수 있음
    • 집합 연산자를 사용하려면, SELECT 절의 컬럼 수가 동일해야 하며, 같은 위치에 있는 컬럼들은 데이터 타입이 동일해야 함

    (2) 집합 연산자 종류

    • a) UNION
      - 중복된 행은 제거하여 합집합
    • b) UNION ALL
      - 중복된 행도 포함하여 합집합
    • c) INTERSECT
      - 중복된 행은 제거하여 교집합
    • d) EXCEPT(MINUS)
      - 중복된 행은 제거하여 차집합 

     

    2. JOIN

    (1) JOIN의 개념

    • 두 개 이상의 테이블을 결합하여 테이터를 검색하는 방법
    • 관련 있는 컬럼 기준으로 행을 합쳐주는 연산

    (2) JOIN의 종류

    • a) 내부 조인(Inner Join)
      - 두 테이블에 공통으로 존재하는 데이터만 추출
      SELECT * FROM 회원정보 INNER JOIN 주문
      ON 회원정보.회원번호 = 주문.회원번호
    • b) 자연 조인(Natural Join)
      - 동일한 이름과 타입을 가진 컬럼을 기준으로 자동으로 조인
      - 반드시 두 테이블 간의 동일한 이름, 타입을 가진 컬럼 필요
      - 두 테이블이 갖는 공통 컬럼에 대해서 Inner Join은 별개의 컬럼으로 나타내지만,
        Natural Join은 하나의 컬럼으로 나타냄
      SELECT * FROM R1 NATURAL JOIN R2;
    • c) 전체 외부 조인(Full Outer Join)
      - 좌측 및 우측 테이블의 데이터를 모두 포함하고, 중복된 데이터는 하나로 표시
      SELECT * FROM R1 Full Outer Join R2
      ON R1.COL2 = R2.COL2;
    • d) 왼쪽 외부 조인(Left Outer Join)
      - 좌측 테이블을 기준으로 조인, 우측 테이블에 일치하는 데이터가 없으면 NULL로 표시
      SELECT * FROM R1 Left Outer Join R2
      ON R1.COL2 = R2.COL2;
    • e) 오른쪽 외부 조인(Right Outer Join)
      - 우측 테이블 기준으로 일치하는 행만 결합하고, 일치하지 않는 부분은 NULL로 표시
      SELECT * FROM R1 Right Outer Join R2
      ON R1.COL2 = R2.COL2;
    • f) 곱집합(Cross Join) 
      - 두 테이블 데이터의 모든 조합을 반환
      - 조인 조건이 없음
      SELECT * FROM R1 Cross Join R2;

     

    3. 서브쿼리

    (1) 서브쿼리의 개념

    • SELECT문 안에 또 다른 SELECT문이 포함된 형태의 쿼리

    (2) 서브쿼리의 종류

    • a) 스칼라 서브쿼리(Scalar SubQuery)
      - SELECT절에 위치하며, 단일 행 또는 단일 값 반환
      - 밖에 있는 조건부터 읽기
      SELECT 이름, 
      	(SELECT 주문번호 FROM 주문 WHERE 주문.회원번호 = 회원정보.회원번호) as 주문번호
      FROM 회원정보
      WHERE 회원번호 = '0003';
    • b) 인라인뷰 서브쿼리(Inline View SubQuery)
      - FROM 절에 위치하며, 서브쿼리 결과는 하나의 테이블로 반환
      - FROM 절부터 읽기
      SELECT 회원번호, 이름
      FROM (
          SELECT * FROM 회원정보
          WHRER 이름 like '이%'
      ) TB_TEMP;
    • c) 중첩 서브쿼리(Nested SubQuery)
      - WHERE 절에 위치하며, 단일행 또는 다중행 서브쿼리 연산자를 사용할 수 있음
      - 괄호 안에 있는 속성부터 읽기
      - 단일행 서브쿼리 연산자 : >, >=, <, <=, = 등
      - 다중행 서브쿼리 연산자 :
          ① IN : 결괏값을 포함하면 출력 (값이 있는지 확인)
      SELECT 회원번호, 이름
      FROM 회원정보
      WHERE 회원번호 IN (
          SELECT 회원번호 FROM 주문
      );
      ② EXISTS : 행이 존재하면 출력 (여러 개일 경우 모두 출력)
      SELECT 과목이름
      FROM 성정
      WHERE EXISTS (
          SELECT 학번
          FROM 학생
          WHERE 학생.학번 = 성적.학번
          AND 학생.학과 IN ('전산','전기')
          AND 학생.주소 = '경기'
      );
         ③ ANY(SOME) : 결괏값이 여러 개 나온 경우, 결괏값이 하나라도 만족하면 출력
      SELECT * FROM 상품
      WHERE 단가 > ANY (
          SELECT 단가 FROM 상품
          WHERE 제조사 = 'B'
      );
         ④ ALL : 결과값이 여러 개 나온 경우, 결괏값을 모두 만족하는 값 출력
      SELECT * FROM 상품
      WHERE 단가 > ALL (
          SELECT 단가 FROM 상품
          WHERE 제조사 = 'B'
      );

     

     

    참고자료

    흥달쌤,  '흥!나게 합격 달성! 2024 정보처리기사 실기 클래스'
     

    1억뷰 N잡

    [1회 연장 포함] 흥!나게 합격 달성! 2024 정보처리기사 실기 클래스

    www.njobler.net

    반응형

    댓글