현 상황
커뮤니티의 상세보기 화면 구현 중, 커뮤니티 게시판, 주제, 제목, 내용은 구현하였음 댓글의 내용, 유저-유저id는 어떻게 들고 올 것인가?
JOIN 5줄 요약
조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다.
INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.
OUTER JOIN(외부 조인)은 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다.
CROSS JOIN(상호 조인)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다.
SELF JOIN(자체 조인)은 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다.
일단 하나씩 해보자.
제일 간단한
userid를 받아오는 것부터 해보자.
내 식으로 정리하자면,
-inner join : 교집합
-outer join : 둘 중 어디에 있어도 나올게
-cross join : 합집합
조인 : 내가 원하는 결과들을 합해 놓은 것.
지금은 조인의 종류보다는 조인을 쓸 줄 아는 것에 초점.
조인 틀
select <출력할 열 > From <가져올 table> where <조건>
select <출력할 열> from <기본 틀 되는 table>
[inner/outer/cross] join <조인할 테이블>on <조인을 할 조건>
조인예제
students 테이블
id | name |
1 | Alice |
2 | Bob |
3 | Carol |
4 | Dave |
scores 테이블
student_id | score |
1 | 85 |
2 | 90 |
4 | 78 |
5 | 92 |
INNER JOIN
INNER JOIN은 두 테이블에서 매칭되는 행만 반환합니다.
sql코드 복사
SELECT students.id, students.name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id;
결과
id | name | score |
1 | Alice | 85 |
2 | Bob | 90 |
4 | Dave | 78 |
LEFT JOIN
LEFT JOIN은 왼쪽 테이블의 모든 행과 오른쪽 테이블에서 매칭되는 행을 반환합니다. 매칭되지 않는 오른쪽 테이블의 값은 NULL로 표시됩니다.
sql코드 복사
SELECT students.id, students.name, scores.score
FROM students
LEFT JOIN scores ON students.id = scores.student_id;
결과
id | name | score |
1 | Alice | 85 |
2 | Bob | 90 |
3 | Carol | NULL |
4 | Dave | 78 |
RIGHT JOIN
RIGHT JOIN은 오른쪽 테이블의 모든 행과 왼쪽 테이블에서 매칭되는 행을 반환합니다. 매칭되지 않는 왼쪽 테이블의 값은 NULL로 표시됩니다.
sql코드 복사
SELECT students.id, students.name, scores.score
FROM students
RIGHT JOIN scores ON students.id = scores.student_id;
결과
id | name | score |
1 | Alice | 85 |
2 | Bob | 90 |
NULL | NULL | 92 |
4 | Dave | 78 |
FULL OUTER JOIN
FULL OUTER JOIN은 두 테이블에서 매칭되는 행을 모두 반환하며, 매칭되지 않는 행은 NULL로 표시됩니다.
sql코드 복사
SELECT students.id, students.name, scores.score
FROM students
FULL OUTER JOIN scores ON students.id = scores.student_id;
결과
id | name | score |
1 | Alice | 85 |
2 | Bob | 90 |
3 | Carol | NULL |
4 | Dave | 78 |
NULL | NULL | 92 |
조인3개

목표는 각 학생이 어떤 과목을 수강했는지 조회하는 것입니다.
JOIN을 사용한 쿼리
세 개의 테이블을 조인하기 위해 두 번의 JOIN을 사용합니다. 각 학생이 수강한 과목 이름을 조회하려면
students
테이블과 enrollments
테이블을 먼저 조인하고, 그 결과를 courses
테이블과 조인하면 됩니다.sql코드 복사
SELECT students.name, students.age, courses.course_name
FROM students
JOIN enrollments ON students.student_id = enrollments.student_id
JOIN courses ON enrollments.course_id = courses.course_id;
이 쿼리의 결과는 다음과 같습니다:
이름 (name) | 나이 (age) | 과목 이름 (course_name) |
철수 | 21 | 수학 |
철수 | 21 | 과학 |
영희 | 22 | 역사 |
민수 | 20 | 미술 |
민수 | 20 | 물리학 |
설명
students
와enrollments
를student_id
를 기준으로 조인합니다.
- 그 결과를
courses
와course_id
를 기준으로 조인합니다.
이 방식으로 세 개의 테이블을 쉽게 조인할 수 있습니다. 각 테이블 간의 관계를 명확하게 이해하고, 그 관계를 기준으로 조인하여 필요한 데이터를 조회할 수 있습니다.
조인 쿼리의 기본 틀
기본적으로 조인 쿼리는 다음과 같은 구조를 가집니다:
sql코드 복사
SELECT [컬럼 목록]
FROM [첫 번째 테이블]
JOIN [두 번째 테이블] ON [조인 조건]
JOIN [세 번째 테이블] ON [조인 조건]
...
여기서:
[컬럼 목록]
은 조회하고자 하는 컬럼들을 나열한 것입니다.
[첫 번째 테이블]
은 기본 테이블입니다.
[두 번째 테이블]
과[세 번째 테이블]
등은 조인할 테이블들입니다.
[조인 조건]
은 두 테이블 간에 어떤 기준으로 조인할지를 지정하는 조건입니다.
SELECT students.name, students.age, courses.course_name
FROM students
JOIN enrollments ON students.student_id = enrollments.student_id
JOIN courses ON enrollments.course_id = courses.course_id;
이 쿼리를 실행하면 각 학생이 수강한 과목 이름을 조회할 수 있습니다.
세부 설명
- SELECT: 조회할 컬럼 목록을 나열합니다.
students.name
: 학생의 이름students.age
: 학생의 나이courses.course_name
: 과목 이름
- FROM: 기본 테이블을 지정합니다.
students
테이블을 기본 테이블로 사용합니다.
- JOIN: 다른 테이블과의 조인 조건을 지정합니다.
enrollments
테이블을students.student_id
와enrollments.student_id
를 기준으로 조인합니다.courses
테이블을enrollments.course_id
와courses.course_id
를 기준으로 조인합니다.- 조회하고자 하는 주요 데이터: 조회하려는 주요 데이터는 학생의 이름과 나이입니다. 따라서
students
테이블이 기본 테이블이 됩니다. - 데이터의 논리적 흐름: 학생 정보에서 시작하여 수강 기록을 통해 과목 정보로 흐르는 논리적 순서를 따릅니다.
- 다른 테이블과의 관계:
students
테이블은enrollments
테이블과student_id
를 통해 관계를 맺고 있으며,enrollments
테이블은courses
테이블과course_id
를 통해 관계를 맺고 있습니다. - FROM students:
students
테이블을 기본 테이블로 선택합니다. - JOIN enrollments ON students.student_id = enrollments.student_id:
enrollments
테이블과 학생 ID를 기준으로 조인합니다. - JOIN courses ON enrollments.course_id = courses.course_id:
courses
테이블과 과목 ID를 기준으로 조인합니다.
기본 테이블 선택 기준
쿼리 작성
이제 기본 테이블을
students
테이블로 선택하고, 조인 쿼리를 작성합니다.sql코드 복사
SELECT students.name, students.age, courses.course_name
FROM students
JOIN enrollments ON students.student_id = enrollments.student_id
JOIN courses ON enrollments.course_id = courses.course_id;
세부 설명
Share article