JOIN (TIL 77일차)

EenSung Kim·2021년 6월 21일
0

"집합"


Intro

SELECT, FROM, INSERT INTO 등등 SQL 에서 사용하는 명령어가 다양하게 있습니다. 자바스크립트 메소드를 전부 다 외우고 있을 필요가 없는 것처럼 명령어도 꼭 다 외울 필요는 없습니다만, 쓰다보면 자연스럽게 외워지는 것 같아요. 어떤 명령어들이 있고, 검색할 수 있을 정도가 되면 일단은 괜찮지 않을까 싶습니다.

그 중에서 특히 헷갈리면서도 데이터를 분류하고 취합하는데 아주 유용한 JOIN 을 다뤄보겠습니다.


JOIN

SQL 의 명령어들은 대체로 대동소이합니다만, MySQL 이나 오라클처럼 어떤 DBMS(DataBase Management System) 를 사용하는지에 따라 약간 달라지기도 합니다. 저는 MySQL 을 배우고 있어서 이 글에서는 MySQL 기준으로 이야기하도록 하겠습니다.

관계형 데이터베이스에서 database 는 여러 개의 table 로 나뉘게 됩니다. 각각의 테이블은 어떤 속성을 나타낼 수 있는 column 들을 가지게 되죠. 학교를 구성하는 데이터베이스가 학생, 교수, 강의실 등의 테이블으로 나뉜다고 할 때, 학생을 구성하는 속성인 이름, 학번, 전공 등이 학생이라는 테이블의 각 컬럼으로 나뉘고, 강의실을 구성하는 속성인 호실 숫자가 또 다른 테이블의 컬럼이 되는 것이죠.

학생

id이름학번전공
1eensungkim2020001언론
2kimcoding2020004전자
3parkhacker2020005전자

강의실

id호실강의명학생_id
1103미디어의 이해1
2201CS의 기초3
3202컴퓨터 활용2

여러 개의 테이블이 모여 데이터베이스를 형성할 때, 각각의 테이블과 그 안의 컬럼들은 서로 다른 테이블 및 컬럼과 관계를 맺게 됩니다. 각각의 테이블에 부여된 Primary Key 값(위에서는 id에 해당)과 다른 테이블에서 받아오는 Foreign Key 값을 이용해 서로 간의 맺게 되는 관계를 데이터베이스에서는 스키마 라는 단어로 설명합니다.

이 때, 이 스키마를 활용해 서로 다른 두 테이블을 합쳐 내가 원하는 데이터로 가공하는 명령어가 JOIN 입니다. eensungkim 이라는 학생과 미디어의 이해라는 수업은 서로 다른 테이블에 있지만, 학생_id 라는 값을 이용해서 두 테이블을 합치고 우리가 원하는 데이터를 가져올 수 있는 것이죠.


JOIN 명령어의 용법

JOIN 은 다시 INNER, LEFT, RIGHT 등 여러가지로 나뉩니다. 기본적으로는 INNER 로 사용되죠. 일반적으로는 JOIN(INNER) 과 LEFT JOIN 이 가장 활용도가 높은 편이라고 합니다.

SELECT 컬럼_이름
FROM 테이블1_이름
JOIN 테이블2_이름 ON 테이블1_연관컬럼1=테이블2_연관컬럼2

위의 테이블에서 만약 'eensungkim' 이라는 학생의 이름과 학번, 수업을 듣는 강의실 호실 넘버를 가져오고 싶다면 다음과 같이 작성할 수 있습니다.

SELECT 학생.이름, 학생.학번, 강의실.호실 FROM 학생 
JOIN 강의실 ON 학생.id=강의실.학생_id
WHERE 학생.이름='eensungkim'

WHERE 으로 'eensungkim' 이라는 이름을 가진 학생이라는 조건을 달아주고, 학생과 강의실이라는 서로 다른 두 테이블을 연결해서, 그 중에 가져오고 싶은 이름과 학번, 강의실 호실 명만 가져오는 것이죠.

많은 데이터 중에서도 내가 원하는 것을 선택해 가져올 수 있기 때문에 매우 활용도가 높은 명령어라고 할 수 있습니다. 물론 그런 만큼 좀 난해하다는 점은 함정이지만 말이죠.


공부를 위한 정리 자료이기 때문에 정확한 정보는 따로 공식 문서 등을 통해서 추가적으로 얻어가시는 것을 추천합니다. sql join 으로 검색해보시면 아래처럼 그림으로 정리된 자료들도 많이 있습니다.

이미지 출처 https://dsin.wordpress.com/2013/03/16/sql-join-cheat-sheet/
profile
iOS 개발자로 전직하기 위해 공부 중입니다.

0개의 댓글