SQL JOIN

강희철·2022년 1월 11일
0

SQL

목록 보기
7/9

JOIN 이란?

데이터베이스내의 여러 테이블을에서 가져온 데이터들을 조합하여 하나의 테이블로 결과를 표현해준다.

상황에 따라 다르지만 데이터들은 효율적인 데이터 공간을 위해 여러 테이블에 나누는 경우가 많이 있다.

예제 테이블 1 ( user )
index name level salary
1 홍길동 3 600
2 고길동 5 300
3 아무개 3 200
4 루피 7 900
5 이기영 5 450
6 호빵맨 4 170
7 세균맨 4 1300
예제 테이블 2 ( date )
index user_index reg_date salary_date
1 6 2022-01-11 2022-01-11
2 3 2022-02-11 2022-01-11
3 2 2021-12-11 2021-10-11
4 4 2022-03-11 2021-08-11
5 7 2022-04-11 2021-11-11
6 1 2021-12-11 2021-11-11
7 5 2022-03-11 2021-12-11
8 10 2022-02-11 2021-12-11

사람들의 데이터들을 두개의 테이블로 나뉘었을때라고 가정하자.

user 테이블은 name, level, salary / date 테이블은 user_index, reg_date, salary_date 이렇게 되어있다.

date 테이블의 user_index는 user 테이블의 index를 바라보고 있다고 생각하면 편하다.

두개의 테이블을 합쳐보겠다.

SELECT * FROM USER join DATE

음,,,,

보는것처럼 index ( user table ) 가 1234567123567... 이 반복되는게 확인되었다.

이게 무슨말이냐면,,
USER 테이블의 row 수 DATE 테이블의 row 수를 곱한 만큼의 데이터가 표현된다.

만약 DATE 테이블에 user_index라는 column ( 열 ) 이 없었더라면 쓸모없는 데이터들이 아니였을테지만 user_index가 있는 한 테이블 x 테이블의 데이터는 데이터의 숫자만 늘어날 뿐 도움이 되지 않는다.

ON 절

where, having 등 행의 조건, 그룹의 조건이 있듯, join 데이터들에도 조건을 적용할 수 있다..!!

SELECT * FROM user JOIN date ON user.index = date.user_index;
# user 테이블의 index와 date 테이블의 user_index가 같은 데이터들만 join

결과

이런식으로 user 테이블과 date의 연결점이 있다면 조건식을 걸어 데이터를 효과적으로 join 할 수 있다.

join문을 마친 후에 where 절로 조건을 적용할 수 있다!..

SELECT * FROM user JOIN DATE ON user.index = DATE.user_index WHERE user.level > 4;
# user.level 이 4보다 큰 데이터들의 join된 데이터들

결과

join문에서 조심해야할 것은 각 테이블들의 이름과 그 테이블의 column ( 열 )의 이름에 주의해야한다. 예제에 보면 알다시피 각 테이블에는 index라는 열이 존재한다. 이것은 필자가 각 테이블의 데이터들에 primary key 를 주기 위해 통일해 놓은 것이다.

0개의 댓글