*Oracle ๊ธฐ์ค, ์ ๋ต๋ฅ ๋์ ์์ผ๋ก 14๋ฌธ์ ์ค ์์ 7๋ฌธ์ ๋ง
1. ์ค๋ ๊ธฐ๊ฐ ๋ณดํธํ ๋๋ฌผ(1) ( https://school.programmers.co.kr/learn/courses/30/lessons/59044 )
์์ง ์ ์์ ๋ชป ๊ฐ ๋๋ฌผ ์ค, ๊ฐ์ฅ ์ค๋ ๋ณดํธ์์ ์์๋ ๋๋ฌผ 3๋ง๋ฆฌ์ ์ด๋ฆ๊ณผ ๋ณดํธ ์์์ผ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ์์์ผ ์์ผ๋ก ์กฐํํด์ผ ํฉ๋๋ค.
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
FETCH FIRST 3 ROWS ONLY;
- ์ ๋ช
ํ ROWNUM์ ์ด์ฉํ๊ฒ ๋๋ฉด SQL๋ฌธ์ ์คํ ์์ ์, FROM - WHERE ๊ทธ๋ค์์ ORDER BY๊ฐ ์คํ๋๋ฏ๋ก ์ค์ ์ํ๋ ๊ฒฐ๊ณผ์ ๋ฌ๋ผ์ง ์ ์๋ค. ์ฆ, ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ํด์๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์ N๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ์ถ๋ค๋ฉด ์์ ๊ฐ์ด FETCH FIRST n ROWS ONLY๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ROWNUM์ ์ด์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
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 ASC
)
WHERE ROWNUM <=3;
- JOIN์ ํ์ง ์๋ ๋ฐฉ๋ฒ๋ ์๋ค. NOT EXISTS() ํจ์๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
SELECT NAME, DATETIME
FROM (
SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY 3 ASC
) I
WHERE NOT EXISTS(
SELECT 1
FROM ANIMAL_OUTS O
WHERE I.ANIMAL_iD = O.ANIMAL_ID
) AND ROWNUM <=3;
2. ์์๋๋ฐ์ ์์์ต๋๋ค ( https://school.programmers.co.kr/learn/courses/30/lessons/59043 )
๋ณดํธ ์์์ผ๋ณด๋ค ์ ์์ผ์ด ๋ ๋น ๋ฅธ ๋๋ฌผ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ์์์ผ์ด ๋น ๋ฅธ ์์ผ๋ก ์กฐํํด์ผํฉ๋๋ค.
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.DATETIME > O.DATETIME
ORDER BY I.DATETIME ASC;
3. ์ค๋ ๊ธฐ๊ฐ ๋ณดํธํ ๋๋ฌผ(2) ( https://school.programmers.co.kr/learn/courses/30/lessons/59411 )
์ ์์ ๊ฐ ๋๋ฌผ ์ค, ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ฐ์ฅ ๊ธธ์๋ ๋๋ฌผ ๋ ๋ง๋ฆฌ์ ์์ด๋์ ์ด๋ฆ์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋ณดํธ ๊ธฐ๊ฐ์ด ๊ธด ์์ผ๋ก ์กฐํํด์ผ ํฉ๋๋ค.
SELECT O.ANIMAL_ID, O.NAME
FROM (
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS I, ANIMAL_OUTS O
WHERE I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY O.DATETIME-I.DATETIME DESC
)
WHERE ROWNUM <= 2;
- FETCH ์ ์ ์ฌ์ฉํ๋ฉด ์๋์ ๋ํ๋ผ ์ ์๋ค.
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I, ANIMAL_OUTS O
WHERE I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY O.DATETIME-I.DATETIME DESC
FETCH FIRST 2 ROWS ONLY;
4. ์นดํ ๊ณ ๋ฆฌ ๋ณ ๋์ ํ๋งค๋ ์ง๊ณํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/144855 )
2022๋
1์์ ์นดํ
๊ณ ๋ฆฌ ๋ณ ๋์ ํ๋งค๋์ ํฉ์ฐํ๊ณ , ์นดํ
๊ณ ๋ฆฌ(CATEGORY), ์ด ํ๋งค๋(TOTAL_SALES) ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
๊ฒฐ๊ณผ๋ ์นดํ
๊ณ ๋ฆฌ๋ช
์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT B.CATEGORY, SUM(S.SALES) AS TOTAL_SALES
FROM BOOK B
JOIN BOOK_SALES S
ON B.BOOK_ID = S.BOOK_ID
WHERE TO_CHAR(S.SALES_DATE, 'YYYY-MM') = '2022-01'
GROUP BY B.CATEGORY
ORDER BY 1 ASC;
5. ์กฐ๊ฑด๋ณ๋ก ๋ถ๋ฅํ์ฌ ์ฃผ๋ฌธ์ํ ์ถ๋ ฅํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/131113 )
FOOD_ORDER ํ ์ด๋ธ์์ 5์ 1์ผ์ ๊ธฐ์ค์ผ๋ก ์ฃผ๋ฌธ ID, ์ ํ ID, ์ถ๊ณ ์ผ์, ์ถ๊ณ ์ฌ๋ถ๋ฅผ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ถ๊ณ ์ฌ๋ถ๋ 5์ 1์ผ๊น์ง ์ถ๊ณ ์๋ฃ๋ก ์ด ํ ๋ ์ง๋ ์ถ๊ณ ๋๊ธฐ๋ก ๋ฏธ์ ์ด๋ฉด ์ถ๊ณ ๋ฏธ์ ์ผ๋ก ์ถ๋ ฅํด์ฃผ์๊ณ , ๊ฒฐ๊ณผ๋ ์ฃผ๋ฌธ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT ORDER_ID, PRODUCT_ID, TO_CHAR(OUT_DATE, 'YYYY-MM-DD'),
CASE
WHEN OUT_DATE <= TO_DATE('2022-05-01', 'YYYY-MM-DD') THEN '์ถ๊ณ ์๋ฃ'
WHEN OUT_DATE > TO_DATE('2022-05-01', 'YYYY-MM-DD') THEN '์ถ๊ณ ๋๊ธฐ'
ELSE '์ถ๊ณ ๋ฏธ์ '
END AS "์ถ๊ณ ์ฌ๋ถ"
FROM FOOD_ORDER
ORDER BY 1 ASC;
6. ์กฐ๊ฑด์ ๋ง๋ ์ฌ์ฉ์์ ์ด ๊ฑฐ๋๊ธ์ก ์กฐํํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/164668 )
USED_GOODS_BOARD์ USED_GOODS_USER ํ ์ด๋ธ์์ ์๋ฃ๋ ์ค๊ณ ๊ฑฐ๋์ ์ด๊ธ์ก์ด 70๋ง ์ ์ด์์ธ ์ฌ๋์ ํ์ ID, ๋๋ค์, ์ด๊ฑฐ๋๊ธ์ก์ ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ์ด๊ฑฐ๋๊ธ์ก์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
-- ์ฝ๋๋ฅผ ์
๋ ฅํ์ธ์
SELECT U.USER_ID, U.NICKNAME, B.TOTAL_SALES
FROM USED_GOODS_USER U
JOIN (
SELECT SUM(PRICE) AS TOTAL_SALES, WRITER_ID
FROM USED_GOODS_BOARD
WHERE STATUS = 'DONE'
GROUP BY WRITER_ID
) B
ON B.WRITER_ID = U.USER_ID
WHERE B.TOTAL_SALES >= 700000
ORDER BY B.TOTAL_SALES;
-- SELECT A.WRITER_ID, A.NICKNAME, A.TOTAL_SALE
-- FROM (
-- SELECT B.WRITER_ID, U.NICKNAME, SUM(B.PRICE) AS TOTAL_SALE
-- FROM USED_GOODS_BOARD B, USED_GOODS_USER U
-- WHERE STATUS = 'DONE' AND B.WRITER_ID = U.USER_ID
-- GROUP BY B.WRITER_ID, U.NICKNAME
-- ORDER BY 3 ASC
-- ) A
-- WHERE A.TOTAL_SALE >= 700000;
- ์ฃผ์ ์ฒ๋ฆฌ๊ฐ ๋์ง ์์ ์ฝ๋์ ์ฃผ์ ์ฒ๋ฆฌ๊ฐ ๋ ์ฝ๋๋ ORDER์ด๋ JOIN์ ์์น๋ง ๋ฐ๋ ์ ์ด๋ฏ๋ก ์ฌ์ค์ ๋๊ฐ๋ค.
7. ๋์ฌ ๊ธฐ๋ก์ด ์กด์ฌํ๋ ์๋์ฐจ ๋ฆฌ์คํธ ๊ตฌํ๊ธฐ ( https://school.programmers.co.kr/learn/courses/30/lessons/157341 )
CAR_RENTAL_COMPANY_CAR ํ ์ด๋ธ๊ณผ CAR_RENTAL_COMPANY_RENTAL_HISTORY ํ ์ด๋ธ์์ ์๋์ฐจ ์ข ๋ฅ๊ฐ '์ธ๋จ'์ธ ์๋์ฐจ๋ค ์ค 10์์ ๋์ฌ๋ฅผ ์์ํ ๊ธฐ๋ก์ด ์๋ ์๋์ฐจ ID ๋ฆฌ์คํธ๋ฅผ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์๋์ฐจ ID ๋ฆฌ์คํธ๋ ์ค๋ณต์ด ์์ด์ผ ํ๋ฉฐ, ์๋์ฐจ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
SELECT DISTINCT C.CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY H, CAR_RENTAL_COMPANY_CAR C
WHERE C.CAR_TYPE = '์ธ๋จ' AND TO_CHAR(H.START_DATE, 'YYYYMM') = '202210' AND C.CAR_ID = H.CAR_ID
ORDER BY 1 DESC;
'ํ๋ก๊ทธ๋๋จธ์ค > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 3 (2) (2) | 2023.06.29 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 2 (2) (0) | 2023.06.28 |
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 2 (1) (0) | 2023.06.28 |
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 1 (2) (0) | 2023.06.28 |
ํ๋ก๊ทธ๋๋จธ์ค SQL๋ฌธ LV. 1 (1) (0) | 2023.06.23 |