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

JOIN

1. INNER JOIN

두 테이블 간에서 공통된 값이 있는 행만 반환합니다.

inner_join.png

구문

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