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을 출력합니다.

MariaDB [employees]> 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   |
+-----------+--------+
5 rows in set (0.00 sec)

RIGHT JOIN

FROM A RIGHT JOIN B

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

MariaDB [employees]> 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     |
+-----------+--------+
4 rows in set (0.00 sec)

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

MariaDB [employees]> SELECT A.a_country, B.b_city
    -> FROM B
    -> LEFT JOIN A
    -> ON A.a_no = B.a_no
    -> ;
+-----------+--------+
| a_country | b_city |
+-----------+--------+
| A         | AA     |
| B         | BB     |
| NULL      | FF     |
| NULL      | GG     |
+-----------+--------+
4 rows in set (0.00 sec)

INNER JOIN

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

MariaDB [employees]> 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     |
+-----------+--------+
2 rows in set (0.00 sec)

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

MariaDB [employees]> 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     |
+-----------+--------+
2 rows in set (0.00 sec)

세 개 이상 테이블 JOIN

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

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

MariaDB [employees]> 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 |
+-----------+--------+-------+
2 rows in set (0.01 sec)

Related Posts

MariaDB / HeidiSQL / MariaDB에 연결하는 방법

MariaDB / HeidiSQL / MariaDB에 연결하는 방법

HeidiSQL로 MariaDB에 접속해보겠습니다. 만약 다른 기기에 있는 MariaDB라면 통신이 가능하도록 포트가 열려 있어야 합니다. MariaDB의 기본 포트는 3306입니다. HeidiSQL을 실행하면 세션 관리자가 열립니다. 를 클릭합니다. 다음과 같은 화면이 나오는데, 네트워크 유형이 MariaDB or MySQL인 것을 확인하고... 서버 정보를 입력합니다. 세션 이름은 적절히 정하고 합니다. 이제 세션 이름을 더블 클릭하거나, 를 클릭하여 접속할 수 있습니다. 아래는 MariaDB에 접속한 ...

MariaDB / DATABASE / 백업하기, 복원하기

MariaDB / DATABASE / 백업하기, 복원하기

모든 데이터베이스 백업과 복원 백업 모든 데이터베이스를 backup-all.sql로 백업 user는 권한 있는 사용자명으로 변경 mysqldump -u root -p --all-databases > backup-all.sql 복원 backup-all.sql을 복원 user는 권한 있는 사용자명으로 변경 mysql -u root -p < backup-all.sql 특정 데이터베이스 백업과 복원 백업 abc 데이터베이스를 abc.sql로 백업 user는 권한 있는 사용자명으로 변경 mysqldump -u user -p abc > abc.sql 복원 abc.sql을 데이터베이스 abc로 복원 user는 권한 있는 사용자명으로 변경 mysql ...

MariaDB / Query / DISTINCT / 중복 데이터 제거

MariaDB / Query / DISTINCT / 중복 데이터 제거

DISTINCT를 이용하면 중복 값을 제거할 수 있습니다. 예를 들어 다음과 같은 test 테이블이 있다고 할 때... MariaDB > SELECT * FROM test; +---------+---------+---------+ | Column1 | Column2 | Column3 | +---------+---------+---------+ | 1 | A | 1 ...

MariaDB / DBeaver / MariaDB에 연결하는 방법

MariaDB / DBeaver / MariaDB에 연결하는 방법

MariaDB를 명령어로만 관리하는 것은 힘듭니다. 적절한 툴을 이용하면 작업 속도를 높일 수 있습니다. MariaDB를 관리하는 툴을 여러 가지가 있는데, 그 중 하나가 DBeaver입니다. Free multi-platform database tool for developers, database administrators, analysts and all people who need to work with databases. Supports all popular databases: MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL ...

MariaDB / TABLE / 만들기, 삭제하기, 이름 변경하기

MariaDB / TABLE / 만들기, 삭제하기, 이름 변경하기

테이블 만들기 test 데이터베이스를 만듭니다. MariaDB > CREATE DATABASE test; Query OK, 1 row affected (0.00 sec) test 데이터베이스를 사용합니다. MariaDB > USE test; Database changed table1을 만듭니다. 열이 하나도 없으면 테이블이 만들어지지 않으므로, 적어도 하나 이상의 열을 만듭니다. MariaDB > CREATE TABLE table1 ( column1 VARCHAR(100) ); Query OK, 0 rows affected (0.35 sec) 테이블이 만들어졌는지 확인합니다. MariaDB > SHOW ...

MariaDB / Query / UNION, UNION ALL

MariaDB / Query / UNION, UNION ALL

UNION 또는 UNION ALL을 이용하면 여러 테이블의 데이터를 합하여 출력할 수 있습니다. 예를 들어 다음과 같은 테이블과... SELECT * FROM test_1; +-------+-------+-------+ | col_1 | col_2 | col_3 | +-------+-------+-------+ | 1 | A | 1 | | 2 | ...

MariaDB / 함수 / FORMAT / 숫자 세 자리마다 쉼표(콤마) 찍는 함수

MariaDB / 함수 / FORMAT / 숫자 세 자리마다 쉼표(콤마) 찍는 함수

FORMAT FORMAT은 숫자 세 자리마다 쉼표(콤마) 찍는 함수입니다. 예제 123456789에서 세 자리마다 쉼표를 넣습니다. MariaDB > SELECT FORMAT(123456789, 0) as Money; +-------------+ | Money | +-------------+ | 123,456,789 | +-------------+ 값이 숫자 형식이 아니어도 가능합니다. MariaDB > SELECT FORMAT('123456789', 0) as Money; +-------------+ | Money | +-------------+ | 123,456,789 | +-------------+ 0이 뜻하는 것은 소숫점 ...

MariaDB / HeidiSQL / 쿼리 실행하는 방법

MariaDB / HeidiSQL / 쿼리 실행하는 방법

HeidiSQL을 실행하고 데이터베이스 서버에 연결합니다. 쿼리를 실행할 데이터베이스를 선택합니다. 탭을 클릭합니다. 쿼리를 입력하고 삼각형 모양의 아이콘을 클릭하면 쿼리가 실행됩니다. 단축키는 F9입니다. 쿼리 결과는 하단에 표시됩니다. 여러 개의 쿼리를 입력하고 실행하면, 각 결과가 별도의 탭으로 표시됩니다. 쿼리를 선택하고 을 클릭하면 선택한 쿼리만 실행됩니다. 단축키는 Shift+Ctrl+F9입니다.

MariaDB / 함수 / REPLACE / 문자열 찾아서 바꾸는 함수

MariaDB / 함수 / REPLACE / 문자열 찾아서 바꾸는 함수

REPLACE는 특정 문자열을 찾아 다른 문자열로 바꾸는 함수입니다. REPLACE( string, from_string, to_string ) string : 찾아서 바꾸는 대상이 되는 문자열 from_string : 찾을 문자열 to_string : 교체될 문자열 아래는 ababab에서 b를 찾아 c로 바꾸는 예제입니다. SELECT REPLACE( 'ababab', 'b', 'c' ); +-------------------------------+ | REPLACE( 'ababab', 'b', 'c' ) | +-------------------------------+ | acacac ...

MariaDB / TABLE / 열 추가하기, 열 삭제하기, 열 순서 변경하기, 열 데이터 타입 변경하기

MariaDB / TABLE / 열 추가하기, 열 삭제하기, 열 순서 변경하기, 열 데이터 타입 변경하기

데이터베이스 만들기 열(Column) 추가, 삭제 등을 해볼 테스트용 데이터베이스 jbTest를 만듭니다. CREATE DATABASE jbTest; 데이터베이스로 들어갑니다. USE jbTest; jbColumn1, jbColumn2, jbColumn3 세 개의 열을 가진 테이블 jbTable1을 만듭니다. CREATE TABLE jbTable1 ( jbColumn1 INT, jbColumn2 INT, jbColumn3 INT ) ; 다음은 현재 테이블 구조입니다. MariaDB > DESC jbTable1; +-----------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | ...