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 명령어 작성법
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(판매수량)을 써야한다.