ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL 3. SQL 문법_SUB QUERY
    SYNC 기술면접 준비 2023. 11. 13. 22:14

    서브쿼리 SUB QUERY : SELECT 문 안에 또 다른 SELECT 문이 있는 명령어

     

    /***************SELECT절 서브 쿼리***************/
    /* SELECT 명령문 안에 SELECT 명령문 */

    SELECT * , (SELECT GENDER FROM CUSTOMER WHERE A.MEM_NO = MEM_NO) AS GENDER
    FROM SALES AS A;

    /* 확인 */
    SELECT * FROM CUSTOMER
    WHERE MEM_NO = '1000970';
    /* SELECT 서브 쿼리 VS 테이블 결합(JOIN) 처리 속도 비교 */
    SELECT A.*, B.GENDER
    FROM SALES AS A
    LEFT JOIN CUSTOMER AS B
    ON A.MEM_NO = B.MEM_NO;


    /***************FROM절 서브 쿼리***************/
    /* FROM 명령문 안에 또다른  SELECT 명령문 */
    /* FROM 절 괄호 안에는 테이블이 와야하며, 이는 GROUP BY절로 생성된 새로운 테이블을 사용할 수 있고, 테이블 명을 지정해야된다.*/
    SELECT * 
    FROM (SELECT MEM_NO, COUNT(ORDER_NO) FROM SALES GROUP BY MEM_NO) AS A;


    /* FROM절 서브 쿼리: 열 및 테이블명 지정 */                  
    /***************WHERE절 서브 쿼리***************/
    /* WHERE 명령문 안에 SELECT 명령문 */
    /* 2019년도에 가입한 회원의 주문 횟수 구하기 */
    SELECT COUNT(ORDER_NO) AS 주문횟수
    FROM SALES
    WHERE MEM_NO IN(SELECT mem_no FROM customer WHERE YEAR(JOIN_DATE) = 2019);
    /* IN 연산자 뒤에는 LIST 형태가 와야한다. */
    /* YEAR : 날자형 함수 / 연도 변환 */

    SELECT * , YEAR(JOIN_DATE)
    FROM CUSTOMER;

    /* LIST */
    SELECT mem_no FROM customer WHERE YEAR(JOIN_DATE) = 2019;
    /* 밑에와 동일한 내용 */
    SELECT  COUNT(ORDER_NO) AS 주문횟수
    FROM  SALES
    WHERE  MEM_NO IN ('1000001','1000002','1000004','1000005','1000006','1000010','1000011','1000012','1000013','1000014','1000015','1000019','1000020','1000021','1000022','1000023','1000024','1000025','1000026','1000027','1000045','1000046','1000047','1000048','1000055','1000056','1000057','1000058','1000059','1000060','1000061','1000062','1000066','1000067','1000068','1000069','1000070','1000071','1000072','1000073','1000074','1000075','1000076',....);

    /* WHERE 서브쿼리 VS 데이터 결합(JOIN) 결과 값 비교 */
    SELECT COUNT(ORDER_NO) AS 주문회수
    FROM SALES AS A
    INNER JOIN CUSTOMER AS B
    ON A.MEM_NO = B.MEM_NO
    WHERE YEAR(B.JOIN_DATE) = 2019;

     

    SELECT 서브쿼리 > 스칼라 서브 쿼리 > JOIN 보다 작업속도가 늦음

     

    FROM 서브쿼리 > FROM 절안에 테이블로 사용되는 서브쿼리, 열 이름 및 테이블 이름을 지정해주어야 한다.

     

    WHERE 서브쿼리 > 리스트 형태로 사용할 수 있는 명령어

     

    /***************서브 쿼리(Sub Query) + 테이블 결합(JOIN)***************/
    /* 임시테이블 생성 */
    CREATE temporary TABLE SALES_SUB_QUERY;

    SELECT A.구매횟수, B.*
    FROM(select MEM_NO, COUNT(ORDER_NO) AS 구매횟수
    FROM SALES
        GROUP BY MEM_NO) AS A
    INNER JOIN CUSTOMER AS B
    ON A.MEM_NO = B.MEM_NO;

    /* 임시테이블 조회 */
    SELECT * FROM SALES_SUB_QUERY;

    /* 성별이 남성인 조건으로 필터링 */
    SELECT  *
      FROM  SALES_SUB_QUERY
     WHERE  GENDER = 'MAN';

    /* 거주지역별로 필터링 */
    SELECT  ADDR, SUM(구매횟수) AS 구매횟수
      FROM  SALES_SUB_QUERY
     WHERE  GENDER = 'MAN'
     GROUP BY ADDR;
     
     /* 구매횟수가 100회 미만 , 정렬*/
     SELECT  ADDR, SUM(구매횟수) AS 구매횟수
     FROM  SALES_SUB_QUERY
     WHERE  GENDER = 'MAN'
     GROUP BY ADDR
     HAVING SUM(구매횟수) < 100
     ORDER BY SUM(구매횟수) ASC;

     

     

    <From절 서브쿼리 명령어 작성>

     /***************FROM절 서브 쿼리(Sub Query) 작성법***************/
    select a.구매횟수, b.*
    from ( select mem_no, count(order_no) as 구매횟수
               from sales
                group by mem_no) as a
    inner join customer as b
    on a.mem_no = b.mem_no;

    select a.구매횟수, b.*
    from ( select mem_no,
              count(order_no) as 구매횟수
               from sales
               group by mem_no) as a

    'SYNC 기술면접 준비' 카테고리의 다른 글

    SQL 4. SQL 활용_연산자 및 함수(1)  (1) 2023.11.13
    SQL 3. SQL 문법_총정리  (0) 2023.11.13
    SQL 3. SQL 문법_JOIN  (0) 2023.11.13
    SQL 3. SQL 문법_SELECT  (0) 2023.11.13
    SQL 2. SQL 명령어_총정리  (0) 2023.11.13
Designed by Tistory.