SELECT, FROM, INSERT INTO 등등 SQL 에서 사용하는 명령어가 다양하게 있습니다. 자바스크립트 메소드를 전부 다 외우고 있을 필요가 없는 것처럼 명령어도 꼭 다 외울 필요는 없습니다만, 쓰다보면 자연스럽게 외워지는 것 같아요. 어떤 명령어들이 있고, 검색할 수 있을 정도가 되면 일단은 괜찮지 않을까 싶습니다.
그 중에서 특히 헷갈리면서도 데이터를 분류하고 취합하는데 아주 유용한 JOIN 을 다뤄보겠습니다.
SQL 의 명령어들은 대체로 대동소이합니다만, MySQL 이나 오라클처럼 어떤 DBMS(DataBase Management System) 를 사용하는지에 따라 약간 달라지기도 합니다. 저는 MySQL 을 배우고 있어서 이 글에서는 MySQL 기준으로 이야기하도록 하겠습니다.
관계형 데이터베이스에서 database
는 여러 개의 table
로 나뉘게 됩니다. 각각의 테이블은 어떤 속성을 나타낼 수 있는 column
들을 가지게 되죠. 학교를 구성하는 데이터베이스가 학생, 교수, 강의실 등의 테이블으로 나뉜다고 할 때, 학생을 구성하는 속성인 이름, 학번, 전공 등이 학생이라는 테이블의 각 컬럼으로 나뉘고, 강의실을 구성하는 속성인 호실 숫자가 또 다른 테이블의 컬럼이 되는 것이죠.
id | 이름 | 학번 | 전공 |
---|---|---|---|
1 | eensungkim | 2020001 | 언론 |
2 | kimcoding | 2020004 | 전자 |
3 | parkhacker | 2020005 | 전자 |
id | 호실 | 강의명 | 학생_id |
---|---|---|---|
1 | 103 | 미디어의 이해 | 1 |
2 | 201 | CS의 기초 | 3 |
3 | 202 | 컴퓨터 활용 | 2 |
여러 개의 테이블이 모여 데이터베이스를 형성할 때, 각각의 테이블과 그 안의 컬럼들은 서로 다른 테이블 및 컬럼과 관계를 맺게 됩니다. 각각의 테이블에 부여된 Primary Key 값(위에서는 id에 해당)과 다른 테이블에서 받아오는 Foreign Key 값을 이용해 서로 간의 맺게 되는 관계를 데이터베이스에서는 스키마 라는 단어로 설명합니다.
이 때, 이 스키마를 활용해 서로 다른 두 테이블을 합쳐 내가 원하는 데이터로 가공하는 명령어가 JOIN 입니다. eensungkim 이라는 학생과 미디어의 이해라는 수업은 서로 다른 테이블에 있지만, 학생_id 라는 값을 이용해서 두 테이블을 합치고 우리가 원하는 데이터를 가져올 수 있는 것이죠.
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
으로 검색해보시면 아래처럼 그림으로 정리된 자료들도 많이 있습니다.