MySQL에서 테이블 간 데이터를 연결하기 위해서
JOIN
이 사용됩니다.JOIN
의 방법에는 여러 가지 있으며, 각JOIN
유형은 테이블 간의 관계에 따라 다르게 사용됩니다.
-- 1:N 관계
CREATE TABLE Professor (
ProfessorID INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(100),
Department VARCHAR(100)
);
INSERT INTO Professor (Name, Department)
VALUES ('Dr. Kim', 'Mathematics'),
('Dr. Lee', 'History'),
('Dr. Choi', 'Science');
CREATE TABLE Student (
StudentID INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(100),
Major VARCHAR(100),
ProfessorID INT,
FOREIGN KEY (ProfessorID) REFERENCES Professor(ProfessorID)
);
-- 1:1 관계
CREATE TABLE ID_Card (
CardID INT PRIMARY KEY AUTO_INCREMENT,
StudentID INT UNIQUE, -- UNIQUE로 1:1 관계 설정
IssueDate DATE,
FOREIGN KEY (StudentID) REFERENCES Student(StudentID) ON DELETE CASCADE
);
CREATE TABLE Course (
CourseID INT PRIMARY KEY AUTO_INCREMENT,
CourseName VARCHAR(100)
);
-- N:M 관계를 위한 중간 테이블
CREATE TABLE Student_Course (
StudentID INT,
CourseID INT,
PRIMARY KEY (StudentID, CourseID),
FOREIGN KEY (StudentID) REFERENCES Student(StudentID),
FOREIGN KEY (CourseID) REFERENCES Course(CourseID)
);
INSERT INTO Student (Name, Major)
INSERT INTO Student (Name, Major, ProfessorID)
VALUES ('Alice Johnson', 'Mathematics', 1),
('Bob Lee', 'Science', 3),
('Charlie Kim', 'History', 2),
('David Park', 'Mathematics', 1);
INSERT INTO ID_Card (StudentID, IssueDate)
VALUES (1, '2023-09-01'),
(2, '2023-08-15'),
(3, '2023-10-05'),
(4, '2023-11-12');
INSERT INTO Course (CourseName)
VALUES ('Mathematics'),
('Science'),
('History');
INSERT INTO Student_Course (StudentID, CourseID)
VALUES (1, 1), -- Alice Mathematics
(1, 3), -- Alice History
(3, 3), -- Charlie History
(4, 3); -- David History
두 테이블 간에서 공통된 값이 있는 행만 반환합니다.
구문
SELECT columns
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
예시 코드
강의를 수강하는 학생의 정보만 반환합니다.
Bob Lee는 강의를 수강하지 않으므로 결과에 포함되지 않으며, Science 강의도 수강생이 없기 때문에 결과에 포함되지 않습니다.
SELECT Student.Name, Student.Major, Course.CourseName
FROM Student
INNER JOIN Student_Course ON Student.StudentID = Student_Course.StudentID
INNER JOIN Course ON Student_Course.CourseID = Course.CourseID;
Name | Major | CourseName | |
---|---|---|---|
Alice Johnson | Mathematics | Mathematics | |
Alice Johnson | Mathematics | History | |
Charlie Kim | History | History | |
David Park | Mathematics | History |