Cardemy Card emy ← 탐색으로 돌아가기
[

[SQLD합격] JOIN과 서브쿼리 완전 이해

SQLD에서 가장 많은 수험생이 막히는 구간이다. INNER JOIN, OUTER JOIN, SELF JOIN 등 테이블 연결 개념을 실제 데이터 흐름 기준으로 이해한다. 또한 서브쿼리의 실행 순서와 단일행/다중행 서브쿼리 차이를 학습하며, EXISTS, IN, ANY, ALL 같은 시험 핵심 포인트를 익힌다. 이 단계를 끝내면 복잡한 SQL 문제를 구조적으로 읽는 힘이 생긴다.

71 문항 0 복사 카데미 2026.05.15

수록 문항

총 71개

아래 문항들은 이 학습지에 수록된 카드입니다. 각 카드는 문제(Q)와 답(A)으로 구성되어 있으며, 일부 카드에는 추가 해설이 포함되어 있습니다. 로그인하면 이 학습지를 내 계정으로 복사해 카드를 한 장씩 넘기며 반복 학습할 수 있고, 숙달한 카드는 완료 표시하여 다음 세션에서 제외할 수 있습니다.

  1. #1
    Q.

    SELECT * FROM employees e INNER JOIN departments d ON e.department_id = d.department_id

    A.

    employees와 departments 테이블에서 department_id가 같은 데이터만 조회한다

    INNER JOIN은 양쪽 테이블에 공통으로 존재하는 데이터만 조회한다.
  2. #2
    Q.

    SELECT * FROM employees e JOIN departments d ON e.department_id = d.department_id

    A.

    employees와 departments를 department_id 기준으로 연결해서 조회한다

    JOIN은 INNER JOIN과 동일하게 동작하며 INNER는 생략 가능하다.
  3. #3
    Q.

    SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.department_id

    A.

    직원 이름과 소속 부서명을 함께 조회한다

    JOIN을 사용하면 여러 테이블의 컬럼을 동시에 조회할 수 있다.
  4. #4
    Q.

    SELECT * FROM employees e LEFT OUTER JOIN departments d ON e.department_id = d.department_id

    A.

    employees 기준으로 모든 데이터를 조회하고 연결되는 departments 데이터가 있으면 함께 조회한다

    LEFT OUTER JOIN은 왼쪽 테이블 데이터를 모두 유지한다.
  5. #5
    Q.

    SELECT * FROM employees e RIGHT OUTER JOIN departments d ON e.department_id = d.department_id

    A.

    departments 기준으로 모든 데이터를 조회하고 연결되는 employees 데이터가 있으면 함께 조회한다

    RIGHT OUTER JOIN은 오른쪽 테이블 데이터를 모두 유지한다.
  6. #6
    Q.

    SELECT * FROM employees e FULL OUTER JOIN departments d ON e.department_id = d.department_id

    답은 로그인 후 확인
  7. #7
    Q.

    SELECT * FROM employees e, departments d WHERE e.department_id = d.department_id

    답은 로그인 후 확인
  8. #8
    Q.

    SELECT * FROM employees e CROSS JOIN departments d

    답은 로그인 후 확인
  9. #9
    Q.

    SELECT * FROM employees e NATURAL JOIN departments d

    답은 로그인 후 확인
  10. #10
    Q.

    SELECT * FROM employees e JOIN departments d USING(department_id)

    답은 로그인 후 확인
  11. #11
    Q.

    SELECT e.name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id

    답은 로그인 후 확인
  12. #12
    Q.

    SELECT e.name, d.department_name FROM employees e RIGHT JOIN departments d ON e.department_id = d.department_id

    답은 로그인 후 확인
  13. #13
    Q.

    SELECT * FROM orders o JOIN customers c ON o.customer_id = c.customer_id

    답은 로그인 후 확인
  14. #14
    Q.

    SELECT * FROM order_items oi JOIN products p ON oi.product_id = p.product_id

    답은 로그인 후 확인
  15. #15
    Q.

    SELECT * FROM employees e JOIN jobs j ON e.job_id = j.job_id

    답은 로그인 후 확인
  16. #16
    Q.

    SELECT * FROM employees e SELF JOIN employees m ON e.manager_id = m.employee_id

    답은 로그인 후 확인
  17. #17
    Q.

    SELECT e.name, m.name FROM employees e JOIN employees m ON e.manager_id = m.employee_id

    답은 로그인 후 확인
  18. #18
    Q.

    SELECT * FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id WHERE d.department_id IS NULL

    답은 로그인 후 확인
  19. #19
    Q.

    SELECT * FROM users u JOIN orders o ON u.user_id = o.user_id

    답은 로그인 후 확인
  20. #20
    Q.

    SELECT * FROM users u JOIN orders o ON u.user_id = o.user_id WHERE o.price > 10000

    답은 로그인 후 확인
  21. #21
    Q.

    SELECT * FROM users u JOIN orders o ON u.user_id = o.user_id AND o.status = 'DONE'

    답은 로그인 후 확인
  22. #22
    Q.

    SELECT * FROM users u LEFT JOIN orders o ON u.user_id = o.user_id WHERE o.order_id IS NULL

    답은 로그인 후 확인
  23. #23
    Q.

    SELECT COUNT(*) FROM employees e JOIN departments d ON e.department_id = d.department_id

    답은 로그인 후 확인
  24. #24
    Q.

    SELECT d.department_name, COUNT(*) FROM employees e JOIN departments d ON e.department_id = d.department_id GROUP BY d.department_name

    답은 로그인 후 확인
  25. #25
    Q.

    SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.department_id ORDER BY e.name

    답은 로그인 후 확인
  26. #26
    Q.

    SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees)

    답은 로그인 후 확인
  27. #27
    Q.

    SELECT * FROM employees WHERE salary = (SELECT MAX(salary) FROM employees)

    답은 로그인 후 확인
  28. #28
    Q.

    SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 100)

    답은 로그인 후 확인
  29. #29
    Q.

    SELECT * FROM users WHERE user_id IN (SELECT user_id FROM orders)

    답은 로그인 후 확인
  30. #30
    Q.

    SELECT * FROM users WHERE user_id NOT IN (SELECT user_id FROM orders)

    답은 로그인 후 확인
  31. #31
    Q.

    SELECT * FROM employees WHERE salary > ANY (SELECT salary FROM employees WHERE department_id = 10)

    답은 로그인 후 확인
  32. #32
    Q.

    SELECT * FROM employees WHERE salary > ALL (SELECT salary FROM employees WHERE department_id = 10)

    답은 로그인 후 확인
  33. #33
    Q.

    SELECT * FROM departments d WHERE EXISTS (SELECT 1 FROM employees e WHERE e.department_id = d.department_id)

    답은 로그인 후 확인
  34. #34
    Q.

    SELECT * FROM departments d WHERE NOT EXISTS (SELECT 1 FROM employees e WHERE e.department_id = d.department_id)

    답은 로그인 후 확인
  35. #35
    Q.

    SELECT * FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'SALES')

    답은 로그인 후 확인
  36. #36
    Q.

    SELECT * FROM products WHERE price > (SELECT AVG(price) FROM products)

    답은 로그인 후 확인
  37. #37
    Q.

    SELECT name, (SELECT department_name FROM departments d WHERE e.department_id = d.department_id) FROM employees e

    답은 로그인 후 확인
  38. #38
    Q.

    SELECT * FROM employees e WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id)

    답은 로그인 후 확인
  39. #39
    Q.

    SELECT * FROM employees e WHERE EXISTS (SELECT 1 FROM employees m WHERE e.manager_id = m.employee_id)

    답은 로그인 후 확인
  40. #40
    Q.

    SELECT * FROM orders o WHERE EXISTS (SELECT 1 FROM users u WHERE o.user_id = u.user_id)

    답은 로그인 후 확인
  41. #41
    Q.

    SELECT * FROM users u WHERE EXISTS (SELECT 1 FROM orders o WHERE u.user_id = o.user_id AND o.price > 10000)

    답은 로그인 후 확인
  42. #42
    Q.

    SELECT * FROM employees WHERE department_id IN (10,20,30)

    답은 로그인 후 확인
  43. #43
    Q.

    SELECT * FROM employees WHERE department_id NOT IN (10,20,30)

    답은 로그인 후 확인
  44. #44
    Q.

    SELECT * FROM employees WHERE salary > SOME (SELECT salary FROM employees WHERE department_id = 10)

    답은 로그인 후 확인
  45. #45
    Q.

    SELECT * FROM employees WHERE salary < ALL (SELECT salary FROM employees WHERE department_id = 20)

    답은 로그인 후 확인
  46. #46
    Q.

    SELECT department_id, AVG(salary) FROM employees GROUP BY department_id HAVING AVG(salary) > (SELECT AVG(salary) FROM employees)

    답은 로그인 후 확인
  47. #47
    Q.

    SELECT * FROM employees e JOIN departments d ON e.department_id = d.department_id WHERE d.location_id = 100

    답은 로그인 후 확인
  48. #48
    Q.

    SELECT * FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id WHERE e.salary > 3000

    답은 로그인 후 확인
  49. #49
    Q.

    SELECT * FROM users u JOIN orders o ON u.user_id = o.user_id JOIN payments p ON o.order_id = p.order_id

    답은 로그인 후 확인
  50. #50
    Q.

    SELECT * FROM products p JOIN categories c ON p.category_id = c.category_id

    답은 로그인 후 확인
  51. #51
    Q.

    SELECT * FROM sales s JOIN customers c ON s.customer_id = c.customer_id WHERE s.sale_date > TO_DATE('20250101','YYYYMMDD')

    답은 로그인 후 확인
  52. #52
    Q.

    SELECT e.name, d.department_name, l.location_name FROM employees e JOIN departments d ON e.department_id = d.department_id JOIN locations l ON d.location_id = l.location_id

    답은 로그인 후 확인
  53. #53
    Q.

    SELECT * FROM employees e WHERE e.salary = (SELECT MAX(salary) FROM employees WHERE department_id = e.department_id)

    답은 로그인 후 확인
  54. #54
    Q.

    SELECT * FROM employees e WHERE e.salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id)

    답은 로그인 후 확인
  55. #55
    Q.

    SELECT * FROM users u WHERE EXISTS (SELECT 1 FROM orders o WHERE u.user_id = o.user_id)

    답은 로그인 후 확인
  56. #56
    Q.

    SELECT * FROM users u WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE u.user_id = o.user_id)

    답은 로그인 후 확인
  57. #57
    Q.

    SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE department_name LIKE 'M%')

    답은 로그인 후 확인
  58. #58
    Q.

    SELECT * FROM employees e JOIN departments d ON e.department_id = d.department_id AND d.location_id = 100

    답은 로그인 후 확인
  59. #59
    Q.

    SELECT * FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id AND d.location_id = 100

    답은 로그인 후 확인
  60. #60
    Q.

    SELECT * FROM employees e WHERE department_id = ANY (SELECT department_id FROM departments WHERE location_id = 100)

    답은 로그인 후 확인
  61. #61
    Q.

    SELECT * FROM employees WHERE salary > (SELECT MIN(salary) FROM employees WHERE department_id = 30)

    답은 로그인 후 확인
  62. #62
    Q.

    SELECT * FROM orders o JOIN customers c ON o.customer_id = c.customer_id WHERE c.city = 'SEOUL'

    답은 로그인 후 확인
  63. #63
    Q.

    SELECT c.customer_name, SUM(o.price) FROM customers c JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.customer_name

    답은 로그인 후 확인
  64. #64
    Q.

    SELECT * FROM employees e JOIN departments d ON e.department_id = d.department_id WHERE e.salary > 5000 AND d.department_name = 'SALES'

    답은 로그인 후 확인
  65. #65
    Q.

    SELECT * FROM employees e WHERE EXISTS (SELECT 1 FROM departments d WHERE e.department_id = d.department_id AND d.location_id = 100)

    답은 로그인 후 확인
  66. #66
    Q.

    SELECT * FROM users u JOIN orders o ON u.user_id = o.user_id WHERE o.order_date BETWEEN TO_DATE('20250101','YYYYMMDD') AND TO_DATE('20251231','YYYYMMDD')

    답은 로그인 후 확인
  67. #67
    Q.

    SELECT department_id, COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 5

    답은 로그인 후 확인
  68. #68
    Q.

    SELECT * FROM employees e JOIN jobs j ON e.job_id = j.job_id WHERE j.job_title LIKE '%MANAGER%'

    답은 로그인 후 확인
  69. #69
    Q.

    SELECT * FROM employees e WHERE EXISTS (SELECT 1 FROM employees m WHERE e.manager_id = m.employee_id AND m.salary > 5000)

    답은 로그인 후 확인
  70. #70
    Q.

    SELECT * FROM employees e JOIN departments d ON e.department_id = d.department_id WHERE d.department_name IN ('SALES','HR')

    답은 로그인 후 확인
  71. #71
    Q.

    SELECT * FROM employees e WHERE department_id NOT IN (SELECT department_id FROM departments WHERE location_id = 200)

    답은 로그인 후 확인

처음 5개의 답만 미리 보여드려요. 전체 71개 항목은 로그인 후 학습할 수 있습니다.

이 학습지를 효과적으로 활용하는 방법

  • ① 처음에는 전체 문항을 한 번씩 훑어보며 익숙한 항목과 낯선 항목을 분류하세요.
  • ② 학습 세션에서 "안 외운 문항만" 옵션으로 아직 숙달하지 못한 카드에 집중합니다.
  • ③ 랜덤 순서 학습을 활용해 카드 순서에 의존한 암기를 방지하세요.
  • ④ 키보드 단축키(1·2·A·D·Space)를 쓰면 한 손으로도 빠르게 복습할 수 있습니다.
  • ⑤ 복사(Fork)한 학습지에는 자유롭게 나만의 해설이나 예문을 덧붙여 내 스타일로 다듬어 보세요.

카데미에 로그인하면 이 학습지를
내 학습지로 복사하여 바로 학습할 수 있습니다.