[SQL] WHERE, JOIN

Updated:

Categories:

Tags: , ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]

WHERE์ ˆ

WHERE ์ ˆ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์—์„œ ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰๋งŒ ์„ ํƒํ•˜์—ฌ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ

์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ถ”์ถœํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

ํ•ญ์ƒ ๋งˆ์ง€๋ง‰์— ์กด

์˜ˆ์‹œ), Users ํ…Œ์ด๋ธ”์—์„œ email์˜ ๊ธธ์ด๊ฐ€ 17 ์ด์ƒ์ธ ์‚ฌ์šฉ์ž๋งŒ ์„ ํƒํ•˜๊ณ  ์‹ถ์„ ๋•Œ

1
SELECT * FROM Users WHERE CHAR_LENGTH(email) >= 17;
  • : ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ.

์˜ˆ์‹œ) LoanRecords ํ…Œ์ด๋ธ”์—์„œ return_date๊ฐ€ NULL์ธ ๋Œ€์ถœ ๊ธฐ๋ก์˜ return_date๋ฅผ ํ˜„์žฌ ๋‚ ์งœ๋กœ ์—…๋ฐ์ดํŠธ

1
2
3
UPDATE LoanRecords
SET return_date = CURDATE()
WHERE return_date IS NULL;
  • ๋น„๊ต ์—ฐ์‚ฐ์ž:
    • <> ๋˜๋Š” !=: ๊ฐ’์ด ๋‹ค๋ฆ„

      1
      2
      
        SELECT*FROM users 
        WHERE username <> 'kimlucky'
      
    • >=: ๊ฐ’์ด ํฌ๊ฑฐ๋‚˜ ๊ฐ™์Œ

  • IN ์—ฐ์‚ฐ์ž:
    • IN: ์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ผ์น˜ํ•  ๋•Œ
    • ์˜ˆ: SELECT * FROM Books WHERE publisher_id IN (1, 2, 3);
  • LIKE ์—ฐ์‚ฐ์ž:
    • %: 0๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž์™€ ์ผ์น˜
    • _: ํ•œ ๊ฐœ์˜ ๋ฌธ์ž์™€ ์ผ์น˜
    • ์˜ˆ: SELECT * FROM Authors WHERE name LIKE 'J%';
      • J๊ฐ€ ์ฒซ๊ธ€์ž์ผ๋•Œ
    • **select** * **from** authors **where** name **like** **'%J'**;
      • J๊ธ€์ž๊ฐ€ ๋งˆ์ง€๋ง‰ ๊ธ€์ž์ผ๋•Œ
  • BETWEEN ์—ฐ์‚ฐ์ž:
    • ๊ฐ’์ด ์ง€์ •๋œ ๋‘ ๊ฐ’ ์‚ฌ์ด์— ์žˆ์–ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ: SELECT * FROM Books WHERE publication_date BETWEEN '2020-01-01' AND '2020-05-31';

    • between A and B ๋Š” A ์ด์ƒ B ์ดํ•˜๋กœ B๋ฅผ ํฌํ•จ
      • ํ•˜์ง€๋งŒ ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ์—๋Š” ์‹œ๋ถ„์ดˆ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ƒ๊ฐํ•˜๊ธฐ
      • ๋งŒ์•ฝ ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์‹œ๋ถ„์ดˆ๊ฐ€ ์—†์ด ์ง€๊ธˆ์ฒ˜๋Ÿผ ๋‚ ์งœ๋งŒ ์ด์šฉํ•œ๋‹ค๋ฉด 00์‹œ 00๋ถ„ 00์ดˆ๋กœ ์ž๋™์œผ๋กœ ์ธ์‹๋จ
      • ์ฆ‰ โ€˜2020-07-15โ€™ ๋Š” โ€˜2020-07-15 00:00:00โ€™ ๋กœ ์ปดํ“จํ„ฐ๊ฐ€ ์ธ์‹ํ•œ๋‹ค๋Š” ์˜๋ฏธ
      • ๊ทธ๋ž˜์„œ 14์ผ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋ ค๋ฉด โ€˜2020-07-14โ€™ ๋Š” 14์ผ์—์„œ 1์ดˆ๋ผ๋„ ์ง€๋‚˜๋Š” ์ˆœ๊ฐ„ โ€˜2020-07-14 00:00:00โ€™ ๋ฅผ ์ดˆ๊ณผํ•˜๊ธฐ ๋•Œ๋ฌธ์— โ€˜2020-07-15โ€™ ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ
  • IS NULL ์—ฐ์‚ฐ์ž:
    • ํ•ด๋‹น ์—ด์˜ ๊ฐ’์ด NULL์ธ ํ–‰์„ ์„ ํƒ
    • ์˜ˆ: SELECT * FROM LoanRecords WHERE return_date IS NULL;


๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•  ์ผ์€ ์—†์Œ, ์šฐ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋กœ ๊ฐ€์ ธ์™€์„œ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•จ.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋น„์‹ธ์„œ ์ ‘๊ทผ๋„ ์ตœ์†Œํ™” ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ.



FUCTION


๋‹จ์ผํ–‰ ํ•จ์ˆ˜

๋‹จ์ผํ–‰ ํ•จ์ˆ˜๋Š” ํ•˜๋‚˜์˜ ์ž…๋ ฅ ํ–‰(row)์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜

์ด ํ•จ์ˆ˜๋“ค์€ ๋ฌธ์ž, ์ˆซ์ž, ๋‚ ์งœ ๋ฐ ๊ธฐํƒ€ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์กฐ์ž‘ํ•˜์—ฌ ํ–‰ ๋ณ„๋กœ ๊ฒฐ๊ณผ ์ œ๊ณต

์ฃผ์š” ๋‹จ์ผํ–‰ ํ•จ์ˆ˜ ๋ถ„๋ฅ˜

  1. ๋ฌธ์ž ํ•จ์ˆ˜:
    • UPPER(), LOWER(), LENGTH(), SUBSTRING(), CONCAT()
    • TRIM(), REPLACE(), REVERSE(), LPAD(), RPAD()
  2. ์ˆซ์ž ํ•จ์ˆ˜ - ์—ฐ์‚ฐ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ๋˜์„œ ์ž˜ ์•ˆ์”€..> ์ž๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ณ ๋ ค
    • ROUND() : ๋ฐ˜์˜ฌ๋ฆผ, CEIL():์˜ฌ๋ฆผ, FLOOR():๋‚ด๋ฆผ, ABS(), SIGN()
    • MOD(), POW(): ์ œ๊ณฑ, SQRT(), EXP(), LOG()
  3. ๋‚ ์งœ ํ•จ์ˆ˜:
    • DATE_ADD(), DATE_SUB(), DATEDIFF():๋‘ ๋‚ ์งœ ์ฐจ, DAY(), MONTH(), YEAR()
    • CURDATE():ํ˜„์žฌ ๋‚ ์งœ, CURTIME(), NOW()
  4. ๋ณ€ํ™˜ ํ•จ์ˆ˜:
    • CAST(), CONVERT()
    • ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜
  5. ์กฐ๊ฑด ํ•จ์ˆ˜:
    • IF(), CASE
  6. NULL ์ฒ˜๋ฆฌ ํ•จ์ˆ˜:โœจโœจ
    • COALESCE(), IFNULL(), NULLIF()

ํ•จ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์‹œ

  1. ๋ฌธ์ž ํ•จ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์ œ

    Users ํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ด๋ฉ”์ผ ์ฃผ์†Œ์˜ ๊ธธ์ด๋ฅผ ๊ณ„์‚ฐ

    1
    2
    3
    4
    5
    
     SELECT
         user_id,
         UPPER(username) AS UsernameUpper,
         LENGTH(email) AS EmailLength
     FROM Users;
    
  2. ์ˆซ์ž ํ•จ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์ œ

    LoanRecords ํ…Œ์ด๋ธ”์—์„œ ๋Œ€์ถœ ์ผ์ˆ˜ ๊ณ„์‚ฐ (๋Œ€์ถœ์ผ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜์ผ๊นŒ์ง€).

    ๋ฐ˜ํ™˜์ผ์ด NULL์ด๋ฉด ๋Œ€์ถœ ์ค‘์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ํ˜„์žฌ ๋‚ ์งœ๊นŒ์ง€์˜ ์ผ์ˆ˜๋ฅผ ๊ณ„์‚ฐ

    1
    2
    3
    4
    5
    6
    
     SELECT
         record_id,
         DATEDIFF(IFNULL(return_date, CURDATE()), loan_date) AS LoanDays
     FROM LoanRecords;
        
     //๋‘˜๋‹ค ๋„์ด์•„๋‹ˆ๋ผ๋ฉด return_date ๋ฐ˜ํ™˜, ๋ฐ˜๋‚ฉ์•ˆํ•œ์‚ฌ๋žŒ์€ curdate()๋กœ:์˜ค๋Š˜๋‚ ์งœ ๋ฐ˜ํ™˜
    
    1
    2
    3
    4
    5
    6
    7
    8
    
     SELECT
         record_id,  -- ๋Œ€์ถœ ๊ธฐ๋ก์˜ ID๋ฅผ ์„ ํƒ-> ์ด๋Š” ๊ฐ ํ–‰(๋Œ€์ถœ ๊ธฐ๋ก)์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„
         DATEDIFF(   -- ๋‘ ๋‚ ์งœ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์ผ ๋‹จ์œ„๋กœ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜
             IFNULL(return_date, CURDATE()),  -- IFNULL ํ•จ์ˆ˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ž๊ฐ€ NULL์ธ ๊ฒฝ์šฐ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋ฅผ ๋ฐ˜ํ™˜.
                                              -- ์—ฌ๊ธฐ์„œ๋Š” return_date๊ฐ€ NULL์ธ ๊ฒฝ์šฐ, ์ฆ‰ ์•„์ง ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ˜„์žฌ ๋‚ ์งœ(CURDATE())๋ฅผ ์‚ฌ์šฉ
             loan_date  -- ๋Œ€์ถœ ์‹œ์ž‘ ๋‚ ์งœ, IFNULL์—์„œ ๋ฐ˜ํ™˜๋œ ๋‚ ์งœ์™€ ๋น„๊ตํ•˜์—ฌ ๋Œ€์ถœ ๊ธฐ๊ฐ„์„ ๊ณ„์‚ฐ.
         ) AS LoanDays  -- ๊ณ„์‚ฐ๋œ ๋Œ€์ถœ ๊ธฐ๊ฐ„์„ 'LoanDays'๋ผ๋Š” ์ด๋ฆ„์˜ ์—ด๋กœ ๊ฒฐ๊ณผ์— ํ‘œ์‹œ.
     FROM LoanRecords;  -- LoanRecords ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ
    
  3. ๋‚ ์งœ ํ•จ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์ œ

    Books ํ…Œ์ด๋ธ”์—์„œ ์ถœํŒ์ผ๋กœ๋ถ€ํ„ฐ ์˜ค๋Š˜๊นŒ์ง€ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„(์›” ๊ธฐ์ค€)์„ ๊ณ„์‚ฐ

    1
    2
    3
    4
    5
    
     SELECT
         book_id,
         title,
         TIMESTAMPDIFF(MONTH, publication_date, CURDATE()) AS MonthsSincePublication
     FROM Books;
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     SELECT
         book_id,  -- ์ฑ…์˜ ID๋ฅผ ์„ ํƒ-์ฑ…์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„
         title,  -- ์ฑ…์˜ ์ œ๋ชฉ์„ ์„ ํƒ
         TIMESTAMPDIFF(  -- ๋‘ ๋‚ ์งœ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
             MONTH,  -- ๊ฒฐ๊ณผ๋ฅผ '๊ฐœ์›”'๋กœ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค์ •
             publication_date,  -- ์ถœํŒ ๋‚ ์งœ
             CURDATE()  -- ํ˜„์žฌ ๋‚ ์งœ, ํ˜„์žฌ ๋‚ ์งœ์™€ ์ถœํŒ ๋‚ ์งœ ์‚ฌ์ด์˜ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐ
         ) AS MonthsSincePublication  -- ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ 'MonthsSincePublication'๋ผ๋Š” ์ด๋ฆ„์˜ ์—ด๋กœ ํ‘œ์‹œ
     FROM Books;  -- Books ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ
    

    ์ƒ๊ธฐ์ฝ”๋“œ๋ฅผ datediff๋กœ ๋ฐ”๊ฟ”์“ฐ๋ฉด

  4. ๋ณ€ํ™˜ ํ•จ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์ œ

    Book_Authors ํ…Œ์ด๋ธ”์—์„œ ๋„์„œ ID๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜

    1
    2
    3
    4
    
     SELECT
         book_id,
         CAST(book_id AS CHAR) AS BookIDString
     FROM Book_Authors;
    
    1
    2
    3
    4
    
     SELECT
         book_id,  
         CAST(book_id AS CHAR) AS BookIDString  -- 'book_id' ํ•„๋“œ๋ฅผ ๋ฌธ์ž์—ด(CHAR)๋กœ ๋ณ€ํ™˜
     FROM Book_Authors;  
    
  5. ์กฐ๊ฑด ํ•จ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์ œ

    LoanRecords ํ…Œ์ด๋ธ”์—์„œ ๊ฐ ๋Œ€์ถœ ๊ธฐ๋ก์— ๋Œ€ํ•ด ๋ฐ˜ํ™˜์ผ์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ƒํƒœ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณต

    1
    2
    3
    4
    5
    6
    7
    
     SELECT
         record_id,
         CASE
             WHEN return_date IS NULL THEN 'Not Returned'
             ELSE 'Returned'
         END AS ReturnStatus
     FROM LoanRecords;
    
    1
    2
    3
    4
    5
    6
    7
    
     SELECT
         record_id, 
         CASE  
             WHEN return_date IS NULL THEN 'Not Returned'  -- return_date๊ฐ€ NULL์ธ ๊ฒฝ์šฐ, ์ฆ‰ ๋Œ€์ถœ์ด ์•„์ง ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด 'Not Returned'์„ ๊ฒฐ๊ณผ๋กœ ๋ฐ˜ํ™˜
             ELSE 'Returned'  -- return_date๊ฐ€ NULL์ด ์•„๋‹Œ ๊ฒฝ์šฐ, ์ฆ‰ ๋Œ€์ถœ์ด ๋ฐ˜ํ™˜๋˜์—ˆ๋‹ค๋ฉด 'Returned'์„ ๊ฒฐ๊ณผ๋กœ ๋ฐ˜ํ™˜
         END AS ReturnStatus  
     FROM LoanRecords; 
    

NULL ์ฒ˜๋ฆฌ ํ•จ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์ œ

LoanRecords ํ…Œ์ด๋ธ”์—์„œ ๋ฐ˜ํ™˜์ผ์ด NULL์ธ ๊ฒฝ์šฐ, โ€˜Not Returnedโ€™๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

1
2
3
4
SELECT
    record_id,
    COALESCE(return_date, 'Not Returned') AS ReturnDateChecked
FROM LoanRecords;
1
2
3
4
SELECT
    record_id, 
    COALESCE(return_date, 'Not Returned') AS ReturnDateChecked 
FROM LoanRecords; 

์ˆซ์ž ํ•จ์ˆ˜(Numeric Functions)

์ฃผ์š” ์ˆซ์ž ํ•จ์ˆ˜

  1. ROUND(number, decimal_places) - ์ง€์ •๋œ ์†Œ์ˆ˜์  ์ž๋ฆฟ์ˆ˜๋กœ ์ˆซ์ž๋ฅผ ๋ฐ˜์˜ฌ๋ฆผ. ์†Œ์ˆ˜์  ์ž๋ฆฟ์ˆ˜ ์ƒ๋žต ์‹œ ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผ.
  2. TRUNCATE(number, decimal_places) - ์ˆซ์ž๋ฅผ ์ง€์ •๋œ ์†Œ์ˆ˜์  ์ž๋ฆฟ์ˆ˜๋กœ ์ ˆ์‚ญ. MySQL์—์„œ๋Š” TRUNC ๋Œ€์‹  TRUNCATE ์‚ฌ์šฉ.
  3. MOD(number1, number2) - ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๋ฐ˜ํ™˜. (JAVA์—์„œ % ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ)
  4. CEIL(number) - ์ˆซ์ž๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํฐ ์ •์ˆ˜๋กœ ์˜ฌ๋ฆผ.
  5. FLOOR(number) - ์ˆซ์ž๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ž‘์€ ์ •์ˆ˜๋กœ ๋‚ด๋ฆผ.
  6. POWER(number, exponent) - ์ˆซ์ž๋ฅผ ์ง€์ •๋œ ๊ฑฐ๋“ญ์ œ๊ณฑ์œผ๋กœ ๊ณ„์‚ฐ.
  7. ABS(number) - ์ˆซ์ž์˜ ์ ˆ๋Œ€๊ฐ’์„ ๋ฐ˜ํ™˜.
  8. SIGN(number) - ์ˆซ์ž์˜ ๋ถ€ํ˜ธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค(์–‘์ˆ˜๋Š” 1, ์Œ์ˆ˜๋Š” -1, 0์€ 0).
  9. SQRT(number) - ์ˆซ์ž์˜ ์ œ๊ณฑ๊ทผ์„ ๋ฐ˜ํ™˜.
  10. LOG10(number) - ์ˆซ์ž์˜ ์ƒ์šฉ๋กœ๊ทธ(๋ฐ‘์ด 10) ๊ฐ’์„ ๋ฐ˜ํ™˜. LOG(base, number) ํ˜•์‹์€ MySQL์—์„œ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  11. EXP(number) - e(์ž์—ฐ๋กœ๊ทธ์˜ ๋ฐ‘)๋ฅผ ์ง€์ •๋œ ๊ฐ’์œผ๋กœ ๊ฑฐ๋“ญ์ œ๊ณฑ.
  12. SIN(number), COS(number), TAN(number) - ๊ฐ๊ฐ ์ˆซ์ž์˜ ์‚ฌ์ธ, ์ฝ”์‚ฌ์ธ, ํƒ„์  ํŠธ ๊ฐ’์„ ๊ณ„์‚ฐ.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
    record_id,
    loan_amount,
    ROUND(loan_amount, 2) AS rounded_amount,
    TRUNCATE(loan_amount, 2) AS truncated_amount,
    CEIL(loan_amount) AS ceiling_amount,
    FLOOR(loan_amount) AS floor_amount,
    MOD(record_id, 2) AS is_even,
    SIGN(loan_amount) AS sign_of_amount,
    SQRT(loan_amount) AS sqrt_of_amount,
    EXP(loan_amount) AS exp_of_amount,
    SIN(loan_amount) AS sin_of_amount,
    COS(loan_amount) AS cos_of_amount,
    TAN(loan_amount) AS tan_of_amount
FROM
    LoanRecords;

๋‚ ์งœ ํ•จ์ˆ˜(Date Functions)

์ฃผ์š” ๋‚ ์งœ ํ•จ์ˆ˜

  1. DATE_ADD(date, INTERVAL expr type) - ๋‚ ์งœ์— ์ง€์ •๋œ ๊ธฐ๊ฐ„์„ ๋”ํ•จ. ์—ฌ๊ธฐ์„œ type์€ YEAR, MONTH, DAY ๋“ฑ์ด ๊ฐ€๋Šฅ
  2. LAST_DAY(date) - ์ง€์ •๋œ ๋‚ ์งœ๊ฐ€ ์†ํ•œ ๋‹ฌ์˜ ๋งˆ์ง€๋ง‰ ๋‚ ์งœ๋ฅผ ๋ฐ˜ํ™˜
  3. DAYNAME(date) - ์ง€์ •๋œ ๋‚ ์งœ์˜ ์š”์ผ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜
  4. DATEDIFF(date1, date2) - ๋‘ ๋‚ ์งœ ์‚ฌ์ด์˜ ์ผ์ˆ˜ ์ฐจ์ด๋ฅผ ๋ฐ˜ํ™˜
  5. CONVERT_TZ(dt, from_tz, to_tz) - ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ํ•œ ์‹œ๊ฐ„๋Œ€์—์„œ ๋‹ค๋ฅธ ์‹œ๊ฐ„๋Œ€๋กœ ๋ณ€ํ™˜
  6. CURRENT_TIMESTAMP - ํ˜„์žฌ ์‹œ์Šคํ…œ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋ฐ˜ํ™˜
  7. DATE_FORMAT(date, format) - ๋‚ ์งœ๋ฅผ ์ง€์ •๋œ ํ˜•์‹์œผ๋กœ ํ˜•์‹ํ™”

๋‚ ์งœ ํ•จ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์ œ

1
2
3
4
5
6
7
8
9
10
SELECT
    record_id,
    loan_date,
    DATE_ADD(loan_date, INTERVAL 3 MONTH) AS loan_date_plus_3_months,
    LAST_DAY(loan_date) AS last_day_of_month,
    DAYNAME(DATE_ADD(loan_date, INTERVAL 1 DAY)) AS next_day_name,
    DATEDIFF(CURRENT_DATE, loan_date) AS days_since_loan,
    DATE_FORMAT(loan_date, '%Y-%m') AS formatted_loan_date
FROM
    LoanRecords;

๊ฐ ๋Œ€์ถœ ๊ธฐ๋ก์˜ loan_date์— ๋Œ€ํ•ด 3๊ฐœ์›” ํ›„์˜ ๋‚ ์งœ, ํ•ด๋‹น ์›”์˜ ๋งˆ์ง€๋ง‰ ๋‚ , ๋‹ค์Œ ๋‚ ์˜ ์š”์ผ, ์˜ค๋Š˜๊ณผ ๋Œ€์ถœ ๋‚ ์งœ ์‚ฌ์ด์˜ ์ผ์ˆ˜ ์ฐจ์ด, ๊ทธ๋ฆฌ๊ณ  ํ˜•์‹ํ™”๋œ ๋‚ ์งœ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๋ฐ˜ํ™˜

  • ์ฝ”๋“œํ’€์ด

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
      SELECT
          record_id,  -- ๊ฐ ๋Œ€์ถœ ๊ธฐ๋ก์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ์„ ํƒ
          loan_date,  -- ๋Œ€์ถœ ์‹œ์ž‘ ๋‚ ์งœ๋ฅผ ์„ ํƒ
          **DATE_ADD**(loan_date, INTERVAL 3 MONTH) AS loan_date_plus_3_months,  -- ๋Œ€์ถœ ์‹œ์ž‘ ๋‚ ์งœ์—์„œ 3๊ฐœ์›”์„ ๋”ํ•œ ๋‚ ์งœ๋ฅผ ๊ณ„์‚ฐ
          **LAST_DAY**(loan_date) AS last_day_of_month,  -- ๋Œ€์ถœ ์‹œ์ž‘ ๋‚ ์งœ๊ฐ€ ์†ํ•œ ๋‹ฌ์˜ ๋งˆ์ง€๋ง‰ ๋‚ ์งœ๋ฅผ ๊ณ„์‚ฐ
          **DAYNAME**(DATE_ADD(loan_date, INTERVAL 1 DAY)) AS next_day_name,  -- ๋Œ€์ถœ ์‹œ์ž‘ ๋‚ ์งœ ๋‹ค์Œ ๋‚ ์˜ ์š”์ผ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜
          **DATEDIFF**(CURRENT_DATE, loan_date) AS days_since_loan,  -- ์˜ค๋Š˜ ๋‚ ์งœ์™€ ๋Œ€์ถœ ์‹œ์ž‘ ๋‚ ์งœ ์‚ฌ์ด์˜ ์ผ์ˆ˜ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐ
          **DATE_FORMAT**(loan_date, **'%Y-%m'**) AS formatted_loan_date  -- ๋Œ€์ถœ ์‹œ์ž‘ ๋‚ ์งœ๋ฅผ '๋…„-์›”' ํ˜•์‹์œผ๋กœ ํฌ๋งท
      FROM
          LoanRecords;  -- LoanRecords ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ
        
    

๋ณ€ํ™˜ ํ•จ์ˆ˜(Conversion Functions)

๋ณ€ํ™˜ ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

์ด ํ•จ์ˆ˜๋“ค์€ ๋ฌธ์ž์—ด์„ ์ˆซ์ž ๋˜๋Š” ๋‚ ์งœ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ˆซ์ž ๋ฐ ๋‚ ์งœ๋ฅผ ๋‹ค๋ฅธ ํ˜•์‹์˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜

์ฃผ์š” ๋ณ€ํ™˜ ํ•จ์ˆ˜

  1. CAST(expression AS type) - ํ‘œํ˜„์‹์„ ์ง€์ •๋œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜
  2. CONVERT(expression, type) - ํ‘œํ˜„์‹์„ ๋‹ค๋ฅธ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜, CAST์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๊ตฌ๋ฌธ์ด ๋‹ค๋ฆ„

๋ณ€ํ™˜ ํ•จ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์ œ

1
2
3
4
5
6
7
8
SELECT
    record_id,
    loan_date,
    CAST(loan_date AS CHAR) AS loan_date_char,
    loan_amount,
    CONVERT(loan_amount, CHAR) AS loan_amount_char
FROM
    LoanRecords;

NULL ๊ด€๋ จ ํ•จ์ˆ˜(Null Functions)

MySQL์—์„œ๋Š” NULL ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜

NULL ๊ฐ’์„ ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜

์—ฌ๋Ÿฌ ํ‘œํ˜„์‹ ์ค‘ NULL์ด ์•„๋‹Œ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ์„ ํƒํ•˜๋Š” ๋“ฑ NULL ๊ฐ’์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰

์ฃผ์š” NULL ๊ด€๋ จ ํ•จ์ˆ˜

  1. IFNULL(expression1, expression2) - expression1์ด NULL์ธ ๊ฒฝ์šฐ expression2๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด expression1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. COALESCE(expression1, expression2, ...) - ์ธ์ˆ˜ ๋ชฉ๋ก(์—ฌ๋Ÿฌ๊ฐœ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ)์—์„œ ์ฒซ ๋ฒˆ์งธ NULL์ด ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜, ๋ชจ๋“  ์ธ์ˆ˜๊ฐ€ NULL์ด๋ฉด NULL์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  3. NULLIF(expression1, expression2) - expression1๊ณผ expression2๊ฐ€ ๊ฐ™์œผ๋ฉด NULL์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด expression1์„ ๋ฐ˜ํ™˜

NULL ๊ด€๋ จ ํ•จ์ˆ˜ ์‚ฌ์šฉ ์˜ˆ์ œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- IFNULL ์‚ฌ์šฉ ์˜ˆ์ œ
SELECT
    record_id,
    IFNULL(return_date, 'Not Returned Yet') AS return_status
FROM
    LoanRecords;

-- COALESCE ์‚ฌ์šฉ ์˜ˆ์ œ
SELECT
    record_id,
    COALESCE(return_date, loan_date, CURRENT_DATE) AS effective_date
FROM
    LoanRecords;

-- NULLIF ์‚ฌ์šฉ ์˜ˆ์ œ
SELECT
    user_id,
    email,
    NULLIF(email, '') AS valid_email  -- Treat empty string as NULL
FROM
    Users;

LoanRecords ํ…Œ์ด๋ธ”์—์„œ ๋ฐ˜ํ™˜์ผ์ด NULL์ธ ๊ฒฝ์šฐ, โ€˜Not Returnedโ€™๋กœ ํ‘œ์‹œ

1
2
3
4
SELECT
    record_id,
    COALESCE(return_date, 'Not Returned') AS ReturnDateChecked
FROM LoanRecords;
1
2
3
4
SELECT
    record_id,  -- ๋Œ€์ถœ ๊ธฐ๋ก์˜ ID๋ฅผ ์„ ํƒ
    COALESCE(return_date, 'Not Returned') AS ReturnDateChecked  '-- COALESCE ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ return_date ์—ด์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
FROM LoanRecords;  -- LoanRecords ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ

์‹ค๋ฌด ํ™œ์šฉ ์˜ˆ์ œ

  1. ์ˆ˜์ต ๊ณ„์‚ฐ: IFNULL ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์›์˜ ์ปค๋ฏธ์…˜ ๋น„์œจ์ด NULL์ธ ๊ฒฝ์šฐ 0์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์›”๊ธ‰์— ์ปค๋ฏธ์…˜์„ ๋”ํ•˜์—ฌ ์ด ์ˆ˜์ต์„ ๊ณ„์‚ฐ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
     CREATE TABLE Employees (
         employee_id INT AUTO_INCREMENT PRIMARY KEY,
         first_name VARCHAR(255) NOT NULL,
         salary DECIMAL(10, 2),
         commission_pct DECIMAL(10, 2)  -- ์ปค๋ฏธ์…˜ ๋น„์œจ; ๊ธ‰์—ฌ์— ๋Œ€ํ•œ ๋ฐฑ๋ถ„์œจ๋กœ ํ‘œ์‹œ
     );
        
     INSERT INTO Employees (first_name, salary, commission_pct) 
     VALUES
     ('John', 50000, 0.05),
     ('Jane', 60000, 0.10),
     ('Doe', 55000, NULL),
     ('Alice', 70000, 0.15),
     ('Bob', 40000, NULL);
        
     SELECT
         employee_id,  -- ์ง์›์˜ ๊ณ ์œ  ID๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
         first_name,  -- ์ง์›์˜ ์ด๋ฆ„์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
         salary,  -- ์ง์›์˜ ๊ธฐ๋ณธ ๊ธ‰์—ฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
         IFNULL(commission_pct, 0) * salary AS commission,  -- ๊ณ„์‚ฐ, ์ปค๋ฏธ์…˜ ๋น„์œจ์ด NULL์ธ ๊ฒฝ์šฐ 0์„ ์‚ฌ์šฉ.
         salary + (IFNULL(commission_pct, 0) * salary) AS total_income  -- ์ด ์ˆ˜์ž…์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ธ‰์—ฌ์— ์ปค๋ฏธ์…˜์„ ๋”ํ•ฉ๋‹ˆ๋‹ค.
     FROM
         Employees;  -- Employees ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ
    
  2. ์ฃผ์†Œ ์ •๋ณด ์ฒ˜๋ฆฌ: COALESCE ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ๋ฌธ์— ๋ฐฐ์†ก ์ฃผ์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ฒญ๊ตฌ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ทธ๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ฃผ์†Œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE Orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    customer_id INT,
    shipping_address VARCHAR(255),
    billing_address VARCHAR(255)
);

INSERT INTO Orders (customer_id, shipping_address, billing_address) VALUES
(1, '1234 Elm St, YourCity, YS', NULL),
(2, NULL, '4321 Pine St, MyCity, MS'),
(3, '7890 Maple St, OurCity, OS', '7890 Maple St, OurCity, OS'),
(4, NULL, NULL);

SELECT
    order_id,  -- ์ฃผ๋ฌธ ID๋ฅผ ์„ ํƒ
    customer_id,  -- ๊ณ ๊ฐ ID๋ฅผ ์„ ํƒ
    COALESCE(shipping_address, billing_address, 'No Address Provided') AS address  -- ๋ฐฐ์†ก ์ฃผ์†Œ์™€ ์ฒญ๊ตฌ ์ฃผ์†Œ ์ค‘ ์ฒซ ๋ฒˆ์งธ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
FROM
    Orders;  -- Orders ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ

  1. ํŠน์ • ๊ฐ’์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ ์ˆ˜ํ–‰: ๋‚˜๋ˆ—์…ˆ์—์„œ ๋ถ„๋ชจ๊ฐ€ 0์ด ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด NULLIF ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„๋ชจ๊ฐ€ 0์ธ ๊ฒฝ์šฐ NULL์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE OrderItems (
    product_id INT,
    product_name VARCHAR(255),
    total_price DECIMAL(10, 2),
    total_quantity INT
);

INSERT INTO OrderItems (product_id, product_name, total_price, total_quantity) VALUES
(1, 'Widget A', 100.00, 10),
(2, 'Widget B', 150.00, 5),
(3, 'Widget C', 200.00, 0),  -- ์ด ๊ฒฝ์šฐ ํ•ญ๋ชฉ๋‹น ํ‰๊ท  ๊ฐ€๊ฒฉ์€ ๊ณ„์‚ฐ๋˜์ง€ ์•Š๋Š”๋‹ค.
(4, 'Widget D', 250.00, 25);

SELECT
    product_id,  -- ์ œํ’ˆ ID๋ฅผ ์„ ํƒ
    product_name,  -- ์ œํ’ˆ ์ด๋ฆ„์„ ์„ ํƒ
    total_price / NULLIF(total_quantity, 0) AS average_price_per_item  -- ์ด ๊ฐ€๊ฒฉ์„ ์ด ์ˆ˜๋Ÿ‰์œผ๋กœ ๋‚˜๋ˆ„์–ด ํ•ญ๋ชฉ๋‹น ํ‰๊ท  ๊ฐ€๊ฒฉ์„ ๊ณ„์‚ฐ
FROM
    OrderItems;  -- OrderItems ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ

๋‹จ์ผํ–‰ CASE ํ‘œํ˜„์‹

MySQL์—์„œ ๋‹จ์ผํ–‰ CASE ํ‘œํ˜„์‹์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋…ผ๋ฆฌ ๊ตฌ์กฐ

์ด ๊ตฌ์กฐ๋Š” ์กฐ๊ฑด์  ๋…ผ๋ฆฌ๋ฅผ ์ฟผ๋ฆฌ์— ํ†ตํ•ฉํ•˜์—ฌ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์งˆ์˜๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ๋™์  ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑ

CASE ํ‘œํ˜„์‹์€ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ : Simple CASE Expression๊ณผ Searched CASE Expression.

Simple CASE Expression

Simple CASE Expression์€ ์ž…๋ ฅ ๊ฐ’์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜

1
2
3
4
5
6
CASE 
    WHEN value1 LIKE input_expression THEN result1
    WHEN value2 LIKE input_expression THEN result2
    ...
    ELSE default_result
END

Searched CASE Expression

Searched CASE Expression์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ์กฐ๊ฑด์„ ํ‰๊ฐ€ํ•˜์—ฌ ํ•ด๋‹นํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์กฐ๊ฑด์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜

1
2
3
4
5
6
CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
END

์‚ฌ์šฉ ์˜ˆ์ œ

Simple CASE Expression ์˜ˆ์ œ

Users ํ…Œ์ด๋ธ”์—์„œ ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ ๋„๋ฉ”์ธ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž ์œ ํ˜•์„ ๋ถ„๋ฅ˜ํ•˜๋Š” ์˜ˆ์ œ

1
2
3
4
5
6
7
8
9
10
SELECT
    user_id,  -- ์‚ฌ์šฉ์ž์˜ ๊ณ ์œ  ID๋ฅผ ์„ ํƒ
    email,  -- ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์„ ํƒ
    CASE
        WHEN email LIKE '%@example.com' THEN 'Corporate'  -- ์ด๋ฉ”์ผ ์ฃผ์†Œ๊ฐ€ '@example.com'์œผ๋กœ ๋๋‚˜๋ฉด 'Corporate'๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.
        WHEN email LIKE '%@gmail.com' THEN 'Personal'  -- ์ด๋ฉ”์ผ ์ฃผ์†Œ๊ฐ€ '@gmail.com'์œผ๋กœ ๋๋‚˜๋ฉด 'Personal'๋กœ ๋ถ„๋ฅ˜
        ELSE 'Other'  -- ์œ„์˜ ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด 'Other'๋กœ ๋ถ„๋ฅ˜
    END AS user_type  -- ๋ถ„๋ฅ˜๋œ ์‚ฌ์šฉ์ž ์œ ํ˜•์„ 'user_type'์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ์—ด๋กœ ํ‘œ์‹œ
FROM
    Users;  -- Users ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ

Searched CASE Expression ์˜ˆ์ œ

LoanRecords ํ…Œ์ด๋ธ”์—์„œ ๋Œ€์ถœ ๊ธฐ๋ก์˜ ์ƒํƒœ๋ฅผ ํ‰๊ฐ€ํ•˜์—ฌ ์ƒํƒœ์— ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์˜ˆ์ œ

1
2
3
4
5
6
7
8
9
10
11
SELECT
    record_id,  -- ๋Œ€์ถœ ๊ธฐ๋ก์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ์„ ํƒ
    loan_date,  -- ๋Œ€์ถœ ์‹œ์ž‘ ๋‚ ์งœ๋ฅผ ์„ ํƒ
    return_date,  -- ๋Œ€์ถœ ๋ฐ˜ํ™˜ ๋‚ ์งœ๋ฅผ ์„ ํƒ
    CASE
        WHEN return_date IS NULL THEN 'Not Returned Yet'  -- ๋ฐ˜ํ™˜ ๋‚ ์งœ๊ฐ€ NULL์ธ ๊ฒฝ์šฐ, ๋Œ€์ถœ์ด ์•„์ง ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์•˜์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค
        WHEN DATEDIFF(loan_date, return_date) < -13 THEN 'Overdue'  -- ๋ฐ˜ํ™˜ ๋‚ ์งœ๋กœ๋ถ€ํ„ฐ ํ˜„์žฌ๊นŒ์ง€์˜ ์ผ์ˆ˜๊ฐ€ 14์ผ์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ, ๋Œ€์ถœ์ด ์—ฐ์ฒด๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค
        ELSE 'Returned On Time'  -- ์œ„์˜ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ๋Œ€์ถœ์ด ์ œ์‹œ๊ฐ„์— ๋ฐ˜ํ™˜๋˜์—ˆ๋‹ค
    END AS loan_status  -- ๋Œ€์ถœ์˜ ์ƒํƒœ๋ฅผ 'loan_status'๋ผ๋Š” ์ด๋ฆ„์˜ ์—ด๋กœ ํ‘œ์‹œ
FROM
    LoanRecords;  -- LoanRecords ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ

Simple CASE๋Š” ๋ช…์‹œ์ ์ธ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ฐ˜๋ฉด,

Searched CASE๋Š” ์กฐ๊ฑด์‹์„ ํ‰๊ฐ€ํ•˜์—ฌ ๋ณด๋‹ค ๋™์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ.

์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ๋ณด๊ณ ์„œ ์ž‘์„ฑ ๊ณผ์ •์—์„œ ์œ ์—ฐ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ ๊ฐ€๋Šฅ.

JOIN โœจโœจโœจโœจโœจโœจ๊ฐ€์žฅ ์ค‘์š”!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

posts์—์„œ follows๋ฅผ ์„œ๋กœ ์กฐ์ธ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ (๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ ์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ) โ‡’๊ฐ€๋Šฅ.

๊ทธ๋ ‡์ง€๋งŒ ๋ฐฉ์‹์ด ๋ณต์žก.

ANSI ํ‘œ์ค€ ์กฐ์ธ (ANSI Standard Joins)

ANSI ํ‘œ์ค€ ์กฐ์ธ์€ SQL์—์„œ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜

ANSI(SQL ํ‘œ์ค€์„ ๊ฐœ๋ฐœํ•œ ๊ธฐ๊ตฌ)์—์„œ ์ œ์‹œํ•œ ํ‘œ์ค€ํ™” ๋œ ํ˜•์‹

ANSI ํ‘œ์ค€ ์กฐ์ธ์€ ๊ฐ€๋…์„ฑ์ด ์ข‹๊ณ , ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ ๊ฐ€๋Šฅ

ANSI ์กฐ์ธ์˜ ์ข…๋ฅ˜โœจโœจ -

  1. INNER JOIN: ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ ๊ฒฐ๊ณผ์— ํฌํ•จ
  2. LEFT OUTER JOIN: ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ๊ฒฐ๊ณผ์— ํฌํ•จํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์—์„œ ์ผ์น˜ํ•˜๋Š” ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ NULL ๊ฐ’์„ ์‚ฌ์šฉ
  3. RIGHT OUTER JOIN: ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ๊ฒฐ๊ณผ์— ํฌํ•จํ•˜๊ณ , ์™ผ์ชฝ ํ…Œ์ด๋ธ”์—์„œ ์ผ์น˜ํ•˜๋Š” ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ NULL ๊ฐ’์„ ์‚ฌ์šฉ
    1. ๊ธฐ์ค€์ด LEFT์ธ์ง€ Right์ธ์ง€ ,
  4. FULL OUTER JOIN: ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ๊ฒฐ๊ณผ์— ํฌํ•จํ•˜๊ณ , ์ผ์น˜ํ•˜๋Š” ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ NULL ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.

ANSI ์กฐ์ธ์˜ ๊ตฌ๋ฌธ

1
2
3
4
5
6
7
8
9
SELECT
  column1, column2, ...
FROM
  table1
JOIN type
  table2
ON
  table1.column = table2.column;

ON์€ ๊ผญ ์žˆ์–ด์•ผ ํ•จ, ๊ด€๊ณ„๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ๊ณณ= ๊ธฐ๋ณธ ํ‚ค์ธ์ง€ ์ฐธ์กฐ ํ‚ค์ธ์ง€ ์ ์–ด์•ผ ํ•จ.

์˜ˆ์ œ

1
2
3
4
5
6
7
8
SELECT
  Books.book_id, Books.title, Publishers.name  //๋‹ค๋ฅธํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ด - ์กฐ์ธํ•ด์ค˜์•ผํ•จ.
FROM
  Books
INNER JOIN
  Publishers
ON
  Books.publisher_id = Publishers.publisher_id; //์™ธ๋ž˜ํ‚ค์™€ ๊ธฐ๋ณธํ‚ค๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•จ.

PUBLISHER์„ ์ง€์šฐ๋ฉด ๊ธฐ๋ณธํ‚ค๋Š” NULL์ด ๋  ์ˆ˜ ์—†์–ด์„œ ์ถœํŒ์‚ฌ๊ฐ€ ์—†๋Š” ํ–‰์€ ๋‚˜์˜ค์ง€ ์•Š์Œ

INNER JOIN์€ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋งŒ ๋‚˜์˜ด.

  • ๊ฒฐ๊ณผ

    <Untitled>

  1. MySQL INNER JOIN:
    1. ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ ๊ฒฐ๊ณผ์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  2. MySQL OUTER JOIN:
    1. ๊ฒฐ๊ณผ์— ๋‘ ํ…Œ์ด๋ธ” ์ค‘ ํ•˜๋‚˜์˜ ๋ชจ๋“  ํ–‰์„ ํฌํ•จํ•˜๋ฉฐ,
    2. ์ผ์น˜ํ•˜๋Š” ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ NULL ๊ฐ’์„ ์‚ฌ์šฉ
    3. OUTER JOIN์€ LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

MySQL INNER JOIN

์˜ˆ๋ฅผ ๋“ค์–ด, Books ํ…Œ์ด๋ธ”๊ณผ Authors ๋ฐ Book_Authors ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋„์„œ์˜ ์ €์ž ์ •๋ณด๋ฅผ ์–ป๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค

1
2
3
4
5
6
7
8
9
10
11
12
SELECT
  Books.title, Authors.name
FROM
  Books
INNER JOIN
  Book_Authors
ON
  Books.book_id = Book_Authors.book_id
INNER JOIN
  Authors
ON
  Book_Authors.author_id = Authors.author_id;

์ƒˆ๋กœ ํ–‰์„ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ ์—ฐ๊ฒฐ์ด ์•ˆ๋จ.

๊ทธ๋Ÿด๊ฒฝ์šฐ books., authors.๋กœ ๋ถˆ๋Ÿฌ์™€์•ผ

MySQL LEFT OUTER JOIN

1
2
3
4
5
6
7
8
9
10
11
12
SELECT
  Books.title, Authors.name
FROM
  Books
LEFT JOIN
  Book_Authors
ON
  Books.book_id = Book_Authors.book_id
LEFT JOIN
  Authors
ON
  Book_Authors.author_id = Authors.author_id;
  • ์˜ˆ์ œ๋ฌธ์ œ

    Q. loanrecords.record_id, loanrecords.loan_date ,loanrecords.return_date, users.username , books์˜ title, author์˜ name ์„ ์กฐ์ธํ•ด์„œ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์„ ๋•Œ

    Q. ์—˜๋ฆฌ์Šค๊ฐ€ ๋นŒ๋ ธ๋˜ ์ฑ…์˜ column ๋‹ค ๊ฐ€์ ธ์˜ค๊ธฐ

    [๊ฐ•์‚ฌ๋‹˜ ํ’€์ด]

    Q. ๋Œ€์ถœ๊ธฐ๋ก์ด ์žˆ๋Š” USER์˜ ์ด๋ฆ„๊ณผ ์ฑ…์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜์„ธ์š”, BUT ๋Œ€์ถœ ๊ธฐ๋ก์ด ์—†๋Š” USER๋„ ๋ชจ๋‘ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•จ.

    ๋‘˜ ์ค‘์— ํ•˜๋‚˜๋ผ๋„ left๋ฅผ ์ง€์šฐ๊ฒŒ ๋˜๋ฉด null๊ฐ’์ด ๋‚˜์˜ค์ง€ ์•Š๊ฒŒ ๋จ.

    ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ด๋ผ๋„ ๊ตฌํ˜„ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ

NATURAL JOIN ๊ตฌ๋ฌธ

1
2
3
4
5
6
SELECT
  column1, column2, ...
FROM
  table1
NATURAL JOIN
  table2;

NATURAL JOIN ์˜ˆ์ œ

USING ์ ˆ

USING ์ ˆ์€ ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ JOIN์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, ๋ช…์‹œ์ ์œผ๋กœ ์ผ์น˜ํ•˜๋Š” ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์—ฌ JOIN์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์ง€์ •๋œ ์ปฌ๋Ÿผ์€ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์—์„œ ์ค‘๋ณต์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

USING ์ ˆ ๊ตฌ๋ฌธ

1
2
3
4
5
6
7
SELECT
  column1, column2, ...
FROM
  table1
JOIN
  table2
USING (column_name);

NATURAL๊ณผ USING์€ INNER์™€ ๋น„์Šทํ•œ๋ฐ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ..

Database ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment