suvera-dev ๐Ÿฅฆ

SQL) ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ๊ณ ๋“์  Kit - JOIN ๋ณธ๋ฌธ

Algorithm/CodingTest - SQL

SQL) ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค SQL ๊ณ ๋“์  Kit - JOIN

suvera 2022. 4. 16. 03:39

ANIMAL_INS

 

ANIMAL_OUTS

 

 

1. ์—†์–ด์ง„ ๊ธฐ๋ก ์ฐพ๊ธฐ

์ฒœ์žฌ์ง€๋ณ€์œผ๋กœ ์ธํ•ด ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ž…์–‘์„ ๊ฐ„ ๊ธฐ๋ก์€ ์žˆ๋Š”๋ฐ, ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๊ธฐ๋ก์ด ์—†๋Š” ๋™๋ฌผ์˜ ID์™€ ์ด๋ฆ„์„ ID ์ˆœ์œผ๋กœ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

SELECT OUTS.ANIMAL_ID, OUTS.NAME
FROM ANIMAL_OUTS OUTS
LEFT OUTER JOIN ANIMAL_INS INS
ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
WHERE INS.ANIMAL_ID is NULL
ORDER BY OUTS.ANIMAL_ID

LEFT JOIN : ์™ผ์ชฝ ํ…Œ์ด๋ธ”์„ ์ค‘์‹ฌ์œผ๋กœ ์˜ค๋ฅธ์ชฝ์˜ ํ…Œ์ด๋ธ”์„ ๋งค์น˜์‹œํ‚จ๋‹ค.

 

 ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ํ•œ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ผ์น˜ํ•  ๊ฒฝ์šฐ, 
   ํ•ด๋‹น ์™ผ์ชฝ ๋ ˆ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ํ‘œ์‹œํ•˜๊ฒŒ ๋œ๋‹ค.

 

 ์™ผ์ชฝ์€ ๋ฌด์กฐ๊ฑด ํ‘œ์‹œํ•˜๊ณ , ๋งค์น˜๋˜๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์˜ค๋ฅธ์ชฝ์— ์—†์œผ๋ฉด NULL์„ ํ‘œ์‹œํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ LEFT JOIN์„ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” ์™ผ์ชฝ ํ…Œ์ด๋ธ”์ธ ANIMAL_OUTS์— ํฌํ•จ๋˜๋Š” ๋ฐ์ดํ„ฐ์ธ 

์ž…์–‘๋ณด๋‚ธ ๊ธฐ๋ก์€ ์žˆ๊ณ , ANIMAL_INS์— ํฌํ•จ๋˜๋Š” ๋ฐ์ดํ„ฐ์ธ ๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜จ ๊ธฐ๋ก์€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๊ธฐ์กด์— ANIMAL_INS ํ…Œ์ด๋ธ”์—์„œ ์—†์—ˆ๋˜ ๋‚ด์šฉ๋“ค์€ ID๊ฐ€ NULL ์ฒ˜๋ฆฌ๋˜์–ด ๋“ค์–ด์˜ค๋ฏ€๋กœ

WHERE ์ ˆ์— IS NULL์„ ์ถ”๊ฐ€ํ•˜๋ฉด

ANIMAL_OUTS์—๋Š” ์žˆ์ง€๋งŒ ANIMAL_INS์—๋Š” ์—†๋Š” ๊ฐ’๋“ค๋งŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์กฐ์ธ ํ• ๋•Œ๋Š” ๋™๋ฌผ ์•„์ด๋””๊ฐ€ ๊ฐ™์€ ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค์Œ ์ •๋ ฌํ•ด์ค€๋‹ค ! 

 

 

2. ์žˆ์—ˆ๋Š”๋ฐ์š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค

 

๊ด€๋ฆฌ์ž์˜ ์‹ค์ˆ˜๋กœ ์ผ๋ถ€ ๋™๋ฌผ์˜ ์ž…์–‘์ผ์ด ์ž˜๋ชป ์ž…๋ ฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ณดํ˜ธ ์‹œ์ž‘์ผ๋ณด๋‹ค ์ž…์–‘์ผ์ด ๋” ๋น ๋ฅธ ๋™๋ฌผ์˜ ์•„์ด๋””์™€ ์ด๋ฆ„์„ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ๋ณดํ˜ธ ์‹œ์ž‘์ผ์ด ๋น ๋ฅธ ์ˆœ์œผ๋กœ ์กฐํšŒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

SELECT INS.ANIMAL_ID, INS.NAME 
FROM ANIMAL_INS INS
LEFT JOIN ANIMAL_OUTS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID 
WHERE INS.DATETIME > OUTS.DATETIME 
ORDER BY INS.DATETIME

INS์—๋Š” ๋ณดํ˜ธ ์‹œ์ž‘์ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๊ณ , OUTS์—๋Š” ์ž…์–‘์ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์ž…์–‘์ผ์ด ์ž˜๋ชป ์ž…๋ ฅ๋˜์—ˆ์œผ๋ฏ€๋กœ, ๋ณดํ˜ธ์‹œ์ž‘์ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” INS ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ LEFT JOIN.

๋ณดํ˜ธ ์‹œ์ž‘์ผ๋ณด๋‹ค ์ž…์–‘์ผ์ด ๋” ๋น ๋ฅธ ๋™๋ฌผ์„ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ INS.DATETIME๊ณผ OUTS.DATETIME ๋น„๊ต. 

 

 

 

3. ์˜ค๋žœ๊ธฐ๊ฐ„ ๋ณดํ˜ธํ•œ ๋™๋ฌผ

์•„์ง ์ž…์–‘์„ ๋ชป ๊ฐ„ ๋™๋ฌผ ์ค‘, ๊ฐ€์žฅ ์˜ค๋ž˜ ๋ณดํ˜ธ์†Œ์— ์žˆ์—ˆ๋˜ ๋™๋ฌผ 3๋งˆ๋ฆฌ์˜ ์ด๋ฆ„๊ณผ ๋ณดํ˜ธ ์‹œ์ž‘์ผ์„ ์กฐํšŒํ•˜๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ด๋•Œ ๊ฒฐ๊ณผ๋Š” ๋ณดํ˜ธ ์‹œ์ž‘์ผ ์ˆœ์œผ๋กœ ์กฐํšŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

SELECT INS.NAME, INS.DATETIME
FROM ANIMAL_INS INS 
LEFT JOIN ANIMAL_OUTS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE OUTS.ANIMAL_ID IS NULL
ORDER BY INS.DATETIME
LIMIT 3

์•„์ง ์ž…์–‘์„ ๋ชป๊ฐ„ ๋™๋ฌผ ๋ฐ์ดํ„ฐ๋Š” INS ํ…Œ์ด๋ธ”์—๋Š” ์žˆ์ง€๋งŒ, OUTS ํ…Œ์ด๋ธ”์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. 

OUTS ํ…Œ์ด๋ธ”์—๋Š” ์ž…์–‘์ด ๋œ ๋™๋ฌผ๋“ค๋งŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— INS ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ

LEFT JOIN์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์ž…์–‘ ๊ธฐ๋ก์ด ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธ ์‹œ์ž‘์ผ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  3๊ฐœ๋งŒ ์กฐํšŒํ•œ๋‹ค! 

 

 

 

4. ๋ณดํ˜ธ์†Œ์—์„œ ์ค‘์„ฑํ™”ํ•œ ๋™๋ฌผ

 

๋ณดํ˜ธ์†Œ์—์„œ ์ค‘์„ฑํ™” ์ˆ˜์ˆ ์„ ๊ฑฐ์นœ ๋™๋ฌผ ์ •๋ณด๋ฅผ ์•Œ์•„๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๋ณดํ˜ธ์†Œ์— ๋“ค์–ด์˜ฌ ๋‹น์‹œ์—๋Š” ์ค‘์„ฑํ™”1๋˜์ง€ ์•Š์•˜์ง€๋งŒ, ๋ณดํ˜ธ์†Œ๋ฅผ ๋‚˜๊ฐˆ ๋‹น์‹œ์—๋Š”

์ค‘์„ฑํ™”๋œ ๋™๋ฌผ์˜ ์•„์ด๋””์™€ ์ƒ๋ฌผ ์ข…, ์ด๋ฆ„์„ ์กฐํšŒํ•˜๋Š” ์•„์ด๋”” ์ˆœ์œผ๋กœ ์กฐํšŒํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

SELECT INS.ANIMAL_ID, INS.ANIMAL_TYPE, INS.NAME 
FROM ANIMAL_INS INS JOIN ANIMAL_OUTS OUTS
WHERE INS.ANIMAL_ID = OUTS.ANIMAL_ID AND INS.SEX_UPON_INTAKE != OUTS.SEX_UPON_OUTCOME
ORDER BY INS.ANIMAL_ID

INNER JOIN ์‚ฌ์šฉ

๋‚ด๋ถ€ ์กฐ์ธ์€ ๋‘˜ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ๊ณตํ†ต ์†์„ฑ์˜ ๊ฐ’์ด ๊ฐ™์€ ๊ฒƒ์„ ๊ฒฐ๊ณผ๋กœ ์ถ”์ถœํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ™์€ ๋™๋ฌผ ์•„์ด๋””๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ผ๋ฆฌ JOIN ํ•˜๋ฉด

์ค‘์„ฑํ™” ๊ฐ’์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. INS ์ค‘์„ฑํ™” ๊ฐ’๊ณผ OUTS ์ค‘์„ฑํ™” ๊ฐ’์ด ๋‹ค๋ฅธ ๋™๋ฌผ์„ ์กฐํšŒ

Comments