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 #부분집합 #교집합