๋ชฉ์ฐจ
SQL - JOIN ์ ๋ฆฌ
์์ ํ ์ด๋ธ
Table: employees
+--------+--------------+------------+---------+
| emp_id | emp_name | hire_date | dept_id |
+--------+--------------+------------+---------+
| 1 | Ethan Hunt | 2001-05-01 | 4 |
| 2 | Tony Montana | 2002-07-15 | 1 |
| 3 | Sarah Connor | 2005-10-18 | 5 |
| 4 | Rick Deckard | 2007-01-03 | 3 |
| 5 | Martin Blank | 2008-06-24 | NULL |
+--------+--------------+------------+---------+
Table: departments
+---------+------------------+
| dept_id | dept_name |
+---------+------------------+
| 1 | Administration |
| 2 | Customer Service |
| 3 | Finance |
| 4 | Human Resources |
| 5 | Sales |
+---------+------------------+
1. Inner Join
1-1) Cross Join (๊ต์ฐจ ์กฐ์ธ)
- ํน๋ณํ ์กฐ๊ฑด์์ด ํ ์ด๋ธ A์ ๊ฐ ํ๊ณผ ํ ์ด๋ธ B์ ๊ฐํ์ ๋ค ์กฐํฉํ ๊ฒฐ๊ณผ(๊ณฑํ๊ธฐ)
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1
CROSS JOIN departments AS t2;
Cross Join Result
+--------+--------------+------------+------------------+
| emp_id | emp_name | hire_date | dept_name |
+--------+--------------+------------+------------------+
| 1 | Ethan Hunt | 2001-05-01 | Administration |
| 2 | Tony Montana | 2002-07-15 | Administration |
| 3 | Sarah Connor | 2005-10-18 | Administration |
| 4 | Rick Deckard | 2007-01-03 | Administration |
| 5 | Martin Blank | 2008-06-24 | Administration |
| 1 | Ethan Hunt | 2001-05-01 | Customer Service |
| 2 | Tony Montana | 2002-07-15 | Customer Service |
| 3 | Sarah Connor | 2005-10-18 | Customer Service |
| 4 | Rick Deckard | 2007-01-03 | Customer Service |
| 5 | Martin Blank | 2008-06-24 | Customer Service |
| 1 | Ethan Hunt | 2001-05-01 | Finance |
| 2 | Tony Montana | 2002-07-15 | Finance |
| 3 | Sarah Connor | 2005-10-18 | Finance |
| 4 | Rick Deckard | 2007-01-03 | Finance |
| 5 | Martin Blank | 2008-06-24 | Finance |
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 2 | Tony Montana | 2002-07-15 | Human Resources |
| 3 | Sarah Connor | 2005-10-18 | Human Resources |
| 4 | Rick Deckard | 2007-01-03 | Human Resources |
| 5 | Martin Blank | 2008-06-24 | Human Resources |
| 1 | Ethan Hunt | 2001-05-01 | Sales |
| 2 | Tony Montana | 2002-07-15 | Sales |
| 3 | Sarah Connor | 2005-10-18 | Sales |
| 4 | Rick Deckard | 2007-01-03 | Sales |
| 5 | Martin Blank | 2008-06-24 | Sales |
+--------+--------------+------------+------------------+
1-2) Inner Join
- ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ค.
- 2๊ฐ์ ํ ์ด๋ธ์ ์ปฌ๋ผ์ ํฉ์ณ ์๋ก์ด ํ ์ด๋ธ์ ์์ฑํ๋ค.
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1
INNER JOIN departments AS t2
ON t1.dept_id = t2.dept_id
ORDER BY emp_id;
Inner Join Result
+--------+--------------+------------+-----------------+
| emp_id | emp_name | hire_date | dept_name |
+--------+--------------+------------+-----------------+
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 2 | Tony Montana | 2002-07-15 | Administration |
| 3 | Sarah Connor | 2005-10-18 | Sales |
| 4 | Rick Deckard | 2007-01-03 | Finance |
+--------+--------------+------------+-----------------+
2. Outer Join
- ์กฐ๊ฑด๋ฌธ์ ๋ง์กฑํ์ง ์๋ ํ๋ ํ์ํด์ฃผ๋ ์กฐ์ธ
- ์กฐ์ธํ์ ๋, ํ์ชฝ์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์์ด๋ ์กฐ์ธ ๊ฒฐ๊ณผ์๋ ํฌํจ๋๋ค.
2-1) Left Outer Join
- ํ ์ด๋ธ A์ ๋ชจ๋ ๋ฐ์ดํฐ์ ํ ์ด๋ธ B์ ๋งค์นญ ๋๋ ๋ ์ฝ๋๋ฅผ ํฌํจํ๋ ์กฐ์ธ
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1
LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id
ORDER BY emp_id;
Left Outer Join Result
+--------+--------------+------------+-----------------+
| emp_id | emp_name | hire_date | dept_name |
+--------+--------------+------------+-----------------+
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 2 | Tony Montana | 2002-07-15 | Administration |
| 3 | Sarah Connor | 2005-10-18 | Sales |
| 4 | Rick Deckard | 2007-01-03 | Finance |
| 5 | Martin Blank | 2008-06-24 | NULL |
+--------+--------------+------------+-----------------+
2-2) Right Outer Join
- ์ค๋ฅธ์ชฝ ์ธ๋ถ ์กฐ์ธ์ ํ ์ด๋ธ B์ ๋ชจ๋ ๋ฐ์ดํฐ์ ํ ์ด๋ธ A์ ๋งค์นญ์ด ๋๋ ๋ ์ฝ๋๋ฅผ ํฌํจํ๋ ์กฐ์ธ
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1
RIGHT JOIN departments AS t2
ON t1.dept_id = t2.dept_id
ORDER BY dept_name;
Right Outer Join Result
+--------+--------------+------------+------------------+
| emp_id | emp_name | hire_date | dept_name |
+--------+--------------+------------+------------------+
| 2 | Tony Montana | 2002-07-15 | Administration |
| NULL | NULL | NULL | Customer Service |
| 4 | Rick Deckard | 2007-01-03 | Finance |
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 3 | Sarah Connor | 2005-10-18 | Sales |
+--------+--------------+------------+------------------+
2-3) Full Outer Join
- Oracle, MySQL์ ์ง์ํ์ง ์์
- Left, Right Join, Union, Union All ๋ฑ์ ๊ฐ์ด ์จ์ผํจ
## Union All
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1
LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id
UNION ALL
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1
RIGHT JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_name;
+--------+--------------+------------+------------------+
| emp_id | emp_name | hire_date | dept_name |
+--------+--------------+------------+------------------+
| NULL | NULL | NULL | Customer Service |
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 5 | Martin Blank | 2008-06-24 | NULL |
| 4 | Rick Deckard | 2007-01-03 | Finance |
| 4 | Rick Deckard | 2007-01-03 | Finance |
| 3 | Sarah Connor | 2005-10-18 | Sales |
| 3 | Sarah Connor | 2005-10-18 | Sales |
| 2 | Tony Montana | 2002-07-15 | Administration |
| 2 | Tony Montana | 2002-07-15 | Administration |
+--------+--------------+------------+------------------+
์ฐธ์กฐ : https://velog.io/@kdh10806/DataBase-Join
https://www.tutorialrepublic.com/sql-tutorial/
SQL - JOIN ์ ๋ฆฌ
์์ ํ ์ด๋ธ
Table: employees
+--------+--------------+------------+---------+
| emp_id | emp_name | hire_date | dept_id |
+--------+--------------+------------+---------+
| 1 | Ethan Hunt | 2001-05-01 | 4 |
| 2 | Tony Montana | 2002-07-15 | 1 |
| 3 | Sarah Connor | 2005-10-18 | 5 |
| 4 | Rick Deckard | 2007-01-03 | 3 |
| 5 | Martin Blank | 2008-06-24 | NULL |
+--------+--------------+------------+---------+
Table: departments
+---------+------------------+
| dept_id | dept_name |
+---------+------------------+
| 1 | Administration |
| 2 | Customer Service |
| 3 | Finance |
| 4 | Human Resources |
| 5 | Sales |
+---------+------------------+
1. Inner Join
1-1) Cross Join (๊ต์ฐจ ์กฐ์ธ)
- ํน๋ณํ ์กฐ๊ฑด์์ด ํ ์ด๋ธ A์ ๊ฐ ํ๊ณผ ํ ์ด๋ธ B์ ๊ฐํ์ ๋ค ์กฐํฉํ ๊ฒฐ๊ณผ(๊ณฑํ๊ธฐ)
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1
CROSS JOIN departments AS t2;
Cross Join Result
+--------+--------------+------------+------------------+
| emp_id | emp_name | hire_date | dept_name |
+--------+--------------+------------+------------------+
| 1 | Ethan Hunt | 2001-05-01 | Administration |
| 2 | Tony Montana | 2002-07-15 | Administration |
| 3 | Sarah Connor | 2005-10-18 | Administration |
| 4 | Rick Deckard | 2007-01-03 | Administration |
| 5 | Martin Blank | 2008-06-24 | Administration |
| 1 | Ethan Hunt | 2001-05-01 | Customer Service |
| 2 | Tony Montana | 2002-07-15 | Customer Service |
| 3 | Sarah Connor | 2005-10-18 | Customer Service |
| 4 | Rick Deckard | 2007-01-03 | Customer Service |
| 5 | Martin Blank | 2008-06-24 | Customer Service |
| 1 | Ethan Hunt | 2001-05-01 | Finance |
| 2 | Tony Montana | 2002-07-15 | Finance |
| 3 | Sarah Connor | 2005-10-18 | Finance |
| 4 | Rick Deckard | 2007-01-03 | Finance |
| 5 | Martin Blank | 2008-06-24 | Finance |
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 2 | Tony Montana | 2002-07-15 | Human Resources |
| 3 | Sarah Connor | 2005-10-18 | Human Resources |
| 4 | Rick Deckard | 2007-01-03 | Human Resources |
| 5 | Martin Blank | 2008-06-24 | Human Resources |
| 1 | Ethan Hunt | 2001-05-01 | Sales |
| 2 | Tony Montana | 2002-07-15 | Sales |
| 3 | Sarah Connor | 2005-10-18 | Sales |
| 4 | Rick Deckard | 2007-01-03 | Sales |
| 5 | Martin Blank | 2008-06-24 | Sales |
+--------+--------------+------------+------------------+
1-2) Inner Join
- ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ค.
- 2๊ฐ์ ํ ์ด๋ธ์ ์ปฌ๋ผ์ ํฉ์ณ ์๋ก์ด ํ ์ด๋ธ์ ์์ฑํ๋ค.
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1
INNER JOIN departments AS t2
ON t1.dept_id = t2.dept_id
ORDER BY emp_id;
Inner Join Result
+--------+--------------+------------+-----------------+
| emp_id | emp_name | hire_date | dept_name |
+--------+--------------+------------+-----------------+
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 2 | Tony Montana | 2002-07-15 | Administration |
| 3 | Sarah Connor | 2005-10-18 | Sales |
| 4 | Rick Deckard | 2007-01-03 | Finance |
+--------+--------------+------------+-----------------+
2. Outer Join
- ์กฐ๊ฑด๋ฌธ์ ๋ง์กฑํ์ง ์๋ ํ๋ ํ์ํด์ฃผ๋ ์กฐ์ธ
- ์กฐ์ธํ์ ๋, ํ์ชฝ์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์์ด๋ ์กฐ์ธ ๊ฒฐ๊ณผ์๋ ํฌํจ๋๋ค.
2-1) Left Outer Join
- ํ ์ด๋ธ A์ ๋ชจ๋ ๋ฐ์ดํฐ์ ํ ์ด๋ธ B์ ๋งค์นญ ๋๋ ๋ ์ฝ๋๋ฅผ ํฌํจํ๋ ์กฐ์ธ
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1
LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id
ORDER BY emp_id;
Left Outer Join Result
+--------+--------------+------------+-----------------+
| emp_id | emp_name | hire_date | dept_name |
+--------+--------------+------------+-----------------+
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 2 | Tony Montana | 2002-07-15 | Administration |
| 3 | Sarah Connor | 2005-10-18 | Sales |
| 4 | Rick Deckard | 2007-01-03 | Finance |
| 5 | Martin Blank | 2008-06-24 | NULL |
+--------+--------------+------------+-----------------+
2-2) Right Outer Join
- ์ค๋ฅธ์ชฝ ์ธ๋ถ ์กฐ์ธ์ ํ ์ด๋ธ B์ ๋ชจ๋ ๋ฐ์ดํฐ์ ํ ์ด๋ธ A์ ๋งค์นญ์ด ๋๋ ๋ ์ฝ๋๋ฅผ ํฌํจํ๋ ์กฐ์ธ
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1
RIGHT JOIN departments AS t2
ON t1.dept_id = t2.dept_id
ORDER BY dept_name;
Right Outer Join Result
+--------+--------------+------------+------------------+
| emp_id | emp_name | hire_date | dept_name |
+--------+--------------+------------+------------------+
| 2 | Tony Montana | 2002-07-15 | Administration |
| NULL | NULL | NULL | Customer Service |
| 4 | Rick Deckard | 2007-01-03 | Finance |
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 3 | Sarah Connor | 2005-10-18 | Sales |
+--------+--------------+------------+------------------+
2-3) Full Outer Join
- Oracle, MySQL์ ์ง์ํ์ง ์์
- Left, Right Join, Union, Union All ๋ฑ์ ๊ฐ์ด ์จ์ผํจ
## Union All
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1
LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id
UNION ALL
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1
RIGHT JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_name;
+--------+--------------+------------+------------------+
| emp_id | emp_name | hire_date | dept_name |
+--------+--------------+------------+------------------+
| NULL | NULL | NULL | Customer Service |
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 1 | Ethan Hunt | 2001-05-01 | Human Resources |
| 5 | Martin Blank | 2008-06-24 | NULL |
| 4 | Rick Deckard | 2007-01-03 | Finance |
| 4 | Rick Deckard | 2007-01-03 | Finance |
| 3 | Sarah Connor | 2005-10-18 | Sales |
| 3 | Sarah Connor | 2005-10-18 | Sales |
| 2 | Tony Montana | 2002-07-15 | Administration |
| 2 | Tony Montana | 2002-07-15 | Administration |
+--------+--------------+------------+------------------+
์ฐธ์กฐ : https://velog.io/@kdh10806/DataBase-Join
https://www.tutorialrepublic.com/sql-tutorial/