난이도: EASY
문제
Table: Customer
+-------------+--------------+
| Column Name | Type |
+-------------+--------------+
| id | int |
| name | varchar |
| referee_id | int |
+-------------+--------------+
In SQL, id is the primary key column for this table.
Each row of this table indicates the id of a customer, their name, and the id of the customer who referred them.
Find the names of the customer that are not referred by the customer with id = 2.
Return the result table in any order.
The result format is in the following example.
Example 1:
Input:
Customer table:
+----+------+---------------+
| id | name | referee_id |
+----+------+---------------+
| 1 | Will | null |
| 2 | Jane | null |
| 3 | Alex | 2 |
| 4 | Bill | null |
| 5 | Zack | 1 |
| 6 | Mark | 2 |
+----+------+---------------+
Output:
+--------+
| name |
+--------+
| Will |
| Jane |
| Bill |
| Zack |
+--------+
시도 1
SELECT name
FROM Customer
WHERE referee_id IS NULL
문제 안 읽고 걍 널인거 찾는갑다 하고 썼다가 틀림 ㅋㅋ... 문제를 잘읽자..!
나의 최종 제출 답안:
SELECT name
FROM Customer
WHERE referee_id IS NULL
OR referee_id <> 2
이지피지....
chatGPT에게 더 간단하고 효율적이게 수정해달라고 요청한 답안:
🔥 더 효율적인 방법 (INDEX를 활용하기 위한 방법)
1️⃣ EXISTS를 활용한 방법
SELECT name
FROM Customer C
WHERE NOT EXISTS (
SELECT 1 FROM Customer
WHERE referee_id = 2 AND C.referee_id = 2
);
✅ 장점:
- EXISTS를 사용하면 서브쿼리가 TRUE를 반환하는 즉시 멈출 수 있어 성능이 더 나을 수 있습니다.
- 특히 Customer 테이블이 크다면 INDEX를 활용하기 쉬워 최적화될 가능성이 큽니다.
2️⃣ CASE를 활용한 방법
SELECT name
FROM Customer
WHERE CASE
WHEN referee_id IS NULL THEN 1
WHEN referee_id <> 2 THEN 1
ELSE 0
END = 1;
✅ 장점:
- CASE를 사용하면 NULL 비교 연산을 더 명확하게 처리할 수 있습니다.
- 하지만 실행 계획에 따라 성능 차이가 클 수 있습니다.
🚀 결론: 가장 효율적인 방법은?
1️⃣ 가장 추천하는 방법: 기존 WHERE referee_id IS NULL OR referee_id <> 2를 유지하는 것이 가장 인덱스를 잘 활용하는 방법.
2️⃣ NVL(referee_id, 0) <> 2는 인덱스 최적화가 어렵기 때문에 비추.
3️⃣ 테이블이 크다면 EXISTS를 활용하여 최적화 시도 가능.
4️⃣ 복잡한 경우 CASE 문을 활용할 수도 있지만, 기본적인 WHERE 절이 더 효율적일 가능성이 높음.
💡 즉, 기존 쿼리가 가장 효율적이며, NVL 사용은 오히려 성능 저하 가능성이 큽니다! 🚀
'Coding Challenges > LeetCode' 카테고리의 다른 글
[Java] 21. Merge Two Sorted Lists (1) | 2025.02.07 |
---|---|
[SQL50] 595. Big Countries (0) | 2025.02.07 |
[SQL50] 1757. Recyclable and Low Fat Products (0) | 2025.02.06 |
[Java] 20. Valid Parentheses (0) | 2025.02.06 |
[Java] 14. Longest Common Prefix (3) | 2025.02.05 |