ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 부속 질의
    데이터베이스/SQL 고급 2018. 1. 29. 20:33

    부속질의는 하나의 SQL 안에 다른 SQL 문이 중첩된 질의를 말한다.

    이는 다른 테이블에서 가져온 데이터로 현재 테이블에 있는 정보를 찾거나 가공할 사용한다.

    부속질의는 주질의와 부속질의로 구성된다.

     

    부속질의의 종류

    명칭

    위치

    설명

    스칼라 부속질의

    SELECT

    SELECT 절에서 사용되며 단일 값을 반환하기 때문에 스칼라 부속질의라고도 한다.

    인라인

    FROM

    FROM 절에서 결과를 형태로 반환하기 때문에 인라인 뷰라고 한다.

    중첩질의

    WHERE

    WHERE 절에서 술어와 같이 사용되며 결과를 한정시키기 위해 사용된다.

     

     

    스칼라 부속질의

    스칼라 부속질의는 SELECT  절에서 사용되는 부속질의로, 부속질의의 결과 값을 단일 , 단일 열의 스칼라 값으로 반환한다.

    만약 결과 값이 다중 행이거나 다중 열일경우 에러를 출력한다.

    또한 결과가 없는 경우에는 NULL 값을 출력한다.

    스칼라 부속질의는 일반적으로 SELECT문과 UPDATE SET 절에 사용된다.

    Q. 마당 서점의 고객별 판매액을 보이시오

    SELECT (

    SELECT name

    FROM Customer cs

    WHERE cs.custid=od.custid) "name", SUM(saleprice

    ) "total"

    FROM Orders od

    GROUP BY od.custid;

     

    인라인

    인라인 뷰는 FROM 절에서 사용되는 부속질의를 말한다.

    FROM 절에서 테이블 이름 대신 인라인 부속질의를 사용하면 보통의 테이블과 같은 형태로 사용할 있다.

    부속질의 결과로 반환되는 데이터는 다중 , 다중 열이여도 상관없다.

    Q. 고객번호가 2 이하인 고객의 판매액을 보이시오

    SELECT cs.name, SUM(od.saleprice) "total"

    FROM (

    SELECT custid, name

    FROM Customer

    WHERE custid <= 2

    ) cs, Orders od

    WHERE cs.custid=od.custid

    GROUP BY cs.name;

     

    중첩질의

    중첩질의는 WHERE 절에서 사용되는 부속질의를 말한다.

    중첩질의는 주질의에 사용된 자료 집합의 조건을 WHERE 절에 서술한다.,.

    연산 결과가 참일 경우 주질의의 해당 행을 출력한다.

     

    중첩질의 연산자 종류

    술어

    연산자

    반환

    반환

    비교

    =, >, <, >=, <=, <>

    단일

    단일

    집합

    IN, NOT IN

    다중

    다중

    한정

    ALL SOME(ANY)

    다중

    단일

    존재

    EXISTS, NOT EXISTS

    다중

    다중

     

    비교연산자

    연산자는 부속질의가 반드시 단일 , 단일 열을 반환해야 한다.

    주질의의 대상 값과 부속 질의의 결과 값을 비교 연산자에 적용하여 참이면 주질의의 해당 열을 출력한다.

    Q. 고객의 평균 주문금액보다 금액의 주문 내역에 대해서 주문번호, 고객번호, 금액을 보이시오

    SELECT orderid, custid, saleprice

    FROM Orders od

    WHERE saleprice > (

        SELECT AVG(saleprice)

        FROM Orders so

        WHERE od.custid=so.custid

    );

     

    IN, NOT IN

    IN 연산자는 주질의의 속성 값이 부속질의에서 제공한 결과 집합에 있는지 확인하는 역할을 한다.

    IN 연산자에서 사용 가능한 부속질의는 결과로 다중 , 다중 열을 반환할 있다.

    WHERE 절에 사용되는 속성 값을 부속질의의 결과 집합과 비교해 하나라도 있으면 참이 된다.

     

    Q. 대한민국에 거주하는 고객에게 판매한 도서의 총판매액을 구하시오

    SELECT SUM(saleprice) "total"

    FROM Orders

    WHERE custid IN (

        SELECT custid

        FROM Customer

        WHERE adress LIKE '%대한민국%'

    );

     

    ALL, SOME(ANY)

    ALL, SOME 연산자는 비교 연산자와 함께 사용된다.

    ALL은 모든, SOME(ANY) 어떠한 이라는 의미가 있다.

    All 집합의 최댓값, SOME 집합의 최소값과 같다고 있다.

    Q. 3 고객이 주문한 도서의 최고 금액보다 비싼 도서를 구입한 주문의 주문번호와 금액을 보이시오

    SELECT orderid, saleprice

    FROM Orders;

    WHERE saleprice > ALL(

        SELECT saleprice

        FROM Orders

        WHERE custid='3'

    );

     

    EXIST, NOT EXIST

    EXIST NOT EXIST 데이터의 존재 유무를 확인하는 연산자다.

    주질의에서 부속질의로 제공된 속성의 값을 가지고 부속질의의 조건을 만족하여 값이 존재하면 해당 행의 데이터를 출력한다.

    Q. EXIST 연산자를 사용하여 대한민국에 거주하는 고객에게 판매한 도서의 판매액을 구하시오

    SELECT SUM(saleprice) "total"

    FROM Orders od

    WHERE EXIST (

        SELECT *

        FROM Customer cs

        WHERE adress LIKE '%대한민국%' AND cs.custid=od.custid

    );

     


    '데이터베이스 > SQL 고급' 카테고리의 다른 글

    인덱스  (0) 2018.01.29
      (0) 2018.01.29
    내장 함수  (0) 2018.01.29

댓글