MariaDB / Query / LEFT JOIN, RIGHT JOIN, INNER JOIN

JOIN

SQL의 JOIN은 여러 테이블을 한 번에 나타낼 때 사용합니다. 대표적인 JOIN 방식은 LEFT JOIN, RIGHT JOIN, INNER JOIN이 있습니다.

다음은 세 가지 JOIN의 차이를 알아보기 위한 간단한 예제 테이블입니다.

  • A 테이블에는 나라, B 테이블에는 도시가 있습니다.
  • 도시가 어떤 나라의 도시인지는 a_no로 확인합니다.
  • 나라는 있는데 도시가 없는 것도 있고, 나라는 없는데 도시는 있는 것도 있습니다.
  • A 테이블과 B 테이블을 동시에 나타낸 것이 두 번째 표입니다.

LEFT JOIN

FROM A LEFT JOIN B

A에 B를 붙입니다. A 테이블의 자료는 다 나오고, B 테이블에 대응하는 값이 없으면 NULL을 출력합니다.

SELECT
  A.a_country,
  B.b_city
FROM A
LEFT JOIN B ON A.a_no = B.a_no
;
+-----------+--------+
| a_country | b_city |
+-----------+--------+
| A         | AA     |
| B         | BB     |
| C         | NULL   |
| D         | NULL   |
| E         | NULL   |
+-----------+--------+

RIGHT JOIN

FROM A RIGHT JOIN B

B에 A를 붙입니다. B 테이블의 자료는 다 나오고, A 테이블에 대응하는 갑이 없으면 NULL을 출력합니다.

SELECT
  A.a_country, B.b_city
FROM A RIGHT JOIN B ON A.a_no = B.a_no
;
+-----------+--------+
| a_country | b_city |
+-----------+--------+
| A         | AA     |
| B         | BB     |
| NULL      | FF     |
| NULL      | GG     |
+-----------+--------+

LEFT JOIN으로 같은 결과를 만들 수 있습니다.

SELECT
  A.a_country,
  B.b_city
FROM B LEFT JOIN AON A.a_no = B.a_no
;
+-----------+--------+
| a_country | b_city |
+-----------+--------+
| A         | AA     |
| B         | BB     |
| NULL      | FF     |
| NULL      | GG     |
+-----------+--------+

INNER JOIN

연결된 값이 있는 것만 출력합니다. 즉, 대응하는 값이 없으면 출력하지 않으므로 NULL은 없습니다.

SELECT
  A.a_country,
  B.b_city
FROM A INNER JOIN B ON A.a_no = B.a_no
;
+-----------+--------+
| a_country | b_city |
+-----------+--------+
| A         | AA     |
| B         | BB     |
+-----------+--------+

LEFT JOIN에 WHERE문을 추가해서 같은 결과를 만들 수 있습니다.

SELECT
  A.a_country,
  B.b_city
FROM A LEFT JOIN B ON A.a_no = B.a_no
WHERE B.b_city IS NOT NULL
;
+-----------+--------+
| a_country | b_city |
+-----------+--------+
| A         | AA     |
| B         | BB     |
+-----------+--------+

세 개 이상 테이블 JOIN

테이블이 세 개 이상인 경우 JOIN을 연달아 입력해서 연결 시킵니다. 예를 들어 다음과 같은 자료가 있다고 합시다. 위의 DB에 도시의 인구 수를 담은 C 테이블을 추가한 것입니다.

다음은 나라, 도시, 인구 수를 출력하는 쿼리입니다.

SELECT
  A.a_country,
  B.b_city,
  C.c_pop
FROM A
  INNER JOIN B ON A.a_no = B.a_no
  INNER JOIN C ON B.b_no = C.b_no
;
+-----------+--------+-------+
| a_country | b_city | c_pop |
+-----------+--------+-------+
| A         | AA     |  1000 |
| B         | BB     |  2000 |
+-----------+--------+-------+

참고

테이블을 연결할 때 사용하는 열의 타입이 텍스트인 경우, 쿼리 속도가 느려질 수 있습니다. 그런 경우 해당 열에 인덱스를 추가하면 속도를 개선할 수 있습니다.

