SQL에서의 부분집합과 교집합 연산 연습문제

예제 데이터:

CREATE TABLE students (
  id INT,
  name VARCHAR(50),
  PRIMARY KEY (id)
);

INSERT INTO students (id, name) VALUES
  (1, 'John'),
  (2, 'Sarah'),
  (3, 'Mike'),
  (4, 'Emily');

CREATE TABLE courses (
  course_id INT,
  course_name VARCHAR(50),
  PRIMARY KEY (course_id)
);

INSERT INTO courses (course_id, course_name) VALUES
  (101, 'Math'),
  (102, 'Science'),
  (103, 'History');

CREATE TABLE student_courses (
  student_id INT,
  course_id INT
);

INSERT INTO student_courses (student_id, course_id) VALUES
  (1, 101),
  (1, 102),
  (2, 101),
  (3, 103);

부분집합 연산 (Subquery)

부분집합 연산은 한 쿼리의 결과를 다른 쿼리에 활용하는 방법입니다. 예를 들어, ‘students’ 테이블에서 ‘Math’ 과목을 수강한 학생들을 조회해보겠습니다.

SELECT name
FROM students
WHERE id IN (
  SELECT student_id
  FROM student_courses
  WHERE course_id = 101
);

위 쿼리는 ‘students’ 테이블에서 ‘id’가 ‘student_courses’ 테이블에서 ‘course_id’가 101인 값과 일치하는 학생의 이름을 조회합니다.

교집합 연산 (JOIN)

교집합 연산은 두 개 이상의 테이블을 결합하여 결과를 조회하는 방법입니다. 예를 들어, ‘students’ 테이블과 ‘courses’ 테이블을 조인하여 각 학생이 수강한 과목과 과목 이름을 조회해보겠습니다.

SELECT students.name, courses.course_name
FROM students
JOIN student_courses ON students.id = student_courses.student_id
JOIN courses ON student_courses.course_id = courses.course_id;

위 쿼리는 ‘students’ 테이블과 ‘student_courses’ 테이블, 그리고 ‘courses’ 테이블을 조인하여 학생들의 이름과 수강한 과목 이름을 조회합니다.

이렇게 부분집합과 교집합 연산을 활용하여 데이터를 필터링하거나 결합하는 것은 SQL에서 매우 유용한 작업입니다.

추가 참고 자료:

#SQL #부분집합 #교집합