
프로그래머스 SQL 고득점 KIT 내 IS NULL 문제
Level 2. ROOT 아이템 구하기.
ROOT 아이템을 찾아 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME)을 출력하는 SQL문을 작성해 주세요. 이때, 결과는 아이템 ID를 기준으로 오름차순 정렬해 주세요.
MY SQL
SELECT I.ITEM_ID, I.ITEM_NAME
FROM ITEM_INFO I
INNER JOIN ITEM_TREE T ON I.ITEM_ID = T.ITEM_ID
WHERE T.PARENT_ITEM_ID IS NULL
ORDER BY I.ITEM_ID ASC;
JOIN에서 ON 의 사용
JOIN에서 ON은 두 테이블간의 관계를 나타내야한다.
다른 JOIN 조건들은 WHERE절에서 필터링해야함.
JOIN에서 WHERE과 HAVING의 차이
WHERE GROUP BY 전에 실행.GROUP BY 없이 사용 가능.WHERE절 집계함수 (SUM AVG MAX 등) 사용 못함 - 그룹 내 데이터를 하나의 결과로 축약하는 것이기 때문에! WHERE절에서는 집계함수 사용 못함.오류.
SELECT * FROM employees WHERE salary = MAX(salary);
서브쿼리사용하기.SELECT * FROM employees WHERE salary = (SELECT MAX(salary) FROM employees);
HAVING절 사용하기.SELECT department, MAX(salary) FROM employees GROUP BY department HAVING MAX(salary) > 5000;
WHERE + 단순조건 [= > <] 가능WHERE + 단일행 서브쿼리 [집계함수 = > <] 가능 WHERE + 다중행 서브쿼리 [집계함수 = > <] 오류 SELECT * FROM products WHERE price = (SELECT price FROM products WHERE category = 'Electronics');
오류 - price = (SELECT ~) 구문이 다중행 반환할 가능성이 있는데 =를 사용함.
WHERE + 다중행 서브쿼리 IN 사용시 [집계함수 = > <] 가능SELECT * FROM products WHERE price IN (SELECT price FROM products WHERE category = 'Electronics');
가능 - IN 연산자는 = 와 같은 단일행 연산자가 아니라 다중값을 비교 가능한 연산자라서 다중행 서브쿼리와 사용 가능.
HAVINGGROUP BY 이후 실행.GROUP BY 가 꼭 필요함.AVG SUM MAX 등) 사용 가능.= < > 등) 사용 가능.단일행 필터링 -
WHERE
그룹별 필터링 -HAVING