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 |
+-----------+--------+-------+

Related Posts

MariaDB / 함수 / SUBSTRING, SUBSTRING_INDEX / 문자열 추출하는 함수

MariaDB / 함수 / SUBSTRING, SUBSTRING_INDEX / 문자열 추출하는 함수

SUBSTRING 12345678의 5번째부터 끝까지 문자열을 추출합니다. SELECT SUBSTRING( '12345678', 5 ); +----------------------------+ | SUBSTRING( '12345678', 5 ) | +----------------------------+ | 5678 | +----------------------------+ SELECT SUBSTRING( '12345678' FROM 5 ); +--------------------------------+ | SUBSTRING( '12345678' FROM 5 ) | +--------------------------------+ | 5678 ...

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 / 사용자 만들기, 수정하기, 삭제하기, 권한 부여하기, 제거하기

MariaDB / 사용자 만들기, 수정하기, 삭제하기, 권한 부여하기, 제거하기

사용자 목록 보기 mysql 데이터베이스의 user 테이블에서 필요한 정보 출력 SELECT User, Host FROM mysql.user; 사용자 만들기 사용자 이름 jb, 내부에서만 접속 가능, 비밀번호 1234 CREATE USER 'jb'@'localhost' IDENTIFIED BY '1234'; 사용자 이름 jb, 어디에서나 접속 가능, 비밀번호 1234 CREATE USER 'jb'@'%' IDENTIFIED BY '1234'; 사용자 이름 jb, 192.168.0.111에서 접속 가능, 비밀번호 1234 CREATE USER 'jb'@'192.168.0.111' IDENTIFIED BY '1234'; 이미 ...

MariaDB / 함수 / IF, IFNULL, NULLIF

MariaDB / 함수 / IF, IFNULL, NULLIF

IF 문법 IF( expression1, expression2, expression3 ) expression1가 참이면 expression2를, 거짓이면 expression3을 반환합니다. 예제 SELECT IF( 2>3, 'T', 'F' ); +---------------------+ | IF( 2>3, 'T', 'F' ) | +---------------------+ | F | +---------------------+ 2>3이 거짓이므로 F를 반환합니다. SELECT IF( 2<3, 'T', 'F' ); +---------------------+ | IF( ...

MariaDB / 함수 / QUOTE / 문자열을 작은 따옴표로 감싸는 함수

MariaDB / 함수 / QUOTE / 문자열을 작은 따옴표로 감싸는 함수

QUOTE는 문자열을 작은 따옴표로 감싸는 함수입니다. QUOTE( string ) SELECT QUOTE( 'ABC' ); +----------------+ | QUOTE( 'ABC' ) | +----------------+ | 'ABC' | +----------------+ SELECT QUOTE( "ABC" ); +----------------+ | QUOTE( "ABC" ) | +----------------+ | 'ABC' | +----------------+ 문자열 안에 있는 작은 따옴표는 \'로 표시됩니다. SELECT ...

MariaDB / Query / 주석

MariaDB / Query / 주석

MariaDB의 쿼리문에서 주석을 만드는 방법은 세 가지가 있습니다. 한 줄 주석 한 줄 주석을 만들고 싶다면 # 또는 --를 사용합니다. 기호가 있는 다음부터 줄 끝까지가 주석이 됩니다. # Comment -- Comment 여러 줄 주석 여러 줄의 주석을 만들고 싶다면 /* */를 사용합니다. /* Comment Comment */

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 / 함수 / FORMAT / 숫자 세 자리마다 쉼표(콤마) 찍는 함수

MariaDB / 함수 / 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 / 함수 / ROUND

MariaDB / 함수 / ROUND

ROUND는 반올림하는 함수이다. 별도 설정을 하지 않으면 소수 첫째 자리에서 반올림한다. SELECT ROUND( 1.4 ); +--------------+ | ROUND( 1.4 ) | +--------------+ | 1 | +--------------+ SELECT ROUND( 1.5 ); +--------------+ | ROUND( 1.5 ) | +--------------+ | 2 ...

MariaDB / Query / GROUP BY

MariaDB / Query / GROUP BY

예제로 사용한 데이터베이스는 employees입니다. GROUP BY를 사용하면 공통 데이터를 갖고 있는 행들을 집계할 수 있습니다. 예를 들어 사번이 10001인 사원의 급여 지급 내역을 알고 싶다면 다음과 같이 쿼리합니다. SELECT emp_no, salary FROM salaries WHERE emp_no = 10001; +--------+--------+ | emp_no | salary | +--------+--------+ | 10001 | 60117 | | 10001 | 62102 | | ...