JOIN์ ์ข ๋ฅ
Cartesian Product(๊ณฑ์งํฉ) : ๊ฐ๋ฅํ ๋ชจ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฒฐํฉํจ.
Equi-join : ๊ฐ ํ ์ด๋ธ์์ ํ๋์ฉ ์นผ๋ผ์ ์ ํํ์ฌ ๊ทธ ๊ฐ๋ค์ด ๊ฐ์ ํ๋ค๋ง ์๋ก ์ฐ๊ฒฐ์ํด.
Non-Equi-join : ๋๋ฑ ๋น๊ต ์ธ์ ๋ค๋ฅธ ์ฐ์ฐ์ ์ฌ์ฉ.
Self-join : ์๊ธฐ ์์ ๊ณผ ์กฐ์ธ ์ํ.
Outer Join : ์กฐ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ํ๋ค๋ ๊ฒฐ๊ณผ์ ํฌํจ์ํด. - left, right
์์
Outer Join
https://programmers.co.kr/learn/courses/30/lessons/59042
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์์ด์ง ๊ธฐ๋ก ์ฐพ๊ธฐ
ANIMAL_INS ํ ์ด๋ธ์ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ์ ๋๋ค. ANIMAL_INS ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE๋ ๊ฐ๊ฐ ๋๋ฌผ์ ์์ด๋
programmers.co.kr
์ ์์ ๊ฐ ๊ธฐ๋ก์ ์๋๋ฐ, ๋ณดํธ์์ ๋ค์ด์จ ๊ธฐ๋ก์ด ์๋ ๋๋ฌผ์ ID์ ์ด๋ฆ์ ID ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
-> ์งํฉ ๊ฐ๋ ์ผ๋ก ์๊ฐํด์ B - A๋ฅผ ์๊ฐํ๋ฉด ๋๋ค! ๊ทธ๋์ ๋ ํฐ ์งํฉ์ธ B์ชฝ์ผ๋ก(์ค๋ฅธ์ชฝ์ผ๋ก) ์กฐ์ธํด์ฃผ๋ฉด ๋๋ค.
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS I RIGHT JOIN ANIMAL_OUTS O
ON (I.ANIMAL_ID = O.ANIMAL_ID)
WHERE I.ANIMAL_ID IS NULL
ORDER BY O.ANIMAL_ID
https://programmers.co.kr/learn/courses/30/lessons/59044
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์ค๋ ๊ธฐ๊ฐ ๋ณดํธํ ๋๋ฌผ(1)
ANIMAL_INS ํ ์ด๋ธ์ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ์ ๋๋ค. ANIMAL_INS ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE๋ ๊ฐ๊ฐ ๋๋ฌผ์ ์์ด๋
programmers.co.kr
์์ง ์ ์์ ๋ชป ๊ฐ ๋๋ฌผ ์ค, ๊ฐ์ฅ ์ค๋ ๋ณดํธ์์ ์์๋ ๋๋ฌผ 3๋ง๋ฆฌ์ ์ด๋ฆ๊ณผ ๋ณดํธ ์์์ผ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ์์์ผ ์์ผ๋ก ์กฐํํด์ผ ํฉ๋๋ค.
-> ์งํฉ ๊ฐ๋ ์ผ๋ก ์๊ฐํด์ A - B๋ฅผ ์๊ฐํ๋ฉด ๋๋ค! ๊ทธ๋์ ๋ ํฐ ์งํฉ์ธ A์ชฝ์ผ๋ก(์ผ์ชฝ์ผ๋ก) ์กฐ์ธํด์ฃผ๋ฉด ๋๋ค.
SELECT NAME, DATETIME
FROM(SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I LEFT JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME
)
WHERE ROWNUM <= 3
https://programmers.co.kr/learn/courses/30/lessons/59411
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์ค๋ ๊ธฐ๊ฐ ๋ณดํธํ ๋๋ฌผ(2)
ANIMAL_INS ํ ์ด๋ธ์ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ์ ๋๋ค. ANIMAL_INS ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE๋ ๊ฐ๊ฐ ๋๋ฌผ์ ์์ด๋
programmers.co.kr
์ ์์ ๊ฐ ๋๋ฌผ ์ค, ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ฐ์ฅ ๊ธธ์๋ ๋๋ฌผ ๋ ๋ง๋ฆฌ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ธด ์์ผ๋ก ์กฐํํด์ผ ํฉ๋๋ค.
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I LEFT JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY I.DATETIME - O.DATETIME
FETCH FIRST 2 ROWS ONLY
์ฐธ๊ณ : https://programmers.co.kr/questions/23807
'DB > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SQL - UPPER(), ROWER() (0) | 2022.06.17 |
---|---|
SQL - ์ฐ์ฐ์ IN (0) | 2022.06.17 |
SQL - NVL() (0) | 2022.06.14 |
SQL - HAVING (0) | 2022.06.13 |
SQL - ์ง๊ณ ํจ์ (0) | 2022.06.13 |
JOIN์ ์ข ๋ฅ
Cartesian Product(๊ณฑ์งํฉ) : ๊ฐ๋ฅํ ๋ชจ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฒฐํฉํจ.
Equi-join : ๊ฐ ํ ์ด๋ธ์์ ํ๋์ฉ ์นผ๋ผ์ ์ ํํ์ฌ ๊ทธ ๊ฐ๋ค์ด ๊ฐ์ ํ๋ค๋ง ์๋ก ์ฐ๊ฒฐ์ํด.
Non-Equi-join : ๋๋ฑ ๋น๊ต ์ธ์ ๋ค๋ฅธ ์ฐ์ฐ์ ์ฌ์ฉ.
Self-join : ์๊ธฐ ์์ ๊ณผ ์กฐ์ธ ์ํ.
Outer Join : ์กฐ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ํ๋ค๋ ๊ฒฐ๊ณผ์ ํฌํจ์ํด. - left, right
์์
Outer Join
https://programmers.co.kr/learn/courses/30/lessons/59042
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์์ด์ง ๊ธฐ๋ก ์ฐพ๊ธฐ
ANIMAL_INS ํ ์ด๋ธ์ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ์ ๋๋ค. ANIMAL_INS ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE๋ ๊ฐ๊ฐ ๋๋ฌผ์ ์์ด๋
programmers.co.kr
์ ์์ ๊ฐ ๊ธฐ๋ก์ ์๋๋ฐ, ๋ณดํธ์์ ๋ค์ด์จ ๊ธฐ๋ก์ด ์๋ ๋๋ฌผ์ ID์ ์ด๋ฆ์ ID ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
-> ์งํฉ ๊ฐ๋ ์ผ๋ก ์๊ฐํด์ B - A๋ฅผ ์๊ฐํ๋ฉด ๋๋ค! ๊ทธ๋์ ๋ ํฐ ์งํฉ์ธ B์ชฝ์ผ๋ก(์ค๋ฅธ์ชฝ์ผ๋ก) ์กฐ์ธํด์ฃผ๋ฉด ๋๋ค.
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS I RIGHT JOIN ANIMAL_OUTS O
ON (I.ANIMAL_ID = O.ANIMAL_ID)
WHERE I.ANIMAL_ID IS NULL
ORDER BY O.ANIMAL_ID
https://programmers.co.kr/learn/courses/30/lessons/59044
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์ค๋ ๊ธฐ๊ฐ ๋ณดํธํ ๋๋ฌผ(1)
ANIMAL_INS ํ ์ด๋ธ์ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ์ ๋๋ค. ANIMAL_INS ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE๋ ๊ฐ๊ฐ ๋๋ฌผ์ ์์ด๋
programmers.co.kr
์์ง ์ ์์ ๋ชป ๊ฐ ๋๋ฌผ ์ค, ๊ฐ์ฅ ์ค๋ ๋ณดํธ์์ ์์๋ ๋๋ฌผ 3๋ง๋ฆฌ์ ์ด๋ฆ๊ณผ ๋ณดํธ ์์์ผ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ์์์ผ ์์ผ๋ก ์กฐํํด์ผ ํฉ๋๋ค.
-> ์งํฉ ๊ฐ๋ ์ผ๋ก ์๊ฐํด์ A - B๋ฅผ ์๊ฐํ๋ฉด ๋๋ค! ๊ทธ๋์ ๋ ํฐ ์งํฉ์ธ A์ชฝ์ผ๋ก(์ผ์ชฝ์ผ๋ก) ์กฐ์ธํด์ฃผ๋ฉด ๋๋ค.
SELECT NAME, DATETIME
FROM(SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I LEFT JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME
)
WHERE ROWNUM <= 3
https://programmers.co.kr/learn/courses/30/lessons/59411
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์ค๋ ๊ธฐ๊ฐ ๋ณดํธํ ๋๋ฌผ(2)
ANIMAL_INS ํ ์ด๋ธ์ ๋๋ฌผ ๋ณดํธ์์ ๋ค์ด์จ ๋๋ฌผ์ ์ ๋ณด๋ฅผ ๋ด์ ํ ์ด๋ธ์ ๋๋ค. ANIMAL_INS ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE๋ ๊ฐ๊ฐ ๋๋ฌผ์ ์์ด๋
programmers.co.kr
์ ์์ ๊ฐ ๋๋ฌผ ์ค, ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ฐ์ฅ ๊ธธ์๋ ๋๋ฌผ ๋ ๋ง๋ฆฌ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ธด ์์ผ๋ก ์กฐํํด์ผ ํฉ๋๋ค.
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I LEFT JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY I.DATETIME - O.DATETIME
FETCH FIRST 2 ROWS ONLY
์ฐธ๊ณ : https://programmers.co.kr/questions/23807
'DB > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SQL - UPPER(), ROWER() (0) | 2022.06.17 |
---|---|
SQL - ์ฐ์ฐ์ IN (0) | 2022.06.17 |
SQL - NVL() (0) | 2022.06.14 |
SQL - HAVING (0) | 2022.06.13 |
SQL - ์ง๊ณ ํจ์ (0) | 2022.06.13 |