
ํ ์ด๋ธ์ ๋ฐ์ดํฐ ํ์ ์งํฉ์ผ๋ก ๊ฐ์ฃผํ ์ ์๋ค. MySQL ์์๋ UNION์ผ๋ก ํฉ์งํฉ์ ๊ตฌํ ์ ์๊ณ , ๊ต์งํฉ ์ฐจ์งํฉ์ ์ง์๋์ง ์๋๋ค๊ณ ํ๋ค.
์ฌ๋ฌ๊ฐ์ ํ ์ด๋ธ์ ํฉ์น ๋, select ๊ตฌ๋ฅผ UNION์ผ๋ก ํฉ์น๋ฉด ํฉ์งํฉ์ ๋ง๋ค ์ ์๋ค. ์ด ๋,
์๋ฅผ ๋ค์ด ์ํธํํ ๊ฑฐ๋์์์ ๊ธฐ์ค ํํ(์ํ, ๋นํธ์ฝ์ธ๊ณผ ๊ฐ์ด ๋ค๋ฅธ ์ฝ์ธ์ ์ด ์ ์๋ ํํ), ์ํธ ํํ๋ฅผ ํฉ์ณ์ ๋ณด๊ณ ์ถ์ ๋ ๋ค์๊ณผ ๊ฐ์ด ํฉ์ณ์ ๋ณผ ์ ์๋ค.
BTC(๋นํธ์ฝ์ธ), GT(์ง๋ฅํ ํฐ)์ ์ํ๋ก ์ด ์ ์๋ ์ํธํํ์๊ณผ ๋์์ ๋ค๋ฅธ ์ฝ์ธ์ ์ด ์ ์๋ ๊ธฐ์คํํ์ด๋ค. ๋๋ฌธ์ ๋ ํ ์ด๋ธ์ code์ด์ ํฉํ๊ฒ ๋ ๊ฒฝ์ฐ union all์์๋ ์๋์ ๊ฐ์ด ์ค๋ณต์ด ํฌํจ๋์ด ๋ํ๋๊ฒ ๋๋ค. * ํธ์์ ์ํธ ํํ๋ A์๊น์ง๋ง์ผ๋ก ์๋๋ค.
select base_currencies.code from base_currencies
UNION
select quote_currencies.code from quote_currencies;
#UNION ALL #UNION
+-------+ +-------+
| code | | code |
+-------+ +-------+
| KRW | | KRW |
| BTC | | BTC |
| GT | | GT |
| AERGO | | AERGO |
| ATOM | | ATOM |
| ATOMX | | ATOMX |
| BTC | +-------+
| GT |
+-------+
union์ ๊ธฐ๋ณธ ๋์์ distinct(์ค๋ณต ์ ๊ฑฐ)์ด๊ธฐ ๋๋ฌธ์, ์ค๋ณต๊น์ง ํฌํจํด์ ๋๋ฆฌ๋ ค๊ณ ํ๋ฉด UNION ALL ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
select base_currencies.code from base_currencies
UNION ALL
select quote_currencies.code from quote_currencies;
์ค๋ณต ๊ด๋ จ ํค์๋
์ค๋ณต์ ์ ๊ฑฐํ๋ ๊ฒฝ์ฐ๋ select ๊ตฌ์ distinct, ์ค๋ณต์ ์ ๊ฑฐํ์ง ์๊ณ ๋ชจ๋ ๋ฐํํ๋ ๊ฒฝ์ฐ์๋ all
๊ณฑ์งํฉ, ์ ์งํฉ, ๋๋ ์นดํฐ ์ ๊ณฑ(Cartesian product)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ํ ์์ฆ์ 5ํ๊น์ง ์๋ ๋๋ผ๋ง๊ฐ 3์์ฆ๊น์ง ๋ฐฉ์๋๋ ๊ฒฝ์ฐ๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
seasons = { 1,2,3 }
episodes = { 1,2,3,4,5}
| season/ep | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| season1 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 |
| season2 | 2.1 | 2.2 | 2.3 | 2.4 | 2.5 |
| season3 | 3.1 | 3.2 | 3.3 | 3.4 | 3.5 |
from ๊ตฌ์ ๋ณต์์ ํ
์ด๋ธ์ ์ง์ ํ๋ฉด ๊ต์ฐจ ๊ฒฐํฉ์ ํ๋ ๊ฒ์ด๊ณ , ๊ฒฐ๊ณผ๋ ๊ณฑ์งํฉ์ด ๋๋ค. union์ฐ๊ฒฐ์ ์ธ๋ก๋ก ๋์ด๋์ง๋ง, ๊ฒฐํฉ ์ฐ๊ฒฐ์ ๊ฐ๋ก๋ก ๋์ด๋๋ค. ๊ณฑ์งํฉ์ผ๋ก ํ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ๋์ด๋๊ธฐ ๋๋ฌธ์, ๊ต์ฐจ ๊ฒฐํฉ๋ณด๋ค๋ ๋ด๋ถ ๊ฒฐํฉ์ด ์์ฃผ ์ฌ์ฉ๋๋ค.
๋ด๋ถ ๊ฒฐํฉ์ ๊ณฑ์งํฉ์์ ์ํ๋ ์กฐํฉ์ ๊ฒ์ํ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, ๋ด๊ฐ user, userwallets ํ ์ด๋ธ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ํ์. user๋ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , userwallet์ ์ฌ์ฉ์๊ฐ ๊ฐ์ง๊ณ ์๋ ์์ฐ์ ๋ํ๋ธ๋ค.
์ด ๋ ์ฌ์ฉ์์ ์ ๋ณด์ ์์ฐ์ ํจ๊ป ๋ณด๊ณ ์ถ๋ค๋ฉด select ๊ตฌ์ *๋ฅผ, ๋ด๊ฐ ๋ณด๊ณ ์ถ์ ์ ๋ณด๋ง ๋ถ๋ฌ์ค๊ณ ์ถ์ ๋์๋ Select๊ตฌ์์ table.column๋ช ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
select users.name, userwallets.asset_id, userwallets.user_id
from users, userwallets
where users.id = userwallets.user_id;
```sql
+-----------+----------+---------+
| name | asset_id | user_id |
+-----------+----------+---------+
| ํน๋ | 34 | 5 |
| ํน๋ | 8 | 5 |
| ์์ | 34 | 7 |
| ์์ | 8 | 7 |
+-----------+----------+---------+
๊ตฌ์ ๋ฐฉ๋ฒ์์๋ from ๊ตฌ์์ ์ผํ๋ก ํ ์ด๋ธ์ ์ง์ ํ ๊ฒ๊ณผ ๋ฌ๋ฆฌ, table ์ฌ์ด์ inner join ํค์๋๋ฅผ ๋ฃ๋๋ค. ์๊ฒ ์ธ๋ถ ๊ฒฐํฉ์ด๋ค. inner join๋ง ๋ฃ์ ๊ฒฝ์ฐ ์์ ๋๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
select users.name, userwallets.asset_id, userwallets.user_id
from users inner join userwallets
on users.id = userwallets.user_id;
inner join์ ํ ๊ฒฝ์ฐ์ ์กฐ๊ฑด์ ๊ฑฐ๋ on, where์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์๋ค. ๋ฐ๋ฉด left join, right join์ ์ฌ์ฉํ๋ฉด where์ ์ธ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ด๋ค.
๊ฒฐํฉํ๋ ํ ์ด๋ธ ์ค ์ด๋ ์ชฝ์ ๊ธฐ์ค์ผ๋ก ํ ์ง ๊ฒฐ์ ํ ์ ์๋ค. join์ ์ธ ๊ฒฝ์ฐ on์ ํตํด ๊ฒฐํฉ ์กฐ๊ฑด์ ์ค์ ํด์ค ์ ์๋ค. user ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก left join์ ํ ๊ฒฝ์ฐ userwallets ์๋ ๋ฐ์ดํฐ๊ฐ ์๋ ์ํ ๊ฐ๋ ๋์ค๋ ๊ฒ์ ์ ์ ์๋ค.
๋ฐ๋ฉด right join์ ๊ธฐ์ค์ผ๋ก ํ๋ฉด ํน๋, ์ด์์์ ๋ฐ์ดํฐ๋ง ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ์ํ์ด ์ ์ธ๋์ด ๋์จ๋ค.
select users.name, userwallets.asset_id, userwallets.user_id
from users left join userwallets
on users.id = userwallets.user_id;
+-----------+----------+---------+
| name | asset_id | user_id |
+-----------+----------+---------+
| ํน๋ | 34 | 5 |
| ํน๋ | 8 | 5 |
| ์์ | 34 | 7 |
| ์์ | 8 | 7 |
| ์ํ | NULL | NULL |
+-----------+----------+---------+
select users.name, userwallets.asset_id, userwallets.user_id
from users right join userwallets
on users.id = userwallets.user_id;
+-----------+----------+---------+
| name | asset_id | user_id |
+-----------+----------+---------+
| ํน๋ | 34 | 5 |
| ํน๋ | 8 | 5 |
| ์์ | 34 | 7 |
| ์์ | 8 | 7 |
+-----------+----------+---------+
์ธ๋ถ๊ฒฐํฉ ๋ชฐ๋๋ ๋ถ๋ถ์ธ๋ฐ ์ฐธ๊ณ ์ํ์ด์ ใ ใ ใ