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 |