Database - SQL Basic Query Workstation

Q1. Combine Two Tables
문제
두 개의 테이블 Person, Address가 있을 때
Person의 모든 사람 정보를 유지하면서 주소 정보를 결합한다.
풀이
SELECT
firstName,
lastName,
city,
state
FROM Person
LEFT JOIN Address
ON Person.personId = Address.personId;
핵심 개념: LEFT JOIN
LEFT JOIN은 왼쪽 테이블의 모든 데이터를 유지하고, 오른쪽 테이블과 매칭되는 데이터만 가져온다.
구조:
SELECT *
FROM A
LEFT JOIN B
ON A.key = B.key;
예:
Person
| personId | name |
| 1 | Kim |
| 2 | Lee |
Address
| personId | city |
| 1 | Seoul |
결과:
| name | city |
| Kim | Seoul |
| Lee | NULL |
주소가 없어도 Person 데이터는 유지된다.
Q2. Employees Earning More Than Their Managers
문제
자신의 매니저보다 급여가 높은 직원 찾기
풀이
SELECT e1.name AS Employee
FROM Employee e1
JOIN Employee e2
ON e1.managerId = e2.id
WHERE e1.salary > e2.salary;
핵심 개념: SELF JOIN
같은 테이블을 두 번 사용해서 비교.
구조:
FROM Employee e1
JOIN Employee e2
ON e1.managerId = e2.id
의미:
- e1 → 직원
- e2 → 매니저
비교:
e1.salary > e2.salary
직원 급여 > 매니저 급여
Q3. Not Boring Movies
문제
다음 조건 만족하는 영화 조회
조건:
- id가 홀수
- description이 boring이 아님
- rating 기준 내림차순 정렬
풀이
SELECT *
FROM Cinema
WHERE id % 2 = 1
AND description != 'boring'
ORDER BY rating DESC;
핵심 개념
1. 홀수 체크
id % 2 = 1
예:
1 % 2 = 1 → 홀수
2 % 2 = 0 → 짝수
2. 특정 값 제외
description != 'boring'
또는:
description <> 'boring'
3. 컬럼 값 확인
description에 어떤 값이 존재하는지 확인:
SELECT DISTINCT description
FROM Cinema;
Python:
df["description"].unique()
와 같은 역할.
결과:
funny
boring
interesting
Q4. Find Customer Referee
문제
referee_id가 2가 아닌 고객 조회
단, referee 정보가 없는(NULL) 고객 포함
풀이
SELECT name
FROM Customer
WHERE referee_id != 2
OR referee_id IS NULL;
핵심 개념: NULL 처리
NULL은 비교 연산 불가능.
잘못된 방법:
referee_id = NULL
사용:
referee_id IS NULL
NULL 제외:
referee_id IS NOT NULL
Review Quiz
Q1. Employees Whose Manager Left the Company
문제
- 급여가 30000 미만
- 매니저가 퇴사한 직원 조회
조건:
manager_id가 존재하지만
해당 manager_id가 Employee 테이블에 없음
방법 1. Subquery
SELECT employee_id
FROM Employees
WHERE salary < 30000
AND manager_id NOT IN(
SELECT employee_id
FROM Employees
)
ORDER BY employee_id;
동작 방식
서브쿼리:
SELECT employee_id
FROM Employees
현재 존재하는 직원 목록 조회
예:
1
2
3
4
비교:
manager_id NOT IN (1,2,3,4)
없는 매니저 = 퇴사
방법 2. LEFT JOIN
SELECT e1.employee_id
FROM Employees e1
LEFT JOIN Employees e2
ON e2.employee_id = e1.manager_id
WHERE e1.salary < 30000
AND e1.manager_id IS NOT NULL
AND e2.employee_id IS NULL
ORDER BY e1.employee_id;
핵심 개념: 존재하지 않는 데이터 찾기
패턴:
LEFT JOIN
+
IS NULL
의미:
왼쪽 데이터는 있는데
오른쪽 매칭 데이터가 없음
즉:
직원 → 존재
매니저 → 없음
= 매니저 퇴사
기억할 SQL 실행 순서
실제로 SQL은 작성 순서와 실행 순서가 다름.
실행 순서:
FROM
↓
WHERE
↓
GROUP BY
↓
HAVING
↓
SELECT
↓
ORDER BY
↓
LIMIT
SQL 문제 풀 때는 항상:
- 어떤 테이블에서 가져오는지 (FROM)
- 어떤 조건인지 (WHERE)
- 어떻게 정렬할지 (ORDER BY)
두번째 단계로 돌아오겠다. 아비백~

'내코가석자' 카테고리의 다른 글
| [SQL] LeetCode Quest - Database(SQL Basic Query Workstation)2 (0) | 2026.06.20 |
|---|---|
| 02-3. 모의고사 (프로그래머스, JAVA) (0) | 2026.03.11 |
| 02-2. 두 개 뽑아서 더하기 (프로그래머스, JAVA) (0) | 2026.03.11 |
| 02-1. 배열 몸풀기 문제 (0) | 2026.03.11 |
| 02. 배열 (0) | 2026.03.07 |