DB/SQL

SQL - 20250515

Geisha 2025. 5. 15. 17:32

 

 

 

๐Ÿ Python ๊ฐœ๋ฐœ์ž ์ฐพ๊ธฐ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT ID, EMAIL, FIRST_NAME, LAST_NAME
FROM DEVELOPER_INFOS
WHERE SKILL_1 = 'Python'
   OR SKILL_2 = 'Python'
   OR SKILL_3 = 'Python'
ORDER BY ID ASC;

 


 

โœ… WHERE SKILL_1 = ‘Python’ OR …

 

  • ์„ธ ๊ฐœ์˜ ์Šคํ‚ฌ ์ปฌ๋Ÿผ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ‘Python’์ธ ๊ฐœ๋ฐœ์ž๋งŒ ํ•„ํ„ฐ๋ง
  • OR ์กฐ๊ฑด์œผ๋กœ ๋‹ค์ค‘ ํ•„๋“œ ๋น„๊ต
  • ์Šคํ‚ค๋งˆ๊ฐ€ ์ˆ˜์ง ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ •๊ทœํ™”๋˜์ง€ ์•Š์€ ๊ตฌ์กฐ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ

 


 

โœ… ORDER BY ID ASC

 

  • ID ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

 

๐Ÿงพ ๊ฒŒ์‹œ๊ธ€ 3๊ฑด ์ด์ƒ ์ž‘์„ฑํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT UU.USER_ID, 
       UU.NICKNAME, 
       CONCAT(CITY, ' ', UU.STREET_ADDRESS1, ' ', IFNULL(UU.STREET_ADDRESS2, '')) AS '์ „์ฒด์ฃผ์†Œ',
       CONCAT(SUBSTRING(TLNO, 1, 3), '-', SUBSTRING(TLNO, 4, 4), '-', SUBSTRING(TLNO, 8, 4)) AS '์ „ํ™”๋ฒˆํ˜ธ'
FROM USED_GOODS_BOARD UB
LEFT JOIN USED_GOODS_USER UU 
  ON UB.WRITER_ID = UU.USER_ID
GROUP BY UU.USER_ID
HAVING COUNT(*) > 2
ORDER BY UU.USER_ID DESC;

 


 

โœ… LEFT JOIN ON

 

  • ๊ฒŒ์‹œ๊ธ€ ํ…Œ์ด๋ธ”๊ณผ ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์„ WRITER_ID = USER_ID๋กœ ์—ฐ๊ฒฐ
  • ์ž‘์„ฑ์ž ์ •๋ณด + ๊ฒŒ์‹œ๊ธ€ ์ •๋ณด ๊ฒฐํ•ฉ

 


 

โœ… CONCAT + IFNULL

CONCAT(CITY, ' ', STREET_ADDRESS1, ' ', IFNULL(STREET_ADDRESS2, ''))

 

  • ์ „์ฒด ์ฃผ์†Œ ์ถœ๋ ฅ์šฉ ๊ฐ€๊ณต
  • STREET_ADDRESS2๊ฐ€ NULL์ผ ๊ฒฝ์šฐ ๊ณต๋ฐฑ ์ฒ˜๋ฆฌ

 


 

โœ… CONCAT + SUBSTRING

CONCAT(SUBSTRING(TLNO, 1, 3), '-', SUBSTRING(TLNO, 4, 4), '-', SUBSTRING(TLNO, 8, 4))

 

  • ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ 010-xxxx-xxxx ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜

 


 

โœ… GROUP BY + HAVING COUNT(*) > 2

 

  • ์‚ฌ์šฉ์ž๋ณ„๋กœ ๊ทธ๋ฃนํ•‘ํ•œ ํ›„
  • ๊ฒŒ์‹œ๊ธ€์ด 3๊ฑด ์ด์ƒ์ธ ์‚ฌ์šฉ์ž๋งŒ ํ•„ํ„ฐ๋ง

 

๐Ÿฆ  ๋Œ€์žฅ๊ท  ํฌ๊ธฐ ๋“ฑ๊ธ‰ ๋ถ„๋ฅ˜ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT 
  ID,
  CASE
    WHEN SIZE_OF_COLONY <= 100 THEN 'LOW'
    WHEN SIZE_OF_COLONY <= 1000 THEN 'MEDIUM'
    ELSE 'HIGH'
  END AS SIZE
FROM ECOLI_DATA
ORDER BY ID;

 


 

โœ… CASE WHEN … THEN … ELSE … END

 

  • SIZE_OF_COLONY ๊ฐ’์— ๋”ฐ๋ผ ํฌ๊ธฐ ๋“ฑ๊ธ‰ ๋ถ„๋ฅ˜
    • 100 ์ดํ•˜ → 'LOW'
    • 101 ~ 1000 → 'MEDIUM'
    • ๊ทธ ์™ธ → 'HIGH'
  •  
  • ์กฐ๊ฑด ์ˆœ์„œ๋Œ€๋กœ ํ‰๊ฐ€๋˜๋ฉฐ, ์ฒซ ์ผ์น˜ ์กฐ๊ฑด์ด ์ ์šฉ๋จ

 


 

โœ… AS SIZE

 

  • CASE๋ฌธ์˜ ๊ฒฐ๊ณผ์— ๋ณ„์นญ(SIZE) ์ง€์ •
  • ์ตœ์ข… ์ถœ๋ ฅ ์ปฌ๋Ÿผ๋ช…

 

๐ŸŽฃ ๋ฌผ๊ณ ๊ธฐ ํ‰๊ท  ๊ธธ์ด ๊ตฌํ•˜๊ธฐ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT ROUND(AVG(IFNULL(LENGTH, 10)), 2) AS AVERAGE_LENGTH
FROM FISH_INFO;

 


 

โœ… IFNULL(LENGTH, 10)

 

  • LENGTH ๊ฐ’์ด NULL์ด๋ฉด 10์œผ๋กœ ๋Œ€์ฒด
  • ํ‰๊ท  ๊ณ„์‚ฐ ์‹œ ๋ˆ„๋ฝ ๋ฐฉ์ง€

 


 

โœ… AVG(…)

 

  • ๋ชจ๋“  LENGTH ๊ฐ’์„ ํ‰๊ท  ๊ณ„์‚ฐ
  • ๋Œ€์ฒด๋œ ๊ฐ’(10)๋„ ํฌํ•จํ•˜์—ฌ ํ‰๊ท  ์‚ฐ์ถœ

 


 

โœ… ROUND(…, 2)

 

  • ํ‰๊ท  ๊ฒฐ๊ณผ๋ฅผ ์†Œ์ˆ˜ ๋‘˜์งธ ์ž๋ฆฌ๊นŒ์ง€ ๋ฐ˜์˜ฌ๋ฆผ

 

๐Ÿพ ์—†์–ด์ง„ ๊ธฐ๋ก ์ฐพ๊ธฐ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT AO.ANIMAL_ID, AO.NAME
FROM ANIMAL_OUTS AO
LEFT JOIN ANIMAL_INS AI
  ON AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE ISNULL(AI.ANIMAL_ID);

 


 

โœ… LEFT JOIN ON

 

  • ANIMAL_OUTS ๊ธฐ์ค€์œผ๋กœ ANIMAL_INS์™€ ์—ฐ๊ฒฐ
  • ๋ชจ๋“  ์ถœ์–‘ ๊ธฐ๋ก์€ ์œ ์ง€ํ•˜๋ฉด์„œ, ์ž…์†Œ ๊ธฐ๋ก์ด ์žˆ๋Š”์ง€ ํ™•์ธ

 


 

โœ… WHERE ISNULL(AI.ANIMAL_ID)

 

  • ์ž…์†Œ ๊ธฐ๋ก์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋™๋ฌผ๋งŒ ํ•„ํ„ฐ๋ง
  • JOIN ๊ฒฐ๊ณผ์—์„œ AI.ANIMAL_ID๊ฐ€ NULL์ธ ๊ฒฝ์šฐ๋งŒ ์ถ”์ถœ
  • → ์ž…์†Œ ์ •๋ณด๊ฐ€ ์—†๋Š” ์ƒํƒœ์—์„œ ์ถœ์–‘ ์ฒ˜๋ฆฌ๋œ ๋™๋ฌผ

 

๐Ÿ›’ ์ค‘๊ณ ๊ฑฐ๋ž˜ ์ƒํƒœ ํ•œ๊ธ€๋กœ ํ‘œ์‹œ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT BOARD_ID, WRITER_ID, TITLE, PRICE,
       CASE 
         WHEN STATUS = 'DONE' THEN '๊ฑฐ๋ž˜์™„๋ฃŒ'
         WHEN STATUS = 'SALE' THEN 'ํŒ๋งค์ค‘'
         ELSE '์˜ˆ์•ฝ์ค‘'
       END AS 'STATUS'
FROM USED_GOODS_BOARD
WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID DESC;

 


 

โœ… CASE WHEN … THEN … ELSE … END

 

  • ๊ฑฐ๋ž˜ ์ƒํƒœ ์ฝ”๋“œ(STATUS)๋ฅผ ํ•œ๊ธ€๋กœ ๋งคํ•‘
    • DONE๊ฑฐ๋ž˜์™„๋ฃŒ
    • SALEํŒ๋งค์ค‘
    • ๊ทธ ์™ธ → ์˜ˆ์•ฝ์ค‘
  •  

 


 

โœ… WHERE CREATED_DATE = ‘2022-10-05’

 

  • ์ž‘์„ฑ์ผ์ด 2022๋…„ 10์›” 5์ผ์ธ ๊ฒŒ์‹œ๊ธ€๋งŒ ํ•„ํ„ฐ๋ง

 


 

โœ… ORDER BY BOARD_ID DESC

 

  • BOARD_ID ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

 

๐Ÿ“… 2021๋…„์— ์žกํžŒ ๋ฌผ๊ณ ๊ธฐ ์ˆ˜ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO
WHERE YEAR(TIME) = 2021;

 


 

โœ… YEAR(TIME) = 2021

 

  • TIME ์ปฌ๋Ÿผ์—์„œ ์—ฐ๋„๋งŒ ์ถ”์ถœํ•˜์—ฌ
  • 2021๋…„์ธ ๋ฐ์ดํ„ฐ๋งŒ ํ•„ํ„ฐ๋ง

 


 

โœ… COUNT(*)

 

  • ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ์ „์ฒด ํ–‰ ์ˆ˜ ๊ณ„์‚ฐ
  • → 2021๋…„์— ์žกํžŒ ๋ฌผ๊ณ ๊ธฐ ๊ฐœ์ˆ˜

 

โฑ๏ธ ์ตœ๋Œ“๊ฐ’ ๊ตฌํ•˜๊ธฐ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT MAX(DATETIME) AS '์‹œ๊ฐ„'
FROM ANIMAL_INS;

 


 

โœ… MAX(DATETIME)

 

  • DATETIME ์ปฌ๋Ÿผ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’(๊ฐ€์žฅ ๋Šฆ์€ ์‹œ๊ฐ„) ์ถ”์ถœ
  • ์‹œ๊ฐ„ ๊ธฐ์ค€ ์ตœ๋Œ“๊ฐ’ ์กฐํšŒ

 


 

โœ… AS ‘์‹œ๊ฐ„’

 

  • ๊ฒฐ๊ณผ ์ปฌ๋Ÿผ๋ช…์„ '์‹œ๊ฐ„'์œผ๋กœ ์ง€์ •
  • ์ถœ๋ ฅ ์‹œ ์‚ฌ์šฉ์ž ์นœํ™”์  ์ปฌ๋Ÿผ๋ช… ํ‘œํ˜„

 


 

๐Ÿฅ ์ทจ์†Œ๋˜์ง€ ์•Š์€ ์ง„๋ฃŒ ์˜ˆ์•ฝ ์กฐํšŒํ•˜๊ธฐ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT AP.APNT_NO,
       PT.PT_NAME,
       PT.PT_NO,
       AP.MCDP_CD,
       DR.DR_NAME,
       AP.APNT_YMD
FROM APPOINTMENT AP
JOIN DOCTOR DR ON AP.MDDR_ID = DR.DR_ID
JOIN PATIENT PT ON AP.PT_NO = PT.PT_NO
WHERE AP.APNT_CNCL_YN = 'N'
  AND DATE(AP.APNT_YMD) = '2022-04-13'
  AND AP.MCDP_CD = 'CS'
ORDER BY AP.APNT_YMD;

 


 

โœ… JOIN … ON

 

  • APPOINTMENTDOCTOR: ์˜์‚ฌ ์ด๋ฆ„ ์กฐํšŒ์šฉ
  • APPOINTMENTPATIENT: ํ™˜์ž ์ด๋ฆ„๊ณผ ๋ฒˆํ˜ธ ์—ฐ๊ฒฐ

 


 

โœ… WHERE AP.APNT_CNCL_YN = ‘N’

 

  • ์ทจ์†Œ๋˜์ง€ ์•Š์€ ์˜ˆ์•ฝ๋งŒ ์กฐํšŒ

 


 

โœ… DATE(AP.APNT_YMD) = ‘2022-04-13’

 

  • APNT_YMD๊ฐ€ DATETIME์ธ ๊ฒฝ์šฐ, ๋‚ ์งœ๋งŒ ์ž˜๋ผ์„œ ๋น„๊ต
  • ์‹œ๊ฐ„ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด๋„ '2022-04-13 09:30:00'2022-04-13์œผ๋กœ ๋น„๊ต๋จ

 


 

โœ… AP.MCDP_CD = ‘CS’

 

  • ์ง„๋ฃŒ ๊ณผ๋ชฉ์ด 'CS' (ํ‰๋ถ€์™ธ๊ณผ)์ธ ๊ฒฝ์šฐ๋งŒ ํ•„ํ„ฐ๋ง

 


 

โœ… ORDER BY AP.APNT_YMD

 

  • ์˜ˆ์•ฝ ์ผ์‹œ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ

 


 

๐Ÿงฉ ๊ด€๋ จ ํ•จ์ˆ˜ ์ •๋ฆฌ (MySQL ๊ธฐ์ค€)

๋ชฉ์  ์‚ฌ์šฉ ์˜ˆ ์„ค๋ช…
๋‚ ์งœ ์ถ”์ถœ DATE(datetime) ์‹œ๊ฐ„ ์ œ๊ฑฐ ํ›„ ๋‚ ์งœ๋งŒ ์ถ”์ถœ
์—ฐ๋„ ์ถ”์ถœ YEAR(datetime) ์—ฐ๋„๋งŒ ์ถ”์ถœ
๋ฌธ์ž์—ด ๋น„๊ต์šฉ ํฌ๋งท 'YYYY-MM-DD' ๋‚ ์งœ ํ•„ํ„ฐ๋ง์‹œ ์‚ฌ์šฉ

 


 

๐Ÿง‘‍๐Ÿ’ผ ๊ฐ€์žฅ ๋†’์€ ํ‰๊ฐ€์ ์ˆ˜๋ฅผ ๋ฐ›์€ ์‚ฌ์› ์กฐํšŒ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT SUM(SCORE) AS SCORE,
       HE.EMP_NO,
       HE.EMP_NAME,
       HE.POSITION,
       HE.EMAIL
FROM HR_EMPLOYEES HE
JOIN HR_GRADE HG ON HG.EMP_NO = HE.EMP_NO
GROUP BY HG.EMP_NO
ORDER BY SCORE DESC
LIMIT 1;

 


 

โœ… JOIN … ON

 

  • HR_EMPLOYEES์™€ HR_GRADE๋ฅผ ์‚ฌ๋ฒˆ(EMP_NO) ๊ธฐ์ค€์œผ๋กœ ์—ฐ๊ฒฐ
  • ์‚ฌ์› ์ •๋ณด + ํ‰๊ฐ€ ์ ์ˆ˜๋ฅผ ํ•จ๊ป˜ ์กฐํšŒ

 


 

โœ… SUM(SCORE)

 

  • ์‚ฌ์›๋ณ„ ์ด ํ‰๊ฐ€ ์ ์ˆ˜ ํ•ฉ์‚ฐ

 


 

โœ… GROUP BY HG.EMP_NO

 

  • ์‚ฌ๋ฒˆ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ•‘
  • ํ‰๊ฐ€ ์ ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฑด์ผ ๊ฒฝ์šฐ, ์‚ฌ์›๋ณ„๋กœ ๋ฌถ์–ด์„œ ์ง‘๊ณ„

 


 

โœ… ORDER BY SCORE DESC

 

  • ์ด์  ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
  • ์ ์ˆ˜๊ฐ€ ๋†’์€ ์‚ฌ์›์ด ์œ„๋กœ ์ •๋ ฌ๋จ

 


 

โœ… LIMIT 1

 

  • ์ƒ์œ„ 1๋ช…๋งŒ ์กฐํšŒ
  • ๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜๋ฅผ ๋ฐ›์€ ์‚ฌ์› ์ถ”์ถœ

 

๐ŸŽฃ ํŠน์ • ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์žก์€ ์ด ์ˆ˜ ๊ตฌํ•˜๊ธฐ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO FI
JOIN FISH_NAME_INFO FN
  ON FI.FISH_TYPE = FN.FISH_TYPE
WHERE FN.FISH_NAME = 'BASS' OR FN.FISH_NAME = 'SNAPPER';

 


 

โœ… JOIN … ON

 

  • ๋ฌผ๊ณ ๊ธฐ ์ •๋ณด(FISH_INFO)์™€ ์ด๋ฆ„ ์ •๋ณด(FISH_NAME_INFO)๋ฅผ
  • FISH_TYPE ๊ธฐ์ค€์œผ๋กœ ์—ฐ๊ฒฐ

 


 

โœ… WHERE … OR …

 

  • FISH_NAME์ด 'BASS' ๋˜๋Š” 'SNAPPER'์ธ ๋ฌผ๊ณ ๊ธฐ๋งŒ ํ•„ํ„ฐ๋ง
  • ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ๋ฌผ๊ณ ๊ธฐ ์ˆ˜๋งŒ ์ง‘๊ณ„

 


 

๐Ÿš˜ ์ž๋™์ฐจ ๋Œ€์—ฌ ๊ธฐ๋ก์—์„œ ๋Œ€์—ฌ์ค‘/๋Œ€์—ฌ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ตฌ๋ถ„ํ•˜๊ธฐ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT DISTINCT CAR_ID,
       CASE 
         WHEN CAR_ID IN (
           SELECT CAR_ID
           FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
           WHERE '2022-10-16' BETWEEN START_DATE AND END_DATE
         ) THEN '๋Œ€์—ฌ์ค‘'
         ELSE '๋Œ€์—ฌ ๊ฐ€๋Šฅ'
       END AS AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
ORDER BY CAR_ID DESC;

 


 

โœ… CASE WHEN … THEN … ELSE … END

 

  • ์„œ๋ธŒ์ฟผ๋ฆฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋Œ€์—ฌ ์ƒํƒœ๋ฅผ ๋ถ„๋ฅ˜
    • ์กฐ๊ฑด ๋งŒ์กฑ ์‹œ → '๋Œ€์—ฌ์ค‘'
    • ์กฐ๊ฑด ๋ถˆ๋งŒ์กฑ ์‹œ → '๋Œ€์—ฌ ๊ฐ€๋Šฅ'
  •  

 


 

โœ… ์„œ๋ธŒ์ฟผ๋ฆฌ + BETWEEN START_DATE AND END_DATE

'2022-10-16' BETWEEN START_DATE AND END_DATE

 

  • 2022-10-16์ด ๋Œ€์—ฌ ๊ธฐ๊ฐ„ ๋‚ด์— ํฌํ•จ๋˜๋Š”์ง€ ํ™•์ธ
  • ํฌํ•จ๋œ๋‹ค๋ฉด ํ•ด๋‹น ์ฐจ๋Ÿ‰์€ ํ˜„์žฌ ๋Œ€์—ฌ์ค‘

 


 

โœ… DISTINCT CAR_ID

 

  • ์ค‘๋ณต๋œ ๋Œ€์—ฌ ์ด๋ ฅ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ฐจ๋Ÿ‰๋ณ„๋กœ ํ•œ ๋ฒˆ์”ฉ๋งŒ ์กฐํšŒ

 


 

โœ… ORDER BY CAR_ID DESC

 

  • ์ฐจ๋Ÿ‰ ID ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

 

๐Ÿ” ์žฌ๊ตฌ๋งค๊ฐ€ ์ผ์–ด๋‚œ ์ƒํ’ˆ๊ณผ ํšŒ์› ๋ฆฌ์ŠคํŠธ ๊ตฌํ•˜๊ธฐ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) >= 2
ORDER BY USER_ID, PRODUCT_ID DESC;

 


 

โœ… GROUP BY USER_ID, PRODUCT_ID

 

  • ํšŒ์›-์ƒํ’ˆ ์กฐํ•ฉ๋ณ„๋กœ ๋ฌถ์–ด์„œ
  • ๊ฐ™์€ ํšŒ์›์ด ๋™์ผ ์ƒํ’ˆ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ตฌ๋งคํ–ˆ๋Š”์ง€ ํ™•์ธ

 


 

โœ… HAVING COUNT(*) >= 2

 

  • ๊ทธ๋ฃน ๋‚ด ๊ตฌ๋งค ํšŸ์ˆ˜๊ฐ€ 2ํšŒ ์ด์ƒ์ธ ๊ฒฝ์šฐ๋งŒ ์ถ”์ถœ
  • HAVING์€ ์ง‘๊ณ„ ์กฐ๊ฑด ํ•„ํ„ฐ๋ง์— ์‚ฌ์šฉ

 


 

โœ… ORDER BY USER_ID, PRODUCT_ID DESC

 

  • USER_ID ์˜ค๋ฆ„์ฐจ์ˆœ
  • ๊ฐ™์€ ์‚ฌ์šฉ์ž ๋‚ด์—์„œ๋Š” PRODUCT_ID๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

 

๐Ÿš— ์ž๋™์ฐจ ๋Œ€์—ฌ ๊ธฐ๋ก์—์„œ ์žฅ๊ธฐ/๋‹จ๊ธฐ ๋Œ€์—ฌ ๊ตฌ๋ถ„ํ•˜๊ธฐ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT 
  HISTORY_ID,
  CAR_ID,
  DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE,
  DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE,
  CASE
    WHEN DATEDIFF(END_DATE, START_DATE) >= 29 THEN '์žฅ๊ธฐ ๋Œ€์—ฌ'
    ELSE '๋‹จ๊ธฐ ๋Œ€์—ฌ'
  END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
ORDER BY HISTORY_ID DESC;

 


 

โœ… DATE_FORMAT(START_DATE, ‘%Y-%m’)

 

  • START_DATE์—์„œ ๋…„-์›” ๋‹จ์œ„๋งŒ ์ถ”์ถœ
  • '2022-09'๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ ํ•„ํ„ฐ๋ง

 


 

โœ… DATEDIFF(END_DATE, START_DATE)

 

  • ๋Œ€์—ฌ์ผ ์ˆ˜ ๊ณ„์‚ฐ (์ข…๋ฃŒ์ผ - ์‹œ์ž‘์ผ)
  • ๊ฒฐ๊ณผ๊ฐ€ 29์ผ ์ด์ƒ์ด๋ฉด → ‘์žฅ๊ธฐ ๋Œ€์—ฌ’

 


 

โœ… CASE WHEN … THEN … ELSE … END

 

  • DATEDIFF ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๋Œ€์—ฌ ์œ ํ˜• ๋ถ„๋ฅ˜
    • 29์ผ ์ด์ƒ → '์žฅ๊ธฐ ๋Œ€์—ฌ'
    • ๊ทธ ์™ธ → '๋‹จ๊ธฐ ๋Œ€์—ฌ'
  •  

 


 

โœ… DATE_FORMAT(…, ‘%Y-%m-%d’)

 

  • ๋‚ ์งœ๋ฅผ YYYY-MM-DD ํ˜•์‹์œผ๋กœ ๊ฐ€๊ณต ์ถœ๋ ฅ
  • ๋ณด๊ธฐ ์ข‹์€ ์ถœ๋ ฅ์šฉ ํฌ๋งท ์ฒ˜๋ฆฌ

 

๐Ÿš˜ ์ž๋™์ฐจ ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„ ๊ตฌํ•˜๊ธฐ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT CAR_ID,
       ROUND(AVG(DATEDIFF(END_DATE, START_DATE) + 1), 1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING ROUND(AVG(DATEDIFF(END_DATE, START_DATE) + 1), 1) >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;

 


 

โœ… DATEDIFF(END_DATE, START_DATE) + 1

 

  • ๋Œ€์—ฌ ๊ธฐ๊ฐ„ ๊ณ„์‚ฐ
  • DATEDIFF๋Š” ์ข…๋ฃŒ์ผ๊ณผ ์‹œ์ž‘์ผ์˜ ์ฐจ์ด(์ผ์ˆ˜)๋ฅผ ๋ฐ˜ํ™˜
  • ๋‹น์ผ ํฌํ•จ์„ ์œ„ํ•ด +1 ์ฒ˜๋ฆฌ

 


 

โœ… AVG(…), ROUND(…, 1)

 

  • ์ฐจ๋Ÿ‰๋ณ„ ํ‰๊ท  ๋Œ€์—ฌ ์ผ์ˆ˜ ๊ณ„์‚ฐ
  • ROUND(..., 1)๋กœ ์†Œ์ˆ˜ ์ฒซ์งธ ์ž๋ฆฌ๊นŒ์ง€ ๋ฐ˜์˜ฌ๋ฆผ

 


 

โœ… GROUP BY CAR_ID

 

  • ์ฐจ๋Ÿ‰๋ณ„๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ํ‰๊ท  ๊ณ„์‚ฐ

 


 

โœ… HAVING … >= 7

 

  • ํ‰๊ท  ๋Œ€์—ฌ ๊ธฐ๊ฐ„์ด 7์ผ ์ด์ƒ์ธ ์ฐจ๋Ÿ‰๋งŒ ํ•„ํ„ฐ๋ง
  • HAVING์€ ์ง‘๊ณ„ ํ•จ์ˆ˜ ํ•„ํ„ฐ๋ง์— ์‚ฌ์šฉ

 


 

โœ… ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC

 

  • ํ‰๊ท  ๊ธฐ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
  • ๋™์ผ ํ‰๊ท ์ผ ๊ฒฝ์šฐ CAR_ID๋กœ ๋‹ค์‹œ ์ •๋ ฌ

๐Ÿ—‚๏ธ ์กฐํšŒ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๊ฒŒ์‹œ๊ธ€์˜ ์ฒจ๋ถ€ํŒŒ์ผ ์กฐํšŒํ•˜๊ธฐ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT 
  CONCAT('/home/grep/src/', BOARD_ID, '/', FILE_ID, FILE_NAME, FILE_EXT) AS FILE_PATH
FROM USED_GOODS_FILE
WHERE BOARD_ID = (
  SELECT BOARD_ID 
  FROM USED_GOODS_BOARD 
  ORDER BY VIEWS DESC
  LIMIT 1
)
ORDER BY FILE_ID DESC;

 


 

โœ… ์„œ๋ธŒ์ฟผ๋ฆฌ: ๊ฒŒ์‹œํŒ ์กฐํšŒ์ˆ˜ ๊ธฐ์ค€ ์ •๋ ฌ

SELECT BOARD_ID
FROM USED_GOODS_BOARD
ORDER BY VIEWS DESC
LIMIT 1

 

  • ๊ฐ€์žฅ ์กฐํšŒ์ˆ˜๊ฐ€ ๋†’์€ ๊ฒŒ์‹œ๊ธ€์˜ ID 1๊ฑด ์ถ”์ถœ

 


 

โœ… WHERE BOARD_ID = (…)

 

  • USED_GOODS_FILE ํ…Œ์ด๋ธ”์—์„œ
  • ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€(BOARD_ID)์— ์—ฐ๊ฒฐ๋œ ์ฒจ๋ถ€ํŒŒ์ผ๋งŒ ํ•„ํ„ฐ๋ง

 


 

โœ… CONCAT(…)

CONCAT('/home/grep/src/', BOARD_ID, '/', FILE_ID, FILE_NAME, FILE_EXT)

 

  • ํŒŒ์ผ ๊ฒฝ๋กœ ๊ฐ€๊ณต
  • ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ + ํŒŒ์ผ๋ช… + ํ™•์žฅ์ž ํ˜•ํƒœ๋กœ ๋ฌธ์ž์—ด ํ•ฉ์นจ

 


 

โœ… ORDER BY FILE_ID DESC

 

  • ํŒŒ์ผ ID ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
  • ์ตœ๊ทผ ํŒŒ์ผ์ด ์œ„์— ์˜ค๋„๋ก ์ •๋ ฌ

 

๐Ÿ“š ์ €์ž · ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ 2022๋…„ 1์›” ๋งค์ถœ ์ง‘๊ณ„ – ์ฟผ๋ฆฌ ๋ถ„์„

SELECT AU.AUTHOR_ID, 
       AU.AUTHOR_NAME, 
       BK.CATEGORY, 
       SUM(BS.SALES * BK.PRICE) AS TOTAL_SALES
FROM BOOK_SALES BS
JOIN BOOK BK ON BS.BOOK_ID = BK.BOOK_ID
JOIN AUTHOR AU ON BK.AUTHOR_ID = AU.AUTHOR_ID
WHERE DATE_FORMAT(BS.SALES_DATE, '%Y-%m') = '2022-01'
GROUP BY AU.AUTHOR_ID, BK.CATEGORY
ORDER BY AU.AUTHOR_ID, BK.CATEGORY DESC;

 


 

โœ… JOIN … ON

 

  • BOOK_SALESBOOK: ๋„์„œ ๊ฐ€๊ฒฉ๊ณผ ์นดํ…Œ๊ณ ๋ฆฌ ํ™•์ธ
  • BOOKAUTHOR: ์ €์ž ์ด๋ฆ„ ์—ฐ๊ฒฐ

 


 

โœ… SALES * PRICE

 

  • ๋„์„œ ํŒ๋งค ์ˆ˜๋Ÿ‰ × ๋„์„œ ๊ฐ€๊ฒฉ = ๋งค์ถœ์•ก
  • ๋ชจ๋“  ํŒ๋งค ๊ธฐ๋ก์— ๋Œ€ํ•ด ๊ณฑ์…ˆ ์ˆ˜ํ–‰

 


 

โœ… SUM(…)

 

  • ๋™์ผ ์ €์ž, ๋™์ผ ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋งค์ถœ์„ ์ดํ•ฉ

 


 

โœ… DATE_FORMAT(SALES_DATE, ‘%Y-%m’) = ‘2022-01’

 

  • SALES_DATE๋ฅผ 'YYYY-MM' ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜
  • 2022๋…„ 1์›” ํŒ๋งค ๊ธฐ๋ก๋งŒ ํ•„ํ„ฐ๋ง

 


 

โœ… GROUP BY AUTHOR_ID, CATEGORY

 

  • ์ €์ž ID + ์นดํ…Œ๊ณ ๋ฆฌ ๋‹จ์œ„๋กœ ๋งค์ถœ ์ง‘๊ณ„

 


 

โœ… ORDER BY AUTHOR_ID, CATEGORY DESC

 

  • ์ €์ž ID ์˜ค๋ฆ„์ฐจ์ˆœ → ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