| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 9. ÇÔ¼ö¿Í ¿¬»êÀÚ | Fast Forward | Next |
º»Àý¿¡¼´ÂPostgreSQL¿¡¼ »ç¿ë °¡´ÉÇÑSQL¿¡ ÁذÅÇÏ´Â Á¶°Ç½Ä¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù.
Tip: ¿©±â¼ ¼³¸íÇÏ´Â Á¶°Ç½Äº¸´Ù ¹ßÀüÇÑ ±â´ÉÀ» ¿ä±¸ÇÏ´Â °æ¿ì´Â, º¸´Ù ÀÚ¼¼ÇÏ°Ô Ç¥ÇöµÈ ÇÁ·Î±×·¥ ¾ð¾î·Î ÀúÀåµÈ ÇÁ·Î½ÃÁ®¸¦ ±â¼úÇÏ´Â °ÍÀ¸·Î ÇØ°áµË´Ï´Ù.
SQLÀÇCASE½ÄÀº ´Ù¸¥ ¾ð¾îÀÇ if/else ±¸¹®°ú À¯»çÇÑ ¹ü¿ë Á¶°Ç½ÄÀÔ´Ï´Ù.
CASE WHEN
condition
THEN
result
[WHEN ...]
[ELSE
result
]
END
CASE±¸´Â ½ÄÀÌ À¯È¿ÇÑ À§Ä¡ÀÌ¸é ¾îµð¿¡¼¶óµµ »ç¿ë °¡´ÉÇÕ´Ï´Ù. condition ´ÂbooleanÇüÀÇ °á°ú¸¦ ¹ÝȯÇÏ´Â ½ÄÀÔ´Ï´Ù. °á°ú°¡ trueÀÎ °æ¿ì, CASE½ÄÀÇ °ªÀº Á¶°ÇÀ» °ÅÃÄ result °¡ µË´Ï´Ù. °á°ú°¡ falseÀÎ °æ¿ì, °°Àº ¹æ½ÄÀ» ÀÌ¿ëÇÏ¿© ÈÄ¿¡ °è¼ÓµÇ´ÂWHEN±¸¸¦ °Ë»öÇÒ ¼ö ÀÖ½À´Ï´Ù. WHENÀÇ condition °¡ Çϳªµµ true°¡ ¾Æ´Ñ °æ¿ì, CASE½ÄÀÇ °ªÀºELSE±¸ÀÇ result °¡ µË´Ï´Ù. ELSE±¸°¡ »ý·« µÇ°í, ¾î´À Á¶°Ç°úµµ ÀÏÄ¡ÇÏÁö ¾Ê´Â °æ¿ì, °á°ú´Â NULLÀÔ´Ï´Ù.
ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.
An example:
SELECT * FROM test;
a
---
1
2
3
SELECT a,
CASE WHEN a=1 THEN 'one'
WHEN a=2 THEN 'two'
ELSE 'other'
END
FROM test;
a | case
---+-------
1 | one
2 | two
3 | other
¸ðµç result ½ÄÀÇ µ¥ÀÌÅÍÇüÀº ´ÜÀÏÀÇ Ãâ·ÂÇü°ú ȣȯ¼ºÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ÀÚ¼¼ÇÑ °ÍÀºSection 10.5À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä.
ÀÌÇÏÀÇ"°£·«Çü" CASE½ÄÀº À§¿¡ ±â¼úÇÑ ÀÏ¹Ý Çü½ÄÀ¸·ÎºÎÅÍÀÇ Æ¯º°ÇÑ º¯ÇüÀÔ´Ï´Ù.
CASE
expression
WHEN
value
THEN
result
[WHEN ...]
[ELSE
result
]
END
expression
´Â µ¿ÀÏÇÑ °ÍÀÌ ¹ß°ßµÉ ¶§±îÁöWHEN±¸·Î ÁöÁ¤µÈ ¸ðµç
value
¿Í °è»êµÇ°í ºñ±³µË´Ï´Ù.
µ¿ÀÏÇÑ °ÍÀÌ ¹ß°ßµÇÁö ¾Ê´Â °æ¿ì,ELSE±¸ÀÇ
result
(ȤÀº NULL°ª)°¡ ¹ÝȯµË´Ï´Ù.
À̰ÍÀº C¾ð¾îÀÇswitch¹®°ú À¯»çÇÕ´Ï´Ù.
À§ÀÇ ¿¹´Â °£·«ÇüCASE±¸¹®À» »ç¿ëÇØ ´ÙÀ½°ú °°ÀÌ ¾µ ¼ö°¡ ÀÖ½À´Ï´Ù.
SELECT a,
CASE a WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
ELSE 'other'
END
FROM test;
a | case
---+-------
1 | one
2 | two
3 | other
CASE½ÄÀº, °á°ú¸¦ °áÁ¤Çϱâ À§Çؼ ÇÊ¿äÇÏÁö ¾Ê´Â ºÎ½ÄÀÇ °ªÀ» ±¸ÇÏÁö ¾Ê½À´Ï´Ù. ¿¹¸¦ µé¸é, ÀÌÇÏ´Â 0À¸·Î ³ª´©¾î ¿¡·¯°¡ ¹ß»ýÇÏ´Â °ÍÀ» ¹æÁöÇϱâ À§ÇÑ ¹æ¹ýÀÔ´Ï´Ù.
SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;
COALESCE(
value
[, ...])
COALESCEÇÔ¼ö´Â, NULLÀÌ ¾Æ´Ñ ÀÚ½ÅÀÇ ÃÖÃÊÀÇ Àμö¸¦ ¹ÝȯÇÕ´Ï´Ù.
¸ðµç Àμö°¡ NULLÀÎ °æ¿ì¿¡°Ô¸¸ NULLÀÌ ¹ÝȯµË´Ï´Ù. µ¥ÀÌÅ͸¦ Ç¥½ÃÀÇ ¸ñÀûÀ¸·Î ÃßÃâÇÒ ¶§, NULL°ª ´ë½Å¿¡ µðÆúÆ®°ªÀÌ »ç¿ëµË´Ï´Ù.
ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.
SELECT COALESCE(description, short_description, '(none)') ...
CASE½Ä °°ÀÌ,COALESCE´Â °á°ú¸¦ °áÁ¤Çϱâ À§Çؼ ÇÊ¿äÇÏÁö ¾ÊÀº ÀμöÀÇ °ªÀ» ±¸ÇÏÁö ¾Ê½À´Ï´Ù.
Áï, ºñNULL Àμö°¡ ¹ß°ßµÇ¸é, ±× ¿ìÃø¿¡ ÀÖ´Â Àμö´Â Æò°¡µÇÁö ¾Ê½À´Ï´Ù.
ÀÌ SQL Ç¥ÁØ ÇÔ¼ö´ÂNVL¹×IFNULL¿Í À¯»çÇÑ ±â´ÉÀ» Á¦°øÇÏ¿©, ´Ù¸¥ ¸î °³ÀÇ µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ¿¡¼ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù.
NULLIF(
value1
,
value2
)
NULLIFÇÔ¼ö´Â,
value1
¿Í
value2
°¡ µ¿ÀÏÇÑ °æ¿ì, NULL°ªÀ» ¹ÝȯÇÕ´Ï´Ù.
±× ¿ÜÀÇ °æ¿ì´Â
value1
¸¦ ¹ÝȯÇÕ´Ï´Ù.
À̰ÍÀ» »ç¿ëÇÏ¿©, »ó±âÀÇCOALESCEÀÇ ¿¹ÀÇ ¿ª¿¬»êÀ» ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
SELECT NULLIF(value, '(none)') ...
value1 °¡(none)¶ó¸é NULLÀ» ¹ÝȯÇÕ´Ï´Ù. ¾Æ´Ï¸é value1 ¸¦ ¹ÝȯÇÕ´Ï´Ù.
GREATEST(
value
[, ...])
LEAST(
value
[, ...])
GREATEST¿ÍLEASTÇÔ¼ö´Â ¸ðµç ¼ö½Ä¿¡¼ ÃÖ´ë°ª ȤÀº ÃÖ¼Ò°ªÀ» ¼±ÅÃÇÕ´Ï´Ù.
¼ö½ÄÀº, °á°úÀûÀ¸·Î ¾òÀ» ¼ö ÀÖ´Â µ¥ÀÌÅÍÀÇ ÇüÅÂ¿Í °øÅëÀÇ ÇüÅ·Πº¯È¯ÇÒ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù.
(ÀÚ¼¼ÇÑ °ÍÀºSection 10.5À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä).
¸®½ºÆ®¾ÈÀÇ NULL°ªÀº ¹«½ÃµË´Ï´Ù. ¸ðµç °ªÀÌ NULLÀ̶ó°í Æò°¡µÇ¾úÀ» °æ¿ì¿¡ ÇÑÇØ¼ °á°ú´Â NULLÀÌ µË´Ï´Ù.
GREATEST¹×LEAST´Â SQL Ç¥ÁØ¿¡ ÀÖÁö ¾Ê½À´Ï´Ù¸¸, °øÅëµÈ È®ÀåÀÔ´Ï´Ù.