본문 바로가기

Database/sql 강의

sql 독학 강의 # inner join with ansi SQL 13편 -sTricky

sql 독학 강의 #inner join with ansi SQL 13편 -sTricky

 

컨텐츠 index

0. inner join의 정의

1. inner join 사용 예제

2. inner join SQL 작성방법

3. inner join으로 3개의 테이블을 join 하는 예제

안녕하세요.

 

sql 독학 강의 오늘은 inner join, 가장 일반적인 조인에 대해서 이야기합니다.

 

보통 특별한 이야기가 없이 join을 이야기한다면  inner join 이야기하시는 게 맞을 겁니다.

 

그럼 쉬운 내용이니 바로 시작하겠습니다.

 

#전편 강의 보러 가기#

2020/04/20 - [Database/sql 강의] - sql 독학 강의 # Cartesian Product 카티션 곱 ansi SQL 문법 12편 -sTricky

 

sql 독학 강의 # Cartesian Product 카티션 곱 ansi SQL 문법 12편 -sTricky

sql 독학 강의 # Cartesian Product 카티션 곱 ansi SQL 문법 12편 -sTricky 컨텐츠 index 0. Cartesian Product, 카티션곱 의 정의 1. 카티션곱 활용방법 2. 카티션곱 SQL 작성방법 SQL 독학 강의 오늘은 join의..

stricky.tistory.com

 


0. inner join의 정의

A, B 두 테이블이 있을 때 서로 연결되는 key가 있다고 가정하고, 해당 키의 값이 값은 데이터를 가지고 와서 출력하는 것을 의미합니다.

 

만약 교수 테이블, 학과 테이블이 있을 때 교수들의 소속 학과를 함께 출력하는 경우, 이 inner join을 이용해서 join을 해서 출력해야 합니다.

 

inner join은 EQUI join 이라고도 하고, 그냥 join 이라고도 하며, 등가 조인 이라고도 표현할 수 있습니다.

 

1. inner join 사용 예제

우선, 교수 테이블과, 학과 테이블 데이터를 한번 확인해보겠습니다.

select * from class.professor;
select * from class.major;

위 테이블을 보면 교수 테이블에 교수들의 이름이 있고, 학과 테이블에 학과 이름이 있습니다. 그리고 교수 테이블을 보면 bl_major_id라는 소속 학과 아이디가 있습니다. 이 소속 학과 아이디는 학과 테이블의 major_id와 매핑이 됩니다.

 

이것을 FK, Foreign Key라고 합니다. 두 테이블의 연결하는 key가 되는 것입니다. 이 FK를 join 시에 조건으로 넣어주시면 됩니다.

 

그럼 두 테이블을 inner join 하여 교수 이름과, 학과명이 출력되도록 하는 예제를 보겠습니다.

 

2. inner join SQL 작성방법

inner join을 이용하는 SQL 작성방법을 확인해 보겠습니다.

select p.name as 교수이름, m.major_title as 학과명
from class.professor p , class.major m
where p.bl_major_id = m.major_id;

위와 같이 mysql SQL 문법을 따른 SQL을 작성했습니다.

 

그럼 이 inner join을 ansi SQL로 작성한다면 어떻게 작성할 수 있을까요?

select p.name as 교수이름, m.major_title as 학과명
from class.professor p
         join class.major m
              on p.bl_major_id = m.major_id;
              
select p.name as 교수이름, m.major_title as 학과명
from class.professor p
         cross join class.major m
              on p.bl_major_id = m.major_id;
              
select p.name as 교수이름, m.major_title as 학과명
from class.professor p
         inner join class.major m
              on p.bl_major_id = m.major_id;

이렇게 세 가지 방법으로 표현할 수 있습니다.

cross join, join, inner join 모두 같은 결과를 보여주고 있습니다.

inner join의 결과

 

좀 더 명확하게 표현하려면 inner join으로 SQL을 작성한다면 나중에 다른 사람이 봐도 쉽게 해당 SQL에 대해서 추측이 가능하겠죠.

 

3. inner join으로 3개의 테이블을 join 하는 예제

이번에는 inner join으로 3개의 테이블을 join 하여 출력하는 예제를 함께 해보겠습니다.

학생, 교수, 학과 테이블을 두고, 어떤 학생이 어떤 담당교수와 소속 학과가 어디인지 출력하는 SQL을 작성해보겠습니다.

 

참고로, 하나와 하나의 테이블을 join 할 때 FK을 각각 테이블에 공통적으로 존재하는 키를 쓴다고 했는데, 그럼 3개를 join 할 때는 어떻게 Key를 연결해야 할지 헷갈리시는 분들이 많은데 아래 그림으로 설명하겠습니다.

3개 + 테이블의 join키를 찾는 방법

예를 들어 테이블 1과 테이블2를 조인할때 공통으로 들어있는 Key를 찾아 연결 하고, 그것을 테이블 3과 join 한다고 생각하면 쉽습니다. 테이블1 과 테이블2의 join 한 데이터를 하나의 테이블로 생각하고, 테이블3과 비교했을 때 공통의 키를 찾아서 다시 1:1 join을 하다고 생각하면 되는 것 이죠.

 

그럼 다시 문제로 돌아가서, 학생, 교수, 학과 테이블을 한 번에 inner join을 하여 각 학생별 담당교수와 소속 학과까지 출력하는 SQL문 예제를 보겠습니다.

select s.name as 학생이름, p.name as 교수이름, m.major_title as 학과명
from class.student s, class.major m, class.professor p
where s.bl_prfs_id = p.prfs_id
  and p.bl_major_id = m.major_id;

위 SQL을 ansi SQL로 작성해보도록 하겠습니다. inner join 명령어로만 작성하겠습니다.

select s.name as 학생이름, p.name as 교수이름, m.major_title as 학과명
from class.student s
         inner join class.major m
         inner join class.professor p
                    on s.bl_prfs_id = p.prfs_id
                        and p.bl_major_id = m.major_id;

이렇게 ansi SQL로도 표현할 수 있습니다.

 

결과는 아래와 같이 똑같이 나오는 것을 볼 수 있습니다.

자, 오늘은 이렇게 inner join에 관해서 강의를 진행했습니다.

 

open.kakao.com/o/szfhqYec

 

Database/남/db개발님의 오픈프로필

DB 개발자, DB 개인 CLASS

open.kakao.com

 


 

다음 시간에는 Non Equi join에 관해서 강의를 해보겠습니다.

 

여기까지 읽어주신 여러분 감사드립니다.

 

좋은 하루 되시기 바랍니다!!

 

#다음 강의 보러 가기#

2020/04/27 - [Database/sql 강의] - sql 독학 강의 # 비등가 join with ansi SQL 14편 -sTricky

 

sql 독학 강의 # 비등가 join with ansi SQL 14편 -sTricky

sql 독학 강의 # 비등가 join with ansi SQL 14편 -sTricky 컨텐츠 index 0. 비등가 join의 정의 1. 비등가 join 사용 예제 2. 비등가 join SQL 작성방법 안녕하세요. 정말 코로 가나 길어지고 있습니다. 이럴 때..

stricky.tistory.com

 

 

 

by.sTricky