인덱스는 데이터베이스에서 데이터를 빠르게 찾기 위한 목차 같은 역할을 합니다. 예를 들어, 책에서 원하는 내용을 찾을 때 목차를 참고하면 빠르게 찾을 수 있듯이, 인덱스가 있으면 특정 조건의 데이터를 빠르게 검색할 수 있습니다. 인덱스가 없으면 테이블 전체를 일일이 읽어야 해서 시간이 오래 걸립니다. 주로 WHERE, JOIN, ORDER BY 등에 인덱스를 잘 활용하면 성능이 크게 향상됩니다.

같은 카테고리의 다른 글
MariaDB / VIEW

MariaDB / VIEW

VIEW는 가상의 테이블입니다. 실제로 데이터를 저장하지 않고, 기존의 하나 이상의 테이블을 기반으로 한 쿼리 결과를 테이블처럼 사용할 수 있게 해줍니다. 뷰는 복잡한 쿼리를 단순화하고, 보안 및 데이터 관리에 유용하게 사용됩니다.

MariaDB / 연산자 / 비교 연산자

MariaDB / 연산자 / 비교 연산자

MariaDB의 비교 연산자에 대하여 알아보겠습니다. 예제로 사용하는 테이블은 아래의 데이터를 가진 T_1이라는 테이블입니다. 각 열의 데이터 형식은 다음과 같습니다. C_1 : 정수 C_2 : 문자 C_3 : 날짜 +----+------+------+------------+ | ID | C_1 | C_2 | C_3 | +----+------+------+------------+ | 1 | 1 | ...

MariaDB / Query / LEFT JOIN, RIGHT JOIN, INNER JOIN

MariaDB / Query / LEFT JOIN, RIGHT JOIN, INNER JOIN

SQL의 JOIN은 여러 테이블을 한 번에 나타낼 때 사용합니다. 대표적인 JOIN 방식은 LEFT JOIN, RIGHT JOIN, INNER JOIN이 있습니다. 다음은 세 가지 JOIN의 차이를 알아보기 위한 간단한 예제 테이블입니다.

MariaDB / 연산자 / 논리 연산자

MariaDB / 연산자 / 논리 연산자

MariaDB의 논리 연산자에 대하여 알아보겠습니다. 예제로 사용하는 테이블은 아래의 데이터를 가진 T_2이라는 테이블입니다. 각 열의 데이터 형식은 다음과 같습니다. C_1 : 정수 C_2 : 문자 +----+------+------+ | ID | C_1 | C_2 | +----+------+------+ | 1 | 1 | A | | 2 | ...

MariaDB / 피벗 테이블 만드는 방법

MariaDB / 피벗 테이블 만드는 방법

피벗 테이블은 엑셀의 유용한 기능 중의 하나입니다. 예를 들어 아래의 왼쪽 데이터를 오른쪽 표처럼 만드는 것이 피벗 테이블입니다. 조건에 따라 그룹화시켜서 보기 좋게 데이터를 정리하는 것이라 보면 됩니다. MariaDB에서도 몇 가지 함수를 이용하여 피벗 테이블을 만들 수 있습니다.

MariaDB / 데이터베이스 / 조회, 생성, 삭제, 이름 변경

MariaDB / 데이터베이스 / 조회, 생성, 삭제, 이름 변경

MariaDB에서 데이터베이스를 조회하는 방법, 생성하는 방법, 삭제하는 방법, 이름을 변경하는 방법에 대해서 알아봅니다.

MariaDB / 샘플 데이터베이스 employees 설치하는 방법

MariaDB / 샘플 데이터베이스 employees 설치하는 방법

데이터베이스를 다루는 공부를 할 때 데이터가 들어있는 데이터베이스가 있으면 좋습니다. 데이터베이스를 직접 만드는 방법도 있지만, 공개된 샘플 데이터베이스를 이용하면 편합니다. 예를 들어 SQL Server라면 AdventureWorks라는 샘플 데이터베이스를 마이크로소프트에서 제공합니다. MariaDB라면 employees를 사용하면 됩니다.

MariaDB / 사용자 관리하는 방법

MariaDB / 사용자 관리하는 방법

MariaDB에서 사용자를 만드는 방법, 수정하는 방법, 삭제하는 방법, 권한을 부여하고 제거하는 방법을 알아봅니다.