Animal Table 3,4 - Oracle
๋ณดํธ์์์ ์ค์ฑํํ ๋๋ฌผ
๋ณดํธ์์์ ์ค์ฑํ ์์ ์ ๊ฑฐ์น ๋๋ฌผ ์ ๋ณด๋ฅผ ์์๋ณด๋ ค ํฉ๋๋ค. ๋ณดํธ์์ ๋ค์ด์ฌ ๋น์์๋ ์ค์ฑํ1๋์ง ์์์ง๋ง, ๋ณดํธ์๋ฅผ ๋๊ฐ ๋น์์๋ ์ค์ฑํ๋ ๋๋ฌผ์ ์์ด๋์ ์๋ฌผ ์ข , ์ด๋ฆ์ ์กฐํํ๋ ์์ด๋ ์์ผ๋ก ์กฐํํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
-- ์ฝ๋๋ฅผ ์
๋ ฅํ์ธ์
SELECT ins.ANIMAL_ID, ins.ANIMAL_TYPE, ins.NAME
FROM ANIMAL_INS ins, ANIMAL_OUTS outs
WHERE ins.ANIMAL_ID = outs.ANIMAL_ID
AND ins.SEX_UPON_INTAKE LIKE 'Intact%'
AND (outs.SEX_UPON_OUTCOME LIKE 'Spayed%' OR outs.SEX_UPON_OUTCOME LIKE 'Neutered%')
;
์์๋๋ฐ์ ์์์ต๋๋ค
๊ด๋ฆฌ์์ ์ค์๋ก ์ผ๋ถ ๋๋ฌผ์ ์ ์์ผ์ด ์๋ชป ์ ๋ ฅ๋์์ต๋๋ค. ๋ณดํธ ์์์ผ๋ณด๋ค ์ ์์ผ์ด ๋ ๋น ๋ฅธ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ์์์ผ์ด ๋น ๋ฅธ ์์ผ๋ก ์กฐํํด์ผํฉ๋๋ค.
-- ์ฝ๋๋ฅผ ์
๋ ฅํ์ธ์
SELECT ins.ANIMAL_ID, ins.NAME
FROM ANIMAL_INS ins, ANIMAL_OUTS outs
WHERE ins.ANIMAL_ID = outs.ANIMAL_ID AND ins.DATETIME > outs.DATETIME
ORDER BY ins.DATETIME
์์ด์ง ๊ธฐ๋ก ์ฐพ๊ธฐ
์ฒ์ฌ์ง๋ณ์ผ๋ก ์ธํด ์ผ๋ถ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์์ต๋๋ค. ์ ์์ ๊ฐ ๊ธฐ๋ก์ ์๋๋ฐ, ๋ณดํธ์์ ๋ค์ด์จ ๊ธฐ๋ก์ด ์๋ ๋๋ฌผ์ ID์ ์ด๋ฆ์ ID ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
SELECT outs.ANIMAL_ID, outs.NAME
FROM ANIMAL_INS ins, ANIMAL_OUTS outs
WHERE ins.ANIMAL_ID(+) = outs.ANIMAL_ID
AND ins.ANIMAL_ID IS NULL
ORDER BY ANIMAL_ID;
์ค์ฑํ ์ฌ๋ถ
๋ณดํธ์์ ๋๋ฌผ์ด ์ค์ฑํ๋์๋์ง ์๋์ง ํ์
ํ๋ ค ํฉ๋๋ค. ์ค์ฑํ๋ ๋๋ฌผ์ SEX_UPON_INTAKE
์ปฌ๋ผ์ 'Neutered' ๋๋ 'Spayed'๋ผ๋ ๋จ์ด๊ฐ ๋ค์ด์์ต๋๋ค. ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ, ์ค์ฑํ ์ฌ๋ถ๋ฅผ ์์ด๋ ์์ผ๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ์ค์ฑํ๊ฐ ๋์ด์๋ค๋ฉด 'O', ์๋๋ผ๋ฉด 'X'๋ผ๊ณ ํ์ํด์ฃผ์ธ์.
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE '%Neutered%' THEN 'O'
WHEN SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
ELSE
'X'
END
AS ์ค์ฑํ
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE '%Intact%' THEN 'X'
ELSE
'O'
END
AS ์ค์ฑํ
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
์ค๋ ๊ธฐ๊ฐ ๋ณดํธํ ๋๋ฌผ(1)
์์ง ์ ์์ ๋ชป ๊ฐ ๋๋ฌผ ์ค, ๊ฐ์ฅ ์ค๋ ๋ณดํธ์์ ์์๋ ๋๋ฌผ 3๋ง๋ฆฌ์ ์ด๋ฆ๊ณผ ๋ณดํธ ์์์ผ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ์์์ผ ์์ผ๋ก ์กฐํํด์ผ ํฉ๋๋ค.
SELECT *
FROM (
SELECT ins.NAME, ins.DATETIME
FROM ANIMAL_INS ins, ANIMAL_OUTS outs
WHERE ins.ANIMAL_ID = outs.ANIMAL_ID(+) AND outs.ANIMAL_ID IS NULL
ORDER BY ins.DATETIME
)
WHERE rownum<=3
SELECT ins.NAME, ins.DATETIME
FROM ANIMAL_INS ins, ANIMAL_OUTS outs
WHERE ins.ANIMAL_ID = outs.ANIMAL_ID(+)
AND outs.ANIMAL_ID IS NULL
AND rownum>=3
ORDER BY ins.DATETIME
์ค๋ ๊ธฐ๊ฐ ๋ณดํธํ ๋๋ฌผ(2)
์ ์์ ๊ฐ ๋๋ฌผ ์ค, ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ฐ์ฅ ๊ธธ์๋ ๋๋ฌผ ๋ ๋ง๋ฆฌ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ธด ์์ผ๋ก ์กฐํํด์ผ ํฉ๋๋ค.
SELECT ANIMAL_ID, NAME
FROM (
SELECT ins.ANIMAL_ID, ins.NAME, outs.DATETIME-ins.DATETIME AS DATETIME
FROM ANIMAL_INS ins, ANIMAL_OUTS outs
WHERE ins.ANIMAL_ID = outs.ANIMAL_ID
ORDER BY DATETIME DESC
)
WHERE rownum<=2
SELECT *
FROM (
SELECT ins.ANIMAL_ID, ins.NAME
FROM ANIMAL_INS ins, ANIMAL_OUTS outs
WHERE ins.ANIMAL_ID = outs.ANIMAL_ID
ORDER BY outs.DATETIME - ins.DATETIME DESC
)
WHERE rownum<=2
Last updated
Was this helpful?