언어/MYSQL

Join

JM Lee 2023. 12. 8. 16:30
728x90

JOIN이란 두 개 이상의 테ㅔ이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다. RDBMS에서는 두 테이블을 엮어야만 형태가 나오는 것들이 많다. 

 

1. Inner Join

두 테이블의 조인을 위한 조건으로는 테이블이 One to Many 관계로 연결되어야 한다.

 

학생 테이블과 강의 테이블을 생성했다.

-- 학생 테이블
CREATE TABLE Students (
    StudentID INT PRIMARY KEY,
    FirstName VARCHAR(255),
    LastName VARCHAR(255),
    Age INT
);

-- 강의 테이블
CREATE TABLE Courses (
    CourseID INT PRIMARY KEY,
    CourseName VARCHAR(255),
    Instructor VARCHAR(255)
);

-- 학생과 강의 정보를 연결하는 테이블
CREATE TABLE StudentCourses (
    StudentID INT,
    CourseID INT,
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
    FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);

-- 학생과 강의 데이터 추가
INSERT INTO Students VALUES (1, 'John', 'Doe', 20);
INSERT INTO Students VALUES (2, 'Jane', 'Smith', 22);

INSERT INTO Courses VALUES (101, 'Math', 'Professor X');
INSERT INTO Courses VALUES (102, 'History', 'Professor Y');

-- 학생과 강의 연결 정보 추가
INSERT INTO StudentCourses VALUES (1, 101);
INSERT INTO StudentCourses VALUES (2, 102);
INSERT INTO StudentCourses VALUES (1, 102);

 

이제 Inner Join을 사용해서 21살 이상의 학생의 이름, 강의 이름, 강사의 이름을 가져오는 쿼리를 작성한다.

-- Inner Join을 사용하여 학생의 이름, 강의 이름, 및 강사 이름을 가져오는 쿼리
SELECT Students.FirstName, Students.LastName, Courses.CourseName, Courses.Instructor # 열 목록
FROM Students # 첫 번째 테이블
INNER JOIN StudentCourses ON Students.StudentID = StudentCourses.StudentID # 두 번째 테이블
INNER JOIN Courses ON StudentCourses.CourseID = Courses.CourseID
WHERE AGE > 21; # 검색 조건

 

이것을 형식만 정리하자면 아래와 같다.

SELECT <열 목록>
FROM <첫 번째 테이블>
	INNER JOIN <두 번째 테이블>
	ON<조인될 조건>
WHERE 검색 조건

 

 

2. Outer Join

Inner Join은 두 테이블 모두 데이터가 있어야 가능하지만, Outer Join은 한 쪽에만 데이터가 있어도 결과가 나온다. Inner Join에 비해 자주 사용하는 방식은 아니지만, 가끔이라도 사용되기 때문에 알아두면 좋다.

 

Outer Join의 형식을 보면, 아래와 같다.

LEFT, RIGHT, FULL 중 하나를 선택하면 된다.

SELECT <열 목록> FROM <첫번째 테이블(LEFT TABLE)>
	<LEFT / RIGHT / FULL> OUTER JOIN <두번째 테이블(RIGHT TABLE)>
    ON <조인 조건>
[WHERE 검색 조건]

 

3. 상호 조인

한쪽 테이블의 모든 행과 다른쪽 테이블의 모든 행을 조인시키는 기능

상호 조인 결과의 전체 행 개수는 두 테이블의 각 행의 개수를 곱한 개수가 된다.

상호 조인의 특징으로는 다음과 같다.

  • ON 구문을 사용할 수 없다.
  • 랜덤으로 조인하기 때문에 결과내용은 무의미하다.
  • 주 용도는 테스트하기 위해 대용량의 데이터를 생성할 때

'언어 > MYSQL' 카테고리의 다른 글

변수 사용, 데이터 형식 변환  (1) 2023.12.08
서브 쿼리  (0) 2023.12.08
Select ~ from ~ where 기본 조건식  (1) 2023.12.08