22.01.02 [5] TIL : SQL - WHERE절에서 NULL, 결합 시 NULL 조건, 명령어 작성법

KSH·2022년 1월 2일
0
post-thumbnail
post-custom-banner

WHERE절에서 NULL 조건

값이 NULL인 값을 찾기위해 WHERE절에서 조건을 줄 때 IS NULL을
사용하면 된다!

처음에 어떻게 할지 몰라서
B.MEM_NO = NULL;
B.MEM_NO = "NULL";
이렇게 둘 다 해봤는데 오류가 발생했다.

💡 앞으로는 IS NULL 사용하여 WHERE MEM_NO IS NULL; 입력하기!


SQL 결합시 NULL 조건줄 때

: LEFT JOIN, RIGHT JOIN으로 결합될 때 데이터가 없는 테이블의 값들은 NULL로 표현된다.
이때 NULL 값을 찾으려고 할 때 두 가지 경우가 있다.
결합한 왼쪽 테이블을 A, 오른쪽 테이블을 B라고 할 때

① NULL을 찾으려는 열이 A와 B에 둘 다 있을때
👉 : LEFT, RIGHT JOIN을 생각하고 A, B 둘 중 하나의 열을 호출해야 한다.

만약, MEM_NO를 기준으로 A, B가 결합했는데 MEM_NO에 NULL값이 들어있는 행을 출력하고 싶다면 NULL값이 들어 있는 테이블을 앞에 호출하고 MEM_NO를 써야한다.
(LEFT JOIN이라면 B에 NULL / RIGHT JOIN이라면 A에 NULL)
∴ LEFT JOIN : WHERE B.MEM_NO IS NULL;
∴ RIGHT JOIN : WHERE A.MEM_NO IS NULL;

② NULL을 찾으려는 열이 한 쪽에만 있을때
👉 : 그 열이 있는 테이블을 호출할 필요 없이 열만 호출해서 사용하면 된다.

만약, MEM_NO를 기준으로 A, B가 결합했는데 PRODUCT_CODE에 NULL값이 들어있는 행을 출력하고 싶다면 PRODUCT_CODE는 한 쪽 테이블에만 있는 것이므로 따로 호출하지 않고 사용한다.

∴ WHERE PRODUCT_CODE IS NULL;


SQL 명령어 작성법

  1. SELECT, FROM 등 이런 절 다음에는 스페이스바 두 번 하고 작성하자.
    👉 : 스페이스바 두 번인 이유 : 다음 행에 칸을 맞출 때 탭 키 2번으로 바로 맞출 수 있다.

  2. 앞의 SELECT, FROM 등 이런 절은 오른쪽 정렬으로 맞추자.

FROM 서브 쿼리 결합 시 주의할 점

Q) 카테고리 및 브랜드별 판매수량을 구하시오.

SELECT  CATEGORY
	,BRAND
        ,SUM(SALES_QTY) AS 판매수량
  FROM  (
	SELECT  PRODUCT_CODE
	,SUM(SALES_QTY) AS 판매수량
        FROM  SALES
        GROUP
        BY  PRODUCT_CODE         
	) AS A
  LEFT
  JOIN  PRODUCT AS B
    ON  A.PRODUCT_CODE = B.PRODUCT_CODE
 GROUP
    BY  CATEGORY
	,BRAND; 
  • 여기서 처음 SELECT에 SUM(SALES_QTY)를 쓰면 안 되는 이유

    ① 문법적인 관점
    : SUM(SALES_QTY)는 FROM절의 서브 쿼리에서 "판매수량"이라는 이름으로 저장되었기 때문에 SUM(SALES_QTY)를 호출하려면 판매수량으로 써야한다.

    ② 의미적인 관점
    : 하지만 판매수량이라고 쓴다고 해도 문제의 정답이 아니다.
    ∵ 판매수량으로 저장된 SUM(SALES_QTY)는 CATEGORY, BRAND로 그룹화되기 전에 RAW한 SALES의 SALES_QTY를 합한 것이기 때문에
    문제의 의도와 맞지 않다.

    💡 깨달은 점

    요약하자면, 판매수량과 SUM(SALES_QTY)는 다른 값이다.

    SUM(SALES_QTY) : SALES의 RAW한 SALES_QTY 합
    판매수량 : SALES의 RAW한 SALES_QTY 합에서 CATEGORY, BRAND로 그룹화된 값

    ∴ 처음 SELECT에 SUM(판매수량)을 써야한다.

profile
성실히 살아가는 비전공자
post-custom-banner

0개의 댓글