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 / DBeaver / 테이블 만들기, 삭제하기

MariaDB / DBeaver / 테이블 만들기, 삭제하기

테이블 만들기 데이터베이스를 선택하고 마우스 우클릭합니다. 을 클릭하면... 다음과 같은 화면이 나옵니다. 테이블 이름을 정하고... 마우스 우클릭 후 을 클릭하거나, 아래에 있는 아이콘을 클릭하여... 열을 만듭니다. 를 클릭하고... 를 클릭하면... 테이블이 만들어집니다. 테이블 삭제하기 테이블을 선택하고 마우스 우클릭 후 를 클릭합니다. 를 클릭하면 테이블이 삭제됩니다.

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

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

로그인 MariaDB에 로그인합니다. root 계정으로 로그인 한다면 mysql -u root -p 데이터베이스 목록을 조회합니다. MariaDB > SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.00 sec) 데이터베이스 ...

MariaDB / 사용자 비밀번호 변경하는 방법

MariaDB / 사용자 비밀번호 변경하는 방법

mysql 사용 use mysql 사용자와 비밀번호 출력하기 select user, password from user; abc 사용자의 비밀번호를 1234로 설정 update user set password=password('1234') where user='abc'; 변경사항 적용 flush privileges;

MariaDB / DATA / 데이터 추가(INSERT), 수정(UPDATE), 삭제(DELETE)

MariaDB / DATA / 데이터 추가(INSERT), 수정(UPDATE), 삭제(DELETE)

데이터베이스와 테이블 만들기 test 데이터베이스를 만듭니다. MariaDB > create database test; Query OK, 1 row affected (0.00 sec) test 데이터베이스를 사용합니다. MariaDB > use test; Database changed table_1 테이블을 만듭니다. MariaDB > CREATE TABLE table_1 ( -> column_1 varchar(100), -> column_2 varchar(100), -> column_3 varchar(100) -> ...

MariaDB / 함수 / COUNT, SUM, AVG, MAX, MIN

MariaDB / 함수 / COUNT, SUM, AVG, MAX, MIN

예제로 사용한 데이터베이스는 employees입니다. COUNT COUNT는 특정 조건을 만족하는 행의 개수를 세는 함수입니다. employees 테이블의 전체 행 개수를 구합니다. 의미 상 전체 직원 수를 구하는 것입니다. MariaDB > SELECT COUNT(*) -> FROM employees -> ; +----------+ | COUNT(*) | +----------+ | 300024 | +----------+ WHERE를 이용하여 조건을 추가할 수 있습니다. 다음은 남자 직원의 ...

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 / 함수 / LTRIM, RTRIM, TRIM / 양끝 문자열 제거 함수

MariaDB / 함수 / LTRIM, RTRIM, TRIM / 양끝 문자열 제거 함수

LTRIM LTRIM은 문자열 왼쪽에 있는 공백을 제거합니다. LTRIM( string ) SELECT QUOTE( LTRIM( ' 12 34 ' ) ); +------------------------------+ | QUOTE(LTRIM( ' 12 34 ' )) | +------------------------------+ | '12 34 ' ...

MariaDB / 연산자 / AND, OR, IN

MariaDB / 연산자 / AND, OR, IN

예제로 사용한 데이터베이스는 employees입니다. AND 여러 조건을 동시에 만족시키는 데이터를 추출할 때 AND 연산자를 사용합니다. employees 테이블에서 first_name이 George이고, gender가 M인 데이터를 가져옵니다. MariaDB > SELECT first_name, gender -> FROM employees -> WHERE -> first_name = "George" -> AND ...

MariaDB / HeidiSQL / TIP

MariaDB / HeidiSQL / TIP

주석 설정하기 해제하기 주석으로 만들려는 코드를 선택합니다. 마우스 우클릭 후 를 클릭하면... 각 행에 --가 붙으면서 주석 처리가 됩니다. 주석을 선택한 상태에서 를 클릭하면 주석이 해제됩니다. 예약어 대문자로 만들기 예약어는 대소문자를 구분하지 않지만, 보통 대문자로 입력합니다. 대문자와 소문자를 번갈아 입력하는 것은 번거롭습니다. 다행이 HeidiSQL에는 예약어를 대문자로 바꿔주는 기능이 있습니다. 쿼리 창에서 마우스 우클릭하고 을 ...

MariaDB / 함수 / REPEAT / 문자열 반복하여 출력하는 함수

MariaDB / 함수 / REPEAT / 문자열 반복하여 출력하는 함수

개요 REPEAT는 문자열을 반복하여 출력하는 함수입니다. REPEAT( string, count ) string : 반복될 문자열 count : 반복 횟수 예제 123을 4번 반복하여 출력합니다. SELECT REPEAT( '123', 4 ); +---------------------+ | REPEAT( '123', 4 ) | +---------------------+ | 123123123123 | +---------------------+ 반복 횟수가 1 미만이면 빈 문자열을 출력합니다. SELECT REPEAT( '123', 0 ); +--------------------+ | REPEAT( '123', 0 ) ...