SELECT

Name

SELECT -- Å×À̺í ȤÀº ºä·ÎºÎÅÍ ÇàÀ» °Ë»öÇÑ´Ù

Synopsis

SELECT [ ALL | DISTINCT [ ON ( 
expression
 [, ...] ) ] ]
    * | 
expression
 [ AS 
output_name
 ] [, ...]
    [ FROM 
from_item
 [, ...] ]
    [ WHERE 
condition
 ]
    [ GROUP BY 
expression
 [, ...] ]
    [ HAVING 
condition
 [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL ] 
select
 ]
    [ ORDER BY 
expression
 [ ASC | DESC | USING 
operator
 ] [, ...] ]
    [ LIMIT { 
count
 | ALL } ]
    [ OFFSET 
start
 ]
    [ FOR { UPDATE | SHARE } [ OF 
table_name
 [, ...] ] [ NOWAIT ] [...] ]
" -->
¿©±â¼­
from_item
´Â ÀÌÇÏ Áß Çϳª°¡ µÉ ¼ö ÀÖ½À´Ï´Ù.
" -->

    [ ONLY ] 
table_name
 [ * ] [ [ AS ] 
alias
 [ ( 
column_alias
 [, ...] ) ] ]
    ( 
select
 ) [ AS ] 
alias
 [ ( 
column_alias
 [, ...] ) ]
    
function_name
 ( [ 
argument
 [, ...] ] ) [ AS ] 
alias
 [ ( 
column_alias
 [, ...] | 
column_definition
 [, ...] ) ]
    
function_name
 ( [ 
argument
 [, ...] ] ) AS ( 
column_definition
 [, ...] )
    
from_item
 [ NATURAL ] 
join_type
 
from_item
 [ ON 
join_condition
 | USING ( 
join_column
 [, ...] ) ]

¼³¸í

SELECT´Â 0°³³ª ±× ÀÌ»óÀÇ Å×ÀÌºí¿¡¼­ ÇàÀ» °Ë»öÇÕ´Ï´Ù. SELECTÀÇ ÀϹÝÀûÀΠ󸮴 ÀÌÇÏ¿Í °°½À´Ï´Ù.

  1. FROM¸®½ºÆ®¿¡ ÀÖ´Â Àü¿ä¼Ò°¡ °è»êµË´Ï´Ù (FROM¸®½ºÆ®ÀÇ ¿ä¼Ò´Â ½ÇÁ¦³ª °¡»ó Å×À̺íÀÔ´Ï´Ù). FROM¸®½ºÆ®¿¡ º¹¼öÀÇ ¿ä¼Ò°¡ ÁöÁ¤µÇ¾úÀ» °æ¿ì, ±×°ÍµéÀº Å©·Î½º °áÇյ˴ϴ٠(¾Æ·¡ÀÇ FROM±¸ À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä).

  2. WHERE±¸°¡ ÁöÁ¤µÇ¾úÀ» °æ¿ì, Á¶°ÇÀ» ä¿ìÁö ¾Ê´Â ¸ðµç ÇàÀº Ãâ·Â¹°À¸·ÎºÎÅÍ Á¦°ÅµË´Ï´Ù (¾Æ·¡ÀÇ WHERE±¸ À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä).

  3. GROUP BY±¸°¡ ÁöÁ¤µÇ¾úÀ» °æ¿ì, 1°³ ¶Ç´Â ±× ÀÌ»óÀÇ °ªÀÌ Á¶°Ç¿¡ ¸Â´Â ÇàÀÇ ±×·ìÀ¸·Î ³ª´©¾î Ãâ·ÂµË´Ï´Ù. HAVING±¸°¡ ÁöÁ¤µÇ¾úÀ» °æ¿ì, ÁöÁ¤ÇÑ Á¶°ÇÀ» ä¿ìÁö ¾Ê´Â ±×·ìÀº Á¦°ÅµË´Ï´Ù (¾Æ·¡ÀÇ GROUP BY±¸ °ú HAVING±¸ ¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä).

  4. ½ÇÁ¦·Î´Â ¼±ÅÃµÈ °¢ Çà¿¡ ´ëÇØ¼­ SELECTÃâ·Â½ÄÀ» »ç¿ëÇØ °è»êÇÑ °á°úÀÇ ÇàÀÌ Ãâ·ÂµË´Ï´Ù (¾Æ·¡ÀÇ SELECT¸®½ºÆ® À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä).

  5. UNION,INTERSECT,EXCEPT¿¬»êÀÚ¸¦ »ç¿ëÇϸé, SELECTÀÇ ¸í·É¹®Àº 1°³ÀÇ °á°ú ÁýÇÕ Çü½Ä¿¡ °áÇÕÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. UNION¿¬»êÀÚ´Â ¾çÂÊ ¸ðµÎÀÇ °á°ú ÁýÇÕ¿¡ Á¸ÀçÇÏ´Â Çà°ú ´Ù¸¥ ÇÑÂÊÀÇ °á°ú ÁýÇÕ¿¡ Á¸ÀçÇÏ´Â ÇàÀ» ¸ðµÎ µ¹·ÁÁÝ´Ï´Ù. INTERSECT¿¬»êÀÚ´Â ¾çÂÊ ¸ðµÎÀÇ °á°ú ÁýÇÕ¿¡ Á¸ÀçÇÏ´Â ÇàÀ» µ¹·ÁÁÝ´Ï´Ù. EXCEPT¿¬»êÀÚ´Â ÃÖÃÊÀÇ °á°ú ÁýÇÕÀÇ ±× ÇàÀ» µ¹·ÁÁÝ´Ï´Ù. µÎ¹øÂ°ÀÇ °á°ú ÁýÇÕÀº ¾Æ´Õ´Ï´Ù. ÀÌ ¼¼°¡Áö °æ¿ì ¸ðµÎ Áߺ¹ÇÏ´Â ÇàÀº ALL°¡ ÁöÁ¤µÇÁö °Í°ú ´Þ¸® Á¦°ÅµË´Ï´Ù (ÈļúÀÇ UNION±¸ , INTERSECT±¸ , EXCEPT±¸ ¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä).

  6. ORDER BY±¸°¡ ÁöÁ¤µÇ¾úÀ» °æ¿ì, µ¹·ÁÁÖ¾îÁö´Â ÇàÀº ÁöÁ¤ÇÑ Â÷·Ê·Î Á¤·ÄµË´Ï´Ù. ORDER BY°¡ ÁöÁ¤µÇÁö ¾Ê´Â °æ¿ì´Â ½Ã½ºÅÛÀÌ °è»ê °úÁ¤¿¡¼­ ã¾Æ³½ Â÷·Ê·Î ÇàÀÌ µ¹·ÁÁÖ¾îÁý´Ï´Ù (ÈļúÀÇ ORDER BYÀý À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä).

  7. DISTINCT´Â °á°ú·ÎºÎÅÍ Áߺ¹ÇàÀ» ¾ø¾Û´Ï´Ù. DISTINCT ON´Â ÁöÁ¤ÇÑ ¸ðµç ½Ä¿¡ ÀÏÄ¡ÇÏ´Â ÇàÀ» ¾ø¾Û´Ï´Ù. ALL¿¡¼­´Â Áߺ¹Ç൵ Æ÷ÇÔÇØ ¸ðµç Èĺ¸ÇàÀ» µ¹·ÁÁÝ´Ï´Ù(À̰ÍÀÌ ±âº»°ªÀÔ´Ï´Ù. ÀÚ¼¼ÇϰԴÂ, ÈļúÀÇ °Í DISTINCT±¸ À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä).

  8. LIMITȤÀº OFFSET±¸°¡ ÁöÁ¤µÇ¾úÀ» °æ¿ì, SELECT¸í·É¹®Àº °á°úÇàÀÇ ÀϺκи¸À» µ¹·ÁÁÝ´Ï´Ù (ÀÚ¼¼ÇϰԴÂ, ÈļúÀÇ °Í LIMIT±¸ À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä).

  9. FOR UPDATE¶Ç´Â FOR SHARE±¸¸¦ ÁöÁ¤Çϸé, SELECT¸í·É¹®Àº ÇöÀçÀÇ ¾÷µ¥ÀÌÆ®ÀÇ ´ëÇ×ÇØ ¼±ÅÃÀû ÇàÀ» Àá±Þ´Ï´Ù (ÀÚ¼¼ÇϰԴÂ, ÈļúÀÇ °Í FOR UPDATE/FOR SHARE±¸ À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä).

Å×ÀÌºí¿¡¼­ °ªÀ» Àо·Á¸éSELECT±ÇÇÑÀÌ ÇÊ¿äÇÕ´Ï´Ù. FOR UPDATE¶Ç´Â FOR SHARE¸¦ »ç¿ëÇÏ·Á¸é , °Ô´Ù°¡UPDATE±ÇÇÑÀÌ ÇÊ¿äÇÕ´Ï´Ù.

¸Å°³º¯¼ö

FROM±¸

FROM±¸¿¡´Â SELECTÀÇ ´ë»óÀÌ µÇ´Â ¼Ò½º Å×À̺íÀ» 1°³³ª ±× ÀÌ»ó ÁöÁ¤ÇÕ´Ï´Ù. ¸¸¾à º¹¼öÀÇ ¼Ò½º°¡ ÁöÁ¤µÇ¾úÀ» °æ¿ì, °á°ú´Â ¸ðµç ¼Ò½ºÀÇ Á÷Àû(Å©·Î½º °áÇÕ)ÀÌ µË´Ï´Ù. ±×·¯³ª, Åë»óÀº Á¦¾à Á¶°ÇÀº µ¥Ä«¸£Æ®(Cartesian) Á¦Ç°ÀÇ ¸Å¿ì ÀϺθ¦ µ¹·ÁÁÖµµ·Ï °á°úÇàÀ» ÇÑÁ¤ÇÕ´Ï´Ù.

FROM±¸¿¡´Â ÀÌÇÏÀÇ ¿ä¼Ò¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

table_name

±âÁ¸ÀÇ Å×À̺í ȤÀº ºäÀÇ À̸§ÀÔ´Ï´Ù(schema ¼ö½Ä¸íµµ °¡´É). ONLY°¡ ÁöÁ¤µÇ¾úÀ» °æ¿ì, ±× Å×ÀÌºí¸¸ÀÌ ½ºÄµ µË´Ï´Ù. ONLY°¡ ÁöÁ¤µÇÁö ¾Ê´Â °æ¿ì, Å×À̺í°ú(Á¸ÀçÇϸé) ±×°ÍÀ» »ó¼ÓÇÏ´Â ¸ðµç Å×À̺íÀÌ ½ºÄµ µË´Ï´Ù. ÀÚ¼Õ Å×À̺íÀÇ ½ºÄµÀº Å×À̺í¸í¿¡*¸¦ ºÙÀÎ Çü½Ä¿¡¼­ ÁöÁ¤ÇÒ ¼öµµ ÀÖÁö¸¸, ÇöÀçÀÇ ¹öÁ¯¿¡¼­´Â ±âº»°ªÀ¸·Î ÇàÇØÁý´Ï´Ù (7.1º¸´Ù ÀüÀÇ ¸±¸®½º¿¡¼­´ÂONLY°¡ ±âº»°ªÀÌ ¿´½À´Ï´Ù). ±âº»°ªÀÇ ÇൿÀ» º¯°æÇÏ·Á¸ésql_inheritance¼³Á¤ ¿É¼ÇÀ» º¯°æÇÕ´Ï´Ù.

alias

º°¸íÀ» Æ÷ÇÔÇÑFROM¾ÆÀÌÅÛÀÇ ´ëü¸íÀÔ´Ï´Ù. º°¸íÀº ÁöÁ¤À» °£°áÇÏ°Ô Çϱâ À§ÇÑ È¤Àº Àڱ⠰áÇÕ(°°Àº Å×À̺íÀ» ¿©·¯ Â÷·Ê ½ºÄµ ÇÏ´Â °áÇÕ)ÀÇ ¾Ö¸ÅÇÔÀ» ¾ø¾Ö±â À§Çؼ­ »ç¿ëµË´Ï´Ù. º°¸íÀÌ ÁöÁ¤µÇ°í ÀÖ´Â °æ¿ì´Â ±× º°¸í¿¡ ÀÇÇØ ½ÇÁ¦ÀÇ Å×À̺í¸í ¶Ç´Â ÇÔ¼ö¸íÀÌ ¿ÏÀüÇÏ°Ô ¼û°ÜÁý´Ï´Ù. ¿¹¸¦ µé¸é FROM foo AS f¿Í ÁöÁ¤µÇ°í ÀÖ´Â °æ¿ì, ÀÌÈÄÀÇSELECT¹®¿¡¼­´Â ÀÌFROM¾ÆÀÌÅÛÀ»foo´Â ¾Æ´Ï°í f·Î¼­ ÂüÁ¶ÇØ¾ß ÇÕ´Ï´Ù. Å×À̺íÀÇ º°¸íÀÌ ÀÖÀ¸¸é ±× Å×À̺íÀÇ ÇѰ³³ª ±× ÀÌ»óÀÇ ¿­ À̸§À» ¿Å°Ü³õ´Â ¿­ÀÇ º°¸í ¸®½ºÆ®¸¦ ±â¼úÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

select

FROM±¸¿¡¼­´Â ºÎSELECT¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. SELECT¸í·ÉÀÇ ½ÇÇàÁß, ºÎSELECTÀÇ Ãâ·ÂÀº ÀϽà Å×À̺íÀÎ°Í °°ÀÌ µ¿ÀÛÇÕ´Ï´Ù. ºÎSELECT´Â °ýÈ£·Î µÑ·¯½ÎÀÌÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ¶Ç, ¹Ýµå½Ã º°¸íÀ» ÁÖ¾îÁ®¾ß ÇÕ´Ï´Ù. VALUES ¸í·ÉÀ» ¿©±â¼­ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

function_name

FROM±¸¿¡¼­´Â ÇÔ¼ö È£ÃâÀ» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. (À̰ÍÀº ƯÈ÷ ÇÔ¼ö°¡ °á°ú ¼¼Æ®¸¦ µ¹·ÁÁÖ´Â °æ¿ì¿¡ À¯¿ëÇÏÁö¸¸, ÀÓÀÇÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù) SELECT¸í·ÉÀÇ ½ÇÇàÁßÀÇ ÀÓ½ÃÀÇ Å×À̺í·Î¼­ »ý¼ºÇÕ´Ï´Ù. ¶Ç, º°¸íÀ» »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. º°¸íÀÌ ÁöÁ¤µÇ°í ÀÖÀ¸¸é, ¿­ÀÇ º°¸í ¸®½ºÆ®´Â ÇÔ¼öÀÇ º¹ÇÕÇüÀÇ ¹Ýȯ°ªÀÇ ¼Ó¼º¿¡ ´ëÇÑ Çϳª³ª ±× ÀÌ»óÀÇ ´ëü¸íÀ» Á¦°øÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÇÔ¼ö°¡recordµ¥ÀÌÅÍ Å¸ÀÔÀ» µ¹·ÁÁشٰí Á¤Àǵǰí ÀÖ´Â °æ¿ì´Â º°¸í ÁïASŰ¿öµå¿Í °Å±â¿¡ °è¼ÓµÈ´Ù( column_name data_type [, ... ])(ÀÌ)¶ó°í ÇÏ´Â Çü½ÄÀÇ ¿­ Á¤ÀÇ ¸®½ºÆ®°¡ ÇÊ¿äÇÕ´Ï´Ù. ¿­ Á¤ÀÇ ¸®½ºÆ®´Â ÇÔ¼ö¿¡ ÀÇÇØ µ¹·ÁÁÖ¾îÁö´Â ½ÇÁ¦ÀÇ ¿­ÀÇ ¼ö ¹× µ¥ÀÌÅÍÇü¿¡ ÀÏÄ¡ÇØ¾ß ÇÕ´Ï´Ù.

join_type

ÀÇ Çϳª

  • [ INNER ] JOIN

  • LEFT [ OUTER ] JOIN

  • RIGHT [ OUTER ] JOIN

  • FULL [ OUTER ] JOIN

  • CROSS JOIN

INNER ¿Í OUTER°áÇÕÇü¿¡¼­´Â, °áÇÕ Á¶°Ç, Áï, NATURAL, ON join_condition ,USING ( join_column [, ...])ÀÇ ¾î´ÀÂÊÀ̵ç 1°³¸¸À» ÁöÁ¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. °¢°¢ÀÇ Àǹ̴ Èļú ÇÕ´Ï´Ù. CROSS JOIN¿¡¼­´Â ÀÌ·¯ÇÑ ±¸¸¦ ±â¼úÇÏÁö ¾Ê¾Æµµ »ó°üÇÏÁö ¾Ê½À´Ï´Ù.

JOIN±¸´Â 2°³ÀÇFROM¾ÆÀÌÅÛÀ» ¿¬°á½Ãŵ´Ï´Ù. nestingÀÇ Â÷·Ê¸¦ °áÁ¤Çϱâ À§Çؼ­ ÇÊ¿äÇÏ¸é °ýÈ£¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä. °ýÈ£°¡ ¾øÀ¸¸éJOIN´Â ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊ¿¡ nest·Î ÇÕ´Ï´Ù. ¾î¶°ÇÑ °æ¿ì¿¡¼­µµJOIN´Â Äĸ¶·Î ³ª´­ ¼ö ÀÖ¾ú´øFROMÇ׸ñº¸´Ù °­ÇÑ °ü°è¸¦ °¡Áý´Ï´Ù.

CROSS JOIN¿ÍINNER JOIN´Â À̰ÍÀº,FROMÀÇ Ãֻ󷹺§·Î 2°³ÀÇ Ç׸ñÀ» °áÇÕÇÑ °á°ú¿Í °°Àº Cartesian Á¦Ç°À» »ý¼ºÇÕ´Ï´Ù. ±×·¯³ª (ÁöÁ¤Çϸé) °áÇÕ Á¶°Ç¿¡ ÀÇÇØ Á¦ÇÑÀ» °ÉÄ¥ ¼ö°¡ ÀÖ½À´Ï´Ù. CROSS JOIN´Â INNER JOIN ON (true)¿Í µ¿µîÇϸç Á¶°Ç¿¡ ÀÇÇØ »èÁ¦µÇ´Â ÇàÀº ¾ø½À´Ï´Ù. ÀÌ·¯ÇÑ °áÇÕŸÀÔÀº ±â¼ú»óÀÇ ÆíÀǸ¦ À§Çؼ­¸¸ ÁغñµÇ¾î ÀÖ½À´Ï´Ù. µû¶ó¼­, Åë»óÀÇFROM¿Í WHERE¸¦ ½ÇÇàÇÏÁö ¾ÊÀ¸¸é ¾Æ¹«°Íµµ ½Ç½ÃÇÏÁö ¾Ê½À´Ï´Ù.

LEFT OUTER JOIN´Â Cartesian product Á¶°Ç(Áï, ±× °áÇÕ Á¶°ÇÀ» ä¿ì´Â ¸ðµç Á¶ÇÕ)¿¡ ¸Â´Â ¸ðµç ÇàÀ» µ¹·ÁÁÖ°í ¿ìÃø Å×ÀÌºí¿¡´Â °áÇÕ Á¶°ÇÀ» ä¿ì´Â ÇàÀÌ Á¸ÀçÇÏÁö ¾Ê¾Ò´ø ÁÂÃø Å×À̺í Áß¿¡¼­ ÇàÀÇ º¹»çµµ µ¹·ÁÁÝ´Ï´Ù. ÀÌ ÁÂÃø Å×À̺íÀÇ ÇàÀº ¿ìÃø Å×À̺íÀÌ µé¾î°¡´Â ¿­¿¡´Â NULLÄ¡°¡ »ðÀԵǴ °Í¿¡ ÀÇÇØ °áÇÕµÈ Å×À̺íÀÇ ÆúÀÌ È®ÀåµÇ¾î Áý´Ï´Ù. ÇàÀÌ ¸ÅÄ¡µÇ´Â °áÁ¤À» ÇÏ´Â µ¿¾È JOIN±¸ÀÇ ¼ÒÀ¯ Á¶°Ç¸¸ÀÌ °í·ÁµÇ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. ´Ù¸¥ ¿ÜºÎ °áÇÕ Á¶°ÇÀº ´ÙÀ½¿¡ Àû¿ëµË´Ï´Ù.

¹Ý´ë·ÎRIGHT OUTER JOIN´Â ¸ðµç °áÇÕÇà°ú ÁÂÃø Å×ÀÌºí¿¡ µé¾î¸Â´Â °ÍÀÌ ¾ø¾ú´ø ¿ìÃøÀÇ Çà(ÁÂÃøÀº NULL·Î È®ÀåµÇ°í ÀÖ½À´Ï´Ù)ÀÇ 1Ç྿À» µ¹·ÁÁÝ´Ï´Ù. Á¿ìÀÇ Å×À̺íÀ» ¹Ù²ã ³ÖÀ¸¹Ç·Î LEFT OUTER JOIN·Î º¯È¯ÇÒ ¼ö ÀÖÀ¸¹Ç·Î, RIGHT OUTER JOIN´Â ±â¼ú»óÀÇ ÆíÀǸ¦ ²ÒÇϱâ À§ÇØ ÁغñµÇ¾î Àִ¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù.

FULL OUTER JOIN´Â, ¸ðµç °áÇÕÇà¿¡ °¡¼¼ÇØ ÀÏÄ¡ÇÏÁö ¾Ê¾Ò´ø ÁÂÃøÀÇ Çà(¿ìÃøÀº NULL·Î È®Àå), ÀÏÄ¡ÇÏÁö ¾Ê¾Ò´ø ¿ìÃøÀÇ Çà(ÁÂÃøÀº NULL·Î È®Àå)À» ¸ðµÎ µ¹·ÁÁÝ´Ï´Ù.

ON join_condition

join_condition ´Â °áÇÕ¿¡ ´ëÇØ ¾î´À ÇàÀÌ ÀÏÄ¡ÇÏ´ÂÁö¸¦ ÁöÁ¤ÇÏ´Â booleanÇüÀÇ °ªÀ» µ¹·ÁÁÖ´Â ½ÄÀÔ´Ï´Ù(WHERE±¸¿¡ À¯»çÇϰí ÀÖ½À´Ï´Ù).

USING ( join_column [, ...])

USING ( a, b, ... )±¸´ÂON left_table.a = right_table.a AND left_table.b = right_table.b ...ÀÇ »ý·«ÇüÀÔ´Ï´Ù. USING´Â µî°¡ÀÎ ¿­ÀÇ ¾çÂÊ ¸ðµÎ´Â ¾Æ´Ï°í ´Ù¸¥ ÇÑÂʸ¸ÀÌ °áÇÕÀÇ Ãâ·Â¿¡ Æ÷ÇԵǴ °ÍÀ» ÀǹÌÇÕ´Ï´Ù.

NATURAL

NATURAL´Â 2°³ÀÇ Å×ÀÌºí³»ÀÇ °°Àº À̸§À» °¡Áö´Â ÇàÀ» ¸ðµÎ ÁöÁ¤ÇÑUSING¸®½ºÆ®ÀÇ »ý·«ÇüÀÔ´Ï´Ù.

WHERE±¸

WHERE 
condition

condition ´Â Æò°¡ÀÇ °á°ú·Î¼­booleanÇüÀ» µ¹·ÁÁÖ´Â ÀÓÀÇÀÇ ½ÄÀÔ´Ï´Ù. ÀÌ Á¶°ÇÀ» ä¿ìÁö ¾Ê´Â ÇàÀº ¸ðµÎ Ãâ·ÂÀ¸·ÎºÎÅÍ Á¦°ÅµË´Ï´Ù. ¸ðµç º¯¼ö¿¡ ½ÇÁ¦ÀÇ ÇàÀÇ °ªÀ» ´ëÀÔÇØ ½ÄÀÌ true°¡ ¸®ÅϵǴ °æ¿ì, ±× ÇàÀº Á¶°ÇÀ» ä¿î´Ù°í º¸ÀÔ´Ï´Ù.

GROUP BY±¸

GROUP BY±¸´Â º¸Åë ÀÌÇÏÀÇ Çü½ÄÀÌ µË´Ï´Ù(ÀÌ ±¸´Â »ý·« °¡´ÉÇÕ´Ï´Ù).

GROUP BY 
expression
 [, ...]

GROUP BY´Â ±×·ìÈ­¸¦ À§Çؼ­ ÁÖ¾îÁø ½ÄÀ» Æò°¡ÇØ, °á°ú°¡ °°Àº °ªÀÌ µÈ ÇàÀ» 1°³ÀÇ ÇàÀ¸·Î Á¤¸®ÇÏ´Â ±â´ÉÀ» °¡Áý´Ï´Ù. expression ¿¡´Â ÀԷ¿­ÀÇ À̸§, Ãâ·Â¿­ (SELECT¸®½ºÆ® Ç׸ñ)ÀÇ À̸§/¼­¼ö ȤÀº ÀԷ¿­ÀÇ °ªÀ» °è»êÇÏ´Â ÀÓÀÇÀÇ ½ÄÀ» ÃëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÆÇ´ÜÀÌ ¼­Áö ¾ÊÀ» ¶§´Â GROUP BYÀÇ À̸§Àº Ãâ·Â·Ä¸íÀº ¾Æ´Ï°í ÀԷ·ĸíÀ¸·Î¼­ ÇØ¼®µË´Ï´Ù.

Áý¾à ÇÔ¼ö°¡ »ç¿ëµÇ¾úÀ» °æ¿ì, °¢ ±×·ì³»ÀÇ ¸ðµç ÇàÀ» ´ë»óÀ¸·Î °è»êÀ» ÇØ °á°úÀûÀ¸·Î ±×·ì¸¶´ÙÀÇ °ªÀÌ »ý¼ºµË´Ï´Ù (ÇÑÆíGROUP BY°¡ ¾øÀ¸¸é, Áý¾à ÇÔ¼ö´Â ¼±ÅÃµÈ ¸ðµç ÇàÀ» ´ë»óÀ¸·Î °è»êÀ» ½Ç½ÃÇØ, 1°³ÀÇ °ªÀ» »ý¼ºÇÕ´Ï´Ù). GROUP BY°¡ Á¸ÀçÇÏ´Â °æ¿ì, Áý¾à ÇÔ¼ö ³»ºÎ Àܷ̿Î, ±×·ìÈ­µÇ¾î ÀÖÁö ¾ÊÀº ¿­À» ÂüÁ¶ÇÏ´ÂSELECT¸®½ºÆ®´Â ¹«È¿°¡ µË´Ï´Ù. ±×·ìÈ­µÇ¾î ÀÖÁö ¾ÊÀº ¿­¿¡ ´ëÇØ µ¹·ÁÁÖ¾îÁö´Â °ªÀº º¹¼öÀÇ °ªÀÌ µÇ¾î ¹ö¸± °¡´É¼ºÀÌ Àֱ⠶§¹®ÀÔ´Ï´Ù.

HAVING±¸

HAVING´Â Åë»ó ÀÌÇÏÀÇ ÇüŰ¡ µË´Ï´Ù(ÀÌ ±¸´Â »ý·« °¡´ÉÇÕ´Ï´Ù).

HAVING 
condition

condition ´ÂWHERE±¸·Î ÁöÁ¤ÇÏ´Â °Í °Í°ú °°½À´Ï´Ù.

HAVING´Â ±×·ìÈ­ µÈ Çà Áß¿¡¼­ Á¶°ÇÀ» ä¿ìÁö ¾Ê´Â ÇàÀ» ¾ø¾Ö´Â ±â´ÉÀ» °¡Áý´Ï´Ù. HAVING¿Í WHERE´Â ´ÙÀ½ÀÇ Á¡ÀÌ ´Ù¸¨´Ï´Ù. WHERE´Â GROUP BYÀÇ Àû¿ëÀü¿¡ °³°³ÀÇ Çà¿¡ ´ëÇØ¼­ ÇÊÅ͸¦ °Å´Âµ¥ ¹ÝÇØ HAVING´Â GROUP BYÀÇ Àû¿ë ÈÄ¿¡ »ý¼ºµÈ ±×·ìÈ­ µÈ Çà¿¡ ´ëÇØ¼­ ÇÊÅ͸¦ °ÉĨ´Ï´Ù. condition ³»¿¡¼­ »ç¿ëÇÏ´Â ¿­Àº Áý¾à ÇÔ¼ö³»¿¡¼­ »ç¿ëµÈ °ÍÀ» Á¦¿ÜÇØ, ±×·ìÈ­ µÈ ¿­À» ÀÏÀÇ¿¡ ÂüÁ¶ÇØ¾ß ÇÕ´Ï´Ù.

HAVING±¸°¡ ÀÖÀ¸¸é,GROUP BY±¸°¡ ¾ø¾ú´Ù°í ÇØµµ ¹®ÀÇ´Â ±×·ìÈ­ µÈ ¹®Àǰ¡ µË´Ï´Ù. GROUP BY±¸¸¦ °¡ÁöÁö ¾Ê´Â ¹®Àǰ¡ Áý¾à ÇÔ¼ö¸¦ Æ÷ÇÔÇÑ °æ¿ìµµ °°½À´Ï´Ù. ¼±ÅÃµÈ ÇàÀº ¸ðµÎ, 1°³ÀÇ ±×·ìÀ» Çü¼ºÇÏ´Â °ÍÀ¸·Î °£ÁÖÇØÁý´Ï´Ù. ¶Ç,SELECT¸®½ºÆ®¿ÍHAVING±¸¿¡¼­´Â Áý¾à ÇÔ¼ö°¡ Ãâ·ÂÇÏ´Â Å×ÀÌºí¿­ ¿¡¼­¸¸ ÂüÁ¶ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ Äõ¸®¿¡¼­´Â HAVING°¡ trueÀÎ °æ¿ì¿¡´Â ´ÜÀÏÀÇ ÇàÀ», true°¡ ¾Æ´Ñ °æ¿ì´Â 0ÇàÀ» Ãâ·ÂÇÕ´Ï´Ù.

SELECT¸®½ºÆ®

SELECT¸®½ºÆ®(SELECT¿ÍFROMÀÇ »çÀÌ¿¡ Àִ Ű¿öµå)´Â SELECT¸í·É¹®ÀÇ Ãâ·ÂÇàÀ» Çü¼ºÇÏ´Â ½ÄÀ» ÁöÁ¤ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ ½Ä¿¡¼­´Â,FROM±¸·Î ó¸® ÈÄÀÇ ¿­À» ÂüÁ¶ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù(Åë»óÀº ½ÇÁ¦·Î ÂüÁ¶ÇÕ´Ï´Ù). AS output_name ¸¦ »ç¿ëÇϸé, Ãâ·Â¿­¿¡ ÀüÀÇ À̸§°ú´Â ´Ù¸¥ À̸§À» ºÙÀÏ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌ À̸§Àº ÁַΠǥ½Ã¿ëÀÇ ¿­ ¶óº§·Î ÇØ¼­ »ç¿ëµË´Ï´Ù. ¶Ç,ORDER BY±¸¿Í GROUP BY±¸³»¿¡¼­ ¿­ÀÇ °ªÀ» ÂüÁ¶µÉ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª,WHERE³ª HAVING±¸¿¡¼­´Â »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. À̰͵鿡¼­´Â ½ÄÀ» ¾²Áö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

ÇÑ ½Ä ´ë½Å¿¡ *´Â ¼±ÅÃµÈ ÇàÀÇ ¸ðµç ¿­À» ³ªÅ¸³»´Â »ý·«ÇüÀ¸·Î¼­ Ãâ·Â ¸®½ºÆ®¿¡¼­ ¾µ ¼ö°¡ ÀÖ½À´Ï´Ù. ¶Ç, ±× Å×ÀÌºí¿¡ À¯·¡ÇÏ´Â ¿­¸¸À» ³ªÅ¸³»´Â »ý·«ÇüÀ¸·Î¼­ table_name . *(ÀÌ)¶ó°í ¾µ ¼öµµ ÀÖ½À´Ï´Ù.

UNION±¸

UNION´Â Åë»ó ÀÌÇÏÀÇ Çü½ÄÀÌ µË´Ï´Ù.


select_statement
 UNION [ ALL ] 
select_statement

select_statement ´Â ORDER BY,LIMIT, FOR UPDATE,FOR SHARE±¸ ¾øÀÌ ÀÓÀÇÀÇSELECT¹®ÀÌ µé¾î°©´Ï´Ù (ORDER BY¿Í LIMIT´Â °ýÈ£·Î µÑ·¯½Î¸é ¼­ºê½ÄÀ¸·Î¼­ ºÎ¿©ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. °ýÈ£°¡ ¾ø´Â °æ¿ì, ÀÌ·¯ÇÑ ±¸´Â ¿ìÃøÀ¸·Î ³õ¿©Áø ÀԷ½ÄÀº ¾Æ´Ï°í,UNIONÀÇ °á°ú¿¡ ´ëÇØ¼­ Àû¿ëµÇ¾î ¹ö¸³´Ï´Ù).

UNION¿¬»êÀÚ´Â SELECT¸í·É¹®ÀÌ µ¹·ÁÁÖ´Â ÇàÀÇ union ¼¼Æ®¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ÀÌ union ¼¼Æ®¿¡´Â, 2°³ÀÇSELECT¹®ÀÇ °á°ú ÁýÇÕÀÇ ¾î´ÀÂÊÀ̵ç(¶Ç´Â ¾çÂÊ ¸ðµÎ)¿¡ Á¸ÀçÇÏ´Â ÇàÀÌ ¸ðµÎ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. UNIONÀÇ Á÷Á¢ÀûÀÎ ¿¬»ê¼ö°¡ µÇ´ÂSELECT¸í·É¹®³¢¸®°¡ µ¹·ÁÁÖ´Â ·Ä¼ö´Â °°Áö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ±×¸®°í ´ëÀÀÇÏ´Â ¿­ÀÇ µ¥ÀÌÅÍÇüÀº ȣȯ°¡´ÉÇÑ µ¥ÀÌÅÍ Å¸ÀÔÀÌ Á¸ÀçÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

ALL¿É¼ÇÀÌ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀº ÇÑ,UNIONÀÇ °á°ú¿¡´Â Áߺ¹ÇàÀº Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. ALL¸¦ ÁöÁ¤ÇÏ´Â °÷°ú °°Àº Áߺ¹ Á¦°Å¸¦ ÇÏÁö ¾Ê½À´Ï´Ù (±×·¯¹Ç·Î, Åë»óUNION ALL´ÂUNIONº¸´Ù ²Ï °í¼Ó »ó´çÈ÷ °í¼ÓÀÔ´Ï´Ù. °¡´ÉÇÑ ÇÑALL¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä).

°°Àº SELECT¸í·É¹®¿¡ º¹¼öÀÇUNION¿¬»êÀÚ°¡ ÀÖ´Â °æ¿ì, °ýÈ£°¡ ¾ø´Â ÇÑ, ±×°ÍµéÀº ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î Æò°¡µË´Ï´Ù.

Çö½ÃÁ¡¿¡¼­´Â FOR UPDATE and FOR SHARE´Â UNIONÀÇ °á°ú³ªUNION¿¡ ´ëÇÑ ÀÔ·ÂÀ» ÁöÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù.

INTERSECT±¸

INTERSECT´Â Åë»ó ÀÌÇÏÀÇ Çü½ÄÀÌ µË´Ï´Ù.


select_statement
 INTERSECT [ ALL ] 
select_statement

select_statement ¿¡´Â ORDER BY,LIMIT,FOR UPDATE, FOR SHARE±¸¸¦ °¡ÁöÁö ¾Ê´Â ÀÓÀÇÀÇSELECT ¸í·É¹®ÀÌ µé¾î°©´Ï´Ù.

INTERSECT´Â 2°³ÀÇSELECT¸í·É¹®ÀÌ µ¹·ÁÁÖ´Â ÇàÀÇ ±³Â÷ ¼¼Æ®À» °è»êÇÕ´Ï´Ù. °á°ú ÁýÇÕÀÇ ¾çÂÊ ¸ðµÎ¿¡ Á¸ÀçÇÑ´Ù¸é 2°³ÀÇSELECT¸í·É¹®ÀÇ ÇàÀÔ´Ï´Ù.

ALL¿É¼ÇÀ» ÁöÁ¤ÇÏÁö ¾Ê´Â ÇÑINTERSECTÀÇ °á°ú¿¡ Áߺ¹ÇàÀº Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. ALL°¡ ÁöÁ¤µÇ¾úÀ» °æ¿ì, ÁÂÃø Å×ÀÌºí¿¡ m °³, ¿ìÃø Å×ÀÌºí¿¡ n °³ÀÇ Áߺ¹ÀÌ ÀÖ´Â ÇàÀº, °á°ú ÁýÇÕ¿¡¼­´Â min( m , n ) °³ÃâÇöÇÕ´Ï´Ù.

°°Àº SELECT¹®¿¡ º¹¼öÀÇINTERSECT¿¬»êÀÚ°¡ ÀÖ´Â °æ¿ì, °ýÈ£°¡ ¾ø´Â ÇÑ, ±×°ÍµéÀº ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î Æò°¡µË´Ï´Ù. INTERSECT´Â UNIONº¸´Ù °­ÇÑ °ü°è¸¦ °¡Áý´Ï´Ù. Áï, A UNION B INTERSECT C ´ÂA UNION (B INTERSECT C)¶ó°í ÇØ¼®µË´Ï´Ù.

Çö½ÃÁ¡¿¡¼­´ÂINTERSECTÀÇ °á°ú³ªINTERSECT¿¡ ´ëÇÑ ÀԷ¿¡ FOR UPDATE¿Í FOR SHARE¸¦ ÁöÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù.

EXCEPT±¸

EXCEPT´Â Åë»ó ÀÌÇÏÀÇ Çü½ÄÀÌ µË´Ï´Ù.


select_statement
 EXCEPT [ ALL ] 
select_statement

select_statement ´Â ORDER BY,LIMIT,FOR UPDATE, FOR SHARE±¸¸¦ °¡ÁöÁö ¾Ê´Â, ÀÓÀÇÀÇSELECT ¹®ÀÌ µé¾î°©´Ï´Ù.

EXCEPT´Â ÁÂÃøÀÇSELECT¹®ÀÇ °á°ú¿¡´Â Á¸ÀçÇØ, ¿ìÃøÀÇSELECT¹®ÀÇ °á°ú¿¡´Â Á¸Àç ÇÏÁö ¾Ê´Â ÇàÀÇ ÁýÇÕÀ» »ý¼ºÇÕ´Ï´Ù.

ALL¿É¼ÇÀÌ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀº ÇÑ EXCEPTÀÇ °á°ú¿¡´Â Áߺ¹ÇàÀº Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù. ALL°¡ ÀÖ´Â °æ¿ì, ÁÂÃø Å×ÀÌºí¿¡ m °³, ¿ìÃø Å×ÀÌºí¿¡ n °³ÀÇ Áߺ¹ÀÌ ÀÖ´Â ÇàÀº, °á°ú ÁýÇÕ¿¡¼­´Â max( m - n , 0) °³ÃâÇöÇÕ´Ï´Ù.

°°Àº SELECT¸í·É¹®¿¡ º¹¼öÀÇEXCEPT ¿¬»êÀÚ°¡ ÀÖ´Â °æ¿ì, °ýÈ£°¡ ¾ø´Â ÇÑ, ±×°ÍµéÀº ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î Æò°¡µË´Ï´Ù. EXCEPTÀÇ °ü°èÀÇ °­ÇÔÀºUNION¿Í °°½À´Ï´Ù.

Çö½ÃÁ¡¿¡¼­´Â EXCEPTÀÇ °á°ú³ªEXCEPT¿¡ ´ëÇÑ ÀԷ¿¡ FOR UPDATE¶Ç´ÂFOR SHARE¸¦ ÁöÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù.

ORDER BYÀý

ORDER BY±¸´Â Åë»ó ÀÌÇÏÀÇ Çü½ÄÀÌ µË´Ï´Ù(ÀÌ ±¸´Â »ý·« °¡´ÉÇÕ´Ï´Ù).

ORDER BY 
expression
 [ ASC | DESC | USING 
operator
 ] [, ...]

expression ¿¡´Â Ãâ·Â¿­(SELECT¸®½ºÆ® Ç׸ñ)ÀÇ À̸§ ¶Ç´Â ¼­¼ö, ȤÀº ÀԷ¿­ °ªÀ¸·ÎºÎÅÍ Çü¼ºµÇ´Â ÀÓÀÇÀÇ ½ÄÀ» ÃëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

ORDER BY±¸¸¦ »ç¿ëÇÏ¸é °á°úÇàÀ» ÁöÁ¤ÇÑ ½Ä(º¹¼ö°¡´É)¿¡ µû¶ó Á¤·ÄÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. °¡Àå ÁÂÃøÀÇ ½ÄÀ» »ç¿ëÇØ ºñ±³ÇÑ °á°ú, 2°³ÀÇ ÇàÀÌ µ¿ÀÏÇÏ´Ù°í ÆÇ´ÜµÇ¾úÀ» °æ¿ì´Â, 1°³ ¿ìÃøÀÇ ½ÄÀ» »ç¿ëÇØ ºñ±³ÇÕ´Ï´Ù. ±× °á°úµµ µ¿ÀÏÇϸé, ÇÑÃþ ´õ ´ÙÀ½ÀÇ ½Ä¿¡ ÁøÇàµË´Ï´Ù. ÁöÁ¤ÇÑ ¸ðµç ½Ä¿¡¼­ µ¿ÀÏÇÏ´Ù°í ÆÇ´ÜµÇ¾úÀ» °æ¿ì´Â, ½ÇÇà¿¡ ÀÇÁ¸ÇÑ Â÷·Ê·Î µ¹·ÁÁÖ¾îÁý´Ï´Ù.

¼­¼ö´Â, °á°ú¿­ÀÇ À§Ä¡(¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù)¸¦ ³ªÅ¸³À´Ï´Ù. À̰ÍÀ» »ç¿ëÇϸé À¯ÀϹ«ÀÇÇÑ À̸§À» °¡ÁöÁö ¾Ê´Â ¿­ÀÇ ¼ø¼­¸¦ Á¤ÀÇÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. AS±¸¸¦ »ç¿ëÇÏ¸é °á°ú¿­¿¡ À̸§À» ÇÒ´çÇÒ ¼ö°¡ ÀÖÀ¸¹Ç·Î, À̰ÍÀº ¾Æ¹«·¡µµ ÇÊ¿äÇÑ ±â´ÉÀ̶ó°í ÇÏ´Â °ÍÀº ¾Æ´Õ´Ï´Ù.

¶Ç,ORDER BY±¸¿¡´Â SELECT°á°ú ¸®½ºÆ®¿¡ ÃâÇöÇÏÁö ¾Ê´Â ¿­À» Æ÷ÇÔÇÑ, ÀÓÀÇÀÇ ½ÄÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼­, ÀÌÇÏÀÇ ¹®ÀåÀº À¯È¿ÇÕ´Ï´Ù.

SELECT name FROM distributors ORDER BY code;

´Ù¸¸,UNION,INTERSECT,EXCEPTÀÇ °á°ú¿¡ORDER BY¸¦ Àû¿ëÇÏ´Â °æ¿ì´Â, ½ÄÀº »ç¿ëÇÏÁö ¸øÇϰí, Ãâ·Â¿­ÀÇ À̸§À̳ª ¼­¼ö¸¸À» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù°í ÇÏ´Â Á¦ÇÑÀÌ ÀÖ½À´Ï´Ù.

ORDER BYÀÇ ½ÄÀ¸·Î¼­ °á°ú ¿­ À̸§°ú ÀԷ¿­ À̸§ÀÇ ¾çÂÊ ¸ðµÎ¿¡ ÀÏÄ¡ÇÏ´Â ´Ü¼øÇÑ À̸§ÀÌ ÁÖ¾îÁ³À» °æ¿ì, ORDER BY´Â ±×°ÍÀ» °á°ú¿­ À̸§À¸·Î¼­ Ãë±ÞÇÕ´Ï´Ù. À̰ÍÀº, °°Àº »óȲ¿¡ À־ÀÇGROUP BYÀÇ ¼±Åðú´Â ¹Ý´ëÀÔ´Ï´Ù. ÀÌ ºÒÀÏÄ¡´Â Ç¥ÁØ SQL¿ÍÀÇ È£È¯¼ºÀ» º¸°ü À¯ÁöÇϱâ À§Çؼ­ ¹ß»ýÇϰí ÀÖ½À´Ï´Ù.

ORDER BYÁßÀÇ ÀÓÀÇÀÇ ½ÄÀÇ µÚ¿¡, »ý·« °¡´ÉÇÑ Å°¿öµåASC(½Â¼ø),DESC(³»¸²Â÷¼ø)¸¦ ºÎ°¡ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÁöÁ¤ÀÌ ¾øÀ¸¸é, ±âº»°ªÀ¸·ÎASC°¡ ÀÖ´Â °ÍÀ¸·Î¼­ ´Ù·ç¾îÁý´Ï´Ù. ´ë¾ÈÀûÀ¸·Î ¼ø¼­¸¦ ÁöÁ¤ÇÏ´Â ¿¬»êÀÚ¸íÀ»USING±¸·Î ÁöÁ¤ÇÏ´Â ¹æ¹ýµµ ÀÖ½À´Ï´Ù. ¼ø¼­ ÁöÁ¤ ¿¬»êÀÚ´Â ¾î¶°ÇÑ B-Tree ¿¬»êÀÚÁ·ÀÇ ¼ÒµçÁö ¶Ç´Â ´ëµçÁö ¿¬»êÀÚ°¡ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù. Åë»ó ASC´ÂUSING <¿ÍDESC´ÂUSING >¿Í °°½À´Ï´Ù (´Ù¸¸, »ç¿ëÀÚ Á¤ÀÇ µ¥ÀÌÅÍÇüÀÇ ÀÛ¼º½Ã¿¡´Â ±âº»°ªÀÇ Á¤·Ä ¼ø¼­¸¦ Á¤ÀÇÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¶Ç, ´Ù¸¥ À̸§ÀÇ ¿¬»êÀÚ¿Í ´ëÀÀ ºÙÀ̰í ÇÒ ¼öµµ ÀÖ½À´Ï´Ù).

±× null°ªÀº ´Ù¸¥ °ªº¸´Ù ³ô°Ô Á¤·ÄÇÕ´Ï´Ù. ¹Ù²Ù¾î ¸»ÇÏ¸é ¿À¸§Â÷¼øÁ¤·Ä, ³¡¿¡¼­ null°ª Á¤·Ä, ³»¸²Â÷¼ø Á¤·Ä, ½ÃÀÛÁ¡¿¡¼­ null°ªÀ¸·Î Á¤·ÄÀ̶ó ÇÕ´Ï´Ù.

¹®ÀÚÇü µ¥ÀÌÅÍ¿¡¼­´Â µ¥ÀÌÅͺ£À̽º Ŭ·¯½ºÅÍÀÇ ÃʱâÈ­½Ã·Î °áÁ¤µÇ´Â ·ÎÄÉÀÏ ÁöÁ¤ÀÇ Á¶ÇÕ¼ø¼­¿¡ µû¶ó Á¤·ÄµË´Ï´Ù.

DISTINCT±¸

DISTINCT°¡ ÁöÁ¤µÇ¸é(ÀÚ), Áߺ¹ ÇÏ´Â ÇàÀº ¸ðµÎ °á°ú ¼¼Æ®·ÎºÎÅÍ »èÁ¦µË´Ï´Ù (°¢°¢ 1ÇุÀÌ º¸°ü À¯ÁöµË´Ï´Ù). ALL´Â ÀÌ ¹Ý´ë·Î, ¸ðµç ÇàÀÌ º¸°ü À¯ÁöµË´Ï´Ù. À̰ÍÀÌ ±âº»°ªµË´Ï´Ù.

DISTINCT ON ( expression [, ...] )(Àº)´Â °¢ Çà ÁýÇÕ ¾È¿¡¼­, ÁöÁ¤ÇÑ ½ÄÀÌ µ¿ÀÏÇÏ´Ù°í Æò°¡ÇÑ ÃÖÃÊÀÇ ÇุÀ» º¸°ü À¯ÁöÇÕ´Ï´Ù. DISTINCT ON½ÄÀº »ó¼úÀÇORDER BY¿Í °°Àº ±ÔÄ¢À¸·Î ´Ù·ç¾îÁý´Ï´Ù. °¢ ÁýÇÕÀÇ"ÃÖÃÊÀÇ Çà"Àº ORDER BY¸¦ »ç¿ëÇØ ¸ñÀûÀÇ ÇàÀÌ È®½ÇÈ÷ ÃÖÃÊ·Î ³ªÅ¸³ªµµ·Ï ÇÏÁö ¾Ê´Â ÇÑ ¿¹ÃøÇÒ ¼ö ¾ø½À´Ï´Ù. ¿¹¸¦ µé¸é, ´ÙÀ½ÀÇ ¿¹´Â °¢ÁöÁ¡ÀÇ ÃÖ½ÅÀÇ ±â»ó Á¤º¸¸¦ ²¨³À´Ï´Ù.

SELECT DISTINCT ON (location) location, time, report
    FROM weather_reports
    ORDER BY location, time DESC;

ORDER BY¸¦ »ç¿ëÇØ °¢ÁöÁ¡À» ½Ã°£¿¡ ÀÇÇØ ³»¸²Â÷¼ø¿¡ Á¤·ÄÇÏÁö ¾ÊÀ¸¸é °¢ÁöÁ¡¿¡ ´ëÇØ ¾òÀ» ¼ö ÀÖ´Â Á¤º¸°¡ ¾ðÁ¦ÀÇ °ÍÀΰ¡´Â ¸ð¸¨´Ï´Ù.

DISTINCT ON·Î ÁöÁ¤ÇÏ´Â ½ÄÀºORDER BYÀÇ °¡Àå ÁÂÃøÀÇ ½Ä°ú ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ORDER BY±¸´Â Åë»ó °¢DISTINCT ON±×·ì Áß¿¡¼­ÀÇ ÇàÀÇ ¿ì¼± ¼øÀ§¸¦ °áÁ¤ÇÏ´Â Ãß°¡ÀûÀÎ ½ÄÀ» Æ÷ÇÔÇÕ´Ï´Ù.

LIMIT±¸

LIMIT±¸´Â 2°³ÀÇ µ¶¸³ÇÑ ºÎ±¸·ÎºÎÅÍ ±¸¼ºµË´Ï´Ù.

LIMIT { 
count
 | ALL }
OFFSET 
start

count ¿¡´Â µ¹·ÁÁÖ¾îÁö´Â ÇàÀÇ ÃÖ´ë¼ö¸¦, ÇÑÆí, start ¿¡´Â ÇàÀ» µ¹·ÁÁֱ⠽ÃÀÛÇϱâ Àü¿¡ ³¯¸®´Â Çà¼ö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ¾çÂÊ ¸ðµÎ ÁöÁ¤µÇ¾úÀ» °æ¿ì, start ÇàÀº count ÇàÀÌ µ¹·ÁÁö´Â ¼ýÀÚ¼¼±â¸¦ ½ÃÀÛÇϱâ Àü¿¡ ½ºÅµµÇ¾î Áø´Ù.

LIMIT¸¦ »ç¿ëÇÒ ¶§´Â, °á°úÇàÀ» ÀÏÀÇÀÎ Â÷·Ê·Î °­Á¦ÇÏ´ÂORDER BY±¸¸¦ »ç¿ëÇϸé(ÀÚ) ÁÁÀ» °ÍÀÔ´Ï´Ù. ±×·¸°Ô ÇÏÁö ¾Ê´Ù°í ¹®ÀÇ °á°úÀÇ ¾î´À ºÎºÐÀÌ µ¹·ÁÁÖ¾îÁö´ÂÁö¸¦ ¸ð¸¨´Ï´Ù. 10~20Çà°±îÁö¸¦ Ãâ·ÂÇÑ´Ù°í ÇØµµ, ¾î´À Â÷·Ê·Î ³ª¶õÇØÁú ¼ö ÀÖ¾úÀ» ¶§ÀÇ 10~20Çà°Àϱî¿ä. ORDER BY¸¦ ÁöÁ¤ÇÏÁö ¾Ê´Â ÇÑ, ÇàÀÌ µ¹·ÁÁÖ¾îÁö´Â Â÷·Ê´Â ºÒ¸íÇÕ´Ï´Ù.

FOR UPDATE/FOR SHARE±¸

FOR UPDATE´Â ÀÌÇÏÀÇ Çü½ÄÀÌ µË´Ï´Ù.

FOR UPDATE [ OF 
table_name
 [, ...] ] [ NOWAIT ]

±í°Ô °ü·ÃÇÏ´ÂFOR SHARE±¸´Â ÀÌÇÏÀÇ Çü½ÄÀÌ µË´Ï´Ù.

FOR SHARE [ OF 
table_name
 [, ...] ] [ NOWAIT ]

FOR UPDATE¸¦ »ç¿ëÇϸé(ÀÚ), ¹®ÀÇ¿¡ ÀÇÇØ °Ë»öµÈ ÇàÀÌ °»½Å¿ëÀ¸·Î ¶ô µË´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ÇöÇàÀÇ Æ®·£Àè¼Ç(transaction)°¡ Á¾·áÇÒ ¶§±îÁö´Â, ÀÌ·¯ÇÑ ÇàÀÌ ´Ù¸¥ Æ®·£Àè¼Ç(transaction)¿¡ ÀÇÇØ º¯°æµÇ°Å³ª »èÁ¦ µÇ°Å³ª ÇÏ´Â °ÍÀÌ ¾ø¾îÁý´Ï´Ù. Áï, ÇöÇàÀÇ Æ®·£Àè¼Ç(transaction)°¡ Á¾·áÇÒ ¶§±îÁö´Â, ´Ù¸¥ Æ®·£Àè¼Ç(transaction)°¡ ÀÌ·¯ÇÑ Çà¿¡ ´ëÇØ¼­UPDATE,DELETE,SELECT FOR UPDATE¸¦ ½ÃÇàÇØµµ °ÅºÎµË´Ï´Ù. ¶Ç, ´Ù¸¥ Æ®·£Àè¼Ç(transaction)·ÎºÎÅÍÀÇUPDATE,DELETE,SELECT FOR UPDATE¿¡ ÀÇÇØ ¼±ÅÃÇÑ ÇàÀÌ ¶ô µÇ°í ÀÖ´Â °æ¿ì,SELECT FOR UPDATE¸¦ ½ÇÇàÇÏ·Á°í Çϸé(ÀÚ),SELECT FOR UPDATE´Â ±× Æ®·£Àè¼Ç(transaction)°¡ Á¾·áÇÏ´Â °ÍÀ» ±â´Ù¸®°í ³ª¼­, ±× ÈÄ ÇàÀ» Àá±×¾î °»½ÅµÈ ÇàÀ» µ¹·ÁÁÝ´Ï´Ù(ÇàÀÌ »èÁ¦µÇ¾úÀ» °æ¿ì´Â µ¹·ÁÁÖÁö ¾Ê½À´Ï´Ù). ÀÚ¼¼ÇÑ °ÍÀºChapter 12À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä.

´Ù¸¥ Æ®·£Àè¼Ç(transaction)ÀÇ À§Å¹À» ´ë±âÇÏ´Â ÀÏ ¾øÀÌ Á¶ÀÛÀ» ÁøÇà½ÃŰ·Á¸é ,NOWAIT¿É¼ÇÀ» »ç¿ëÇØ ÁÖ¼¼¿ä. ¼±ÅÃÇàÀÇ ¶ôÀ» Áï¼®¿¡¼­ ȹµæÇÒ ¼ö ¾øÀ» ¶§,SELECT FOR UPDATE NOWAIT´Â ´ë±âÇÏÁö ¾Ê°í , ¿¡·¯¸¦ º¸°íÇÕ´Ï´Ù. NOWAITÇÏÇà ·¹º§ ¶ô¿¡°Ô¸¸¿¡ Àû¿ëµÇ´Â Á¡¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. Áï, ÇÊ¿äÇÑROW SHAREÅ×ÀÌºí ·¹º§ ¶ôÀº Åë»ó ±×´ë·ÎÀÇ ¹æ¹ý( Chapter 12ÂüÁ¶)À¸·Î ȹµæµË´Ï´Ù. ¸¸¾à, Å×ÀÌºí ·¹º§ÀÇ ¶ôÀ» ´ë±âÇÏÁö ¾Ê°í ȹµæÇØ¾ß ÇÏ´Â °ÍÀ̸é, LOCK ÀÇNOWAIT¿É¼ÇÀ» »ç¿ëÇØ ÁÖ¼¼¿ä.

FOR SHAREµµ ÀÌ¿Í °°ÀÌ ÇൿÇÕ´Ï´Ù¸¸, ÀÔ¼öÇÏ´Â Çà¿¡ ´ëÇØ ¹èŸÀû ¶ôÀ» ȹµæÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó °øÀ¯ ¶ôÀ» ȹµæÇÏ´Â Á¡ÀÌ ´Ù¸¨´Ï´Ù. °øÀ¯ ¶ô¿¡ ÀÇÇØ, ŸƮ·£Àè¼Ç(transaction)¿¡ ÀÇÇÑ ±× Çà¿¡ ´ëÇÑUPDATE,DELETE,SELECT FOR UPDATEÁ¶ÀÛÀº ºí·Ï µË´Ï´Ù. ±×·¯³ª, ŸƮ·£Àè¼Ç(transaction)¿¡ ÀÇÇÑSELECT FOR SHAREÁ¶ÀÛÀ» ¸·Áö ¾Ê½À´Ï´Ù.

FOR UPDATE¶Ç´Â FOR SHARE³»¿¡ ƯÁ¤ÀÇ Å×À̺íÀÌ ÁöÁ¤µÇ°í ÀÖ´Â °æ¿ì´Â, ±× Å×À̺íÀÇ ÇุÀÌ ¶ô µË´Ï´Ù. SELECT³»ÀÇ ´Ù¸¥ Å×À̺íÀº Åë»ó ´ë·Î¿¡ ÀÐÈü´Ï´Ù. Å×ÀÌºí ¸®½ºÆ®¸¦ °¡ÁöÁö ¾Ê´ÂFOR UPDATEȤÀº FOR SHARE±¸´Â, ±× ¸í·ÉÀ¸·Î »ç¿ëµÇ´Â ¸ðµç Å×ÀÌºí¿¡ ¿µÇâÀ» ÁÝ´Ï´Ù. FOR UPDATEȤÀº FOR SHARE°¡ ºä ¶Ç´Â ¼­ºêÄõ¸®·Î »ç¿ëµÇ¾úÀ» °æ¿ì, ±× ºä³ª ¼­ºêÄõ¸®·Î »ç¿ëµÇ´Â ¸ðµç Å×ÀÌºí¿¡ ¿µÇâÀ» ÁÝ´Ï´Ù.

´Ù¸¥ ¶ô ¹æ½ÄÀ» ´Ù¸¥ Å×À̺í·Î ÁöÁ¤ÇÒ Çʿ䰡 ÀÖÀ¸¸é, º¹¼öÀÇFOR UPDATE¿Í FOR SHARE±¸¸¦ ±â¼úÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. FOR UPDATE±¸¿Í FOR SHARE±¸ÀÇ ¾çÂÊ ¸ðµÎ·Î µ¿ÀÏÇÑ Å×À̺íÀ» ±â¼úÇßÀ»(¶Ç´Â ¾Ï¹¬ÀûÀ¸·Î ¿µÇâÀÌ ÁÖ¾îÁú) °æ¿ì,FOR UPDATE·Î¼­ 󸮵˴ϴÙ. °°ÀÌ ¾î´À Å×ÀÌºí¿¡ ¿µÇâÀ» ÁÖ´Â ±¸ÀÇ ¾î´ÀÂÊÀ̵çÀ¸·Î NOWAIT°¡ ÁöÁ¤µÇ¾úÀ» °æ¿ì, ±× Å×À̺íÀºNOWAIT·Î¼­ 󸮵˴ϴÙ.

FOR UPDATE¹× FOR SHARE´Â µ¹·ÁÁÖ¾îÁö´Â ÇàÀÌ Å×À̺íÀÇ ¾î´À Çà¿¡ ´ëÀÀÇÏ´ÂÁö°¡ ¸íÈ®ÇÏ°Ô ½Äº°ÇÒ ¼ö ¾ø´Â °æ¿ì¿¡´Â »ç¿ëÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ¿¹¸¦ µé¸é, ÁýÇÕ¿¡´Â »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.

Caution

ÇàÀ» Àá±×°í ³ª¼­ ÈÄÀÇ ¼¼ÀÌºê Æ÷ÀÎÆ®³ª PL/pgSQL¿¹¿Ü ºí·ÏÀ¸·Î ±× ÇàÀ» ÆíÁýÇÏ´Â °ÍÀº ÇÇÇØ ÁÖ¼¼¿ä. ÈÄÀÇ ·Ñ¹é(rollback)·Î ¶ôÀÌ ¾ø¾îÁ® ¹ö¸³´Ï´Ù. ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.

BEGIN;
SELECT * FROM mytable WHERE key = 1 FOR UPDATE;
SAVEPOINT s;
UPDATE mytable SET ... WHERE key = 1;
ROLLBACK TO s;

ROLLBACKÈÄ ÇàÀº ¼­ºê Æ÷ÀÎÆ®ÀüÀÇ ¶ô µÈ °»½ÅÀü »óÅ¿¡ µ¹¾Æ¿ÀÁö ¾Ê°í ½ÇÁú ¶ô µÇÁö ¾Ê½À´Ï´Ù. ÇöÀçÀÇ Æ®·£Àè¼Ç(transaction)·Î ¶ô µÈ ÇàÀÌ ¾÷µ¥ÀÌÆ®µÇ°Å³ª »èÁ¦ µÇ°Å³ª ÇßÀ» °æ¿ì³ª, °øÀ¯ ¶ôÀÌ ¹èŸ ¶ô¿¡ Çâ»óÇßÀ» °æ¿ì, À̰ÍÀº À§ÇèÇÕ´Ï´Ù. ¸ðµç °æ¿ì¿¡ ´ëÇØ, ÀÌÀüÀÇ ¶ô »óŸ¦ ÀØÀ» ¼ö ÀÖ°í ÀÖ½À´Ï´Ù. Æ®·£Àè¼Ç(transaction)°¡ ±× ÈÄ, ¿øÀÇ ¶ô ¸í·É°ú °è¼ÓµÇ´Â ¾÷µ¥ÀÌÆ®µ¿¾È »óÅ¿¡ ·Ñ¹é(rollback) ÇßÀ» °æ¿ì, ±× ÇàÀº ¶ôµÇ¾î ÀÖÁö ¾ÊÀº »óÅ·μ­ ³ªÅ¸³³´Ï´Ù. À̰ÍÀº ½ÇÇàÀÇ ºÎÁ·À̸ç Àå·¡ÀÇPostgreSQL¸±¸®½º·Î ¼öÁ¤ÇÒ ¿¹Á¤ÀÔ´Ï´Ù.

Caution

LIMIT±¸¿Í FOR UPDATE/SHARE±¸ÀÇ ¾çÂÊ ¸ðµÎ¸¦ »ç¿ëÇÑSELECT¸í·É¿¡¼­´Â LIMIT·Î ÁöÁ¤ÇÑ Çà¼öº¸´Ù ÀûÀº ÇàÀÌ µ¹·ÁÁÖ¾îÁö´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. À̰ÍÀºLIMIT°¡ ¿ì¼± ÃÖÃÊ·Î Àû¿ëµÇ±â ¶§¹®ÀÔ´Ï´Ù. ÀÌ ¸í·ÉÀº ÁöÁ¤ÇÑ ÇàÀÇ ¼ýÀÚ¸¦ ¼±ÅÃÇÏÁö¸¸, ±× ÀϺΠȤÀº ¸ðµÎ¿¡ ´ëÇÑ ¶ôÀÇ ÃëµæÀÌ ºí·Ï µÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ÀÌSELECTÀÇ ºí·ÏÀÌ ÇØÁ¦µÈ ½ÃÁ¡¿¡¼­, ÇàÀº »èÁ¦µÇ°í ÀÖÀ»Áöµµ ¸ð¸£°í, ¶Ç, Äõ¸®ÀÇWHEREÁ¶°Ç¿¡ ¸ÂÁö ¾Ê°Ô ¾÷µ¥ÀÌÆ® µÇ¾î ÀÖÀ»Áöµµ ¸ð¸¨´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì, ÇàÀº µ¹·ÁÁÖ¾îÁöÁö ¾Ê½À´Ï´Ù.

¿¹Á¦

filmsÅ×À̺íÀ»distributorsÅ×À̺í°ú °áÇÕÇÕ´Ï´Ù.

SELECT f.title, f.did, d.name, f.date_prod, f.kind
    FROM distributors d, films f
    WHERE f.did = d.did

       title       | did |     name     | date_prod  |   kind
-------------------+-----+--------------+------------+----------
 The Third Man     | 101 | British Lion | 1949-12-23 | Drama
 The African Queen | 101 | British Lion | 1951-08-11 | Romantic
 ...

¸ðµç ¿µÈ­ÀÇlen¿­À» ÇÕ°èÇØ kind¿­¿¡ ÀÇÇØ °á°ú¸¦ ±×·ìÈ­ ÇÕ´Ï´Ù.

SELECT kind, sum(len) AS total FROM films GROUP BY kind;

   kind   | total
----------+-------
 Action   | 07:34
 Comedy   | 02:58
 Drama    | 14:28
 Musical  | 06:42
 Romantic | 04:38

¸ðµç ¿µÈ­ÀÇlen¿­À» ÇÕ°èÇØ kind¿­¿¡ ÀÇÇØ °á°ú¸¦ ±×·ìÈ­ ÇØ, ÇÕ°è°¡ 5½Ã°£º¸´Ù ÀûÀº ±×·ìÀÇ Çհ踦 Ç¥½ÃÇÕ´Ï´Ù.

SELECT kind, sum(len) AS total
    FROM films
    GROUP BY kind
    HAVING sum(len) < interval '5 hours';

   kind   | total
----------+-------
 Comedy   | 02:58
 Romantic | 04:38

´ÙÀ½¿¡ °á°ú¸¦ 2¹øÂ°ÀÇ ¿­(name)ÀÇ ³»¿ë¿¡ ±Ù°ÅÇØ Á¤·ÄÇÏ´Â ¹æ¹ýÀ» 2°³ ¿¹½ÃÇÕ´Ï´Ù.

SELECT * FROM distributors ORDER BY name;
SELECT * FROM distributors ORDER BY 2;

 did |       name
-----+------------------
 109 | 20th Century Fox
 110 | Bavaria Atelier
 101 | British Lion
 107 | Columbia
 102 | Jean Luc Godard
 113 | Luso films
 104 | Mosfilm
 103 | Paramount
 106 | Toho
 105 | United Artists
 111 | Walt Disney
 112 | Warner Bros.
 108 | Westward

´ÙÀ½ÀÇ ¿¹´Â distributorsÅ×À̺í°úactorsÅ×À̺íÀÇ È­ÁýÇÕÀ» ÃëµæÇÏ´Â ¹æ¹ýÀ» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù. °Ô´Ù°¡ ¾çÂÊ ¸ðµÎÀÇ Å×À̺í·Î °á°ú¸¦ W¶ó°í ÇÏ´Â ¹®ÀÚ·Î ½ÃÀ۵Ǵ Çà¿¡¸¸ ÇÑÁ¤Çϰí ÀÖ½À´Ï´Ù. Áߺ¹ ÇÏÁö ¾Ê´Â ÇุÀÌ ÇÊ¿äÇØ¼­ ALLŰ¿öµå´Â »ý·« µÇ°í ÀÖ½À´Ï´Ù.

distributors:               actors:
 did |     name              id |     name
-----+--------------        ----+----------------
 108 | Westward               1 | Woody Allen
 111 | Walt Disney            2 | Warren Beatty
 112 | Warner Bros.           3 | Walter Matthau
 ...                         ...

SELECT distributors.name
    FROM distributors
    WHERE distributors.name LIKE 'W%'
UNION
SELECT actors.name
    FROM actors
    WHERE actors.name LIKE 'W%';

      name
----------------
 Walt Disney
 Walter Matthau
 Warner Bros.
 Warren Beatty
 Westward
 Woody Allen

´ÙÀ½¿¡ FROM±¸³»¿¡¼­ÀÇ ÇÔ¼öÀÇ »ç¿ë ¹æ¹ý¿¡ ´ëÇØ ¿­ Á¤ÀÇ ¸®½ºÆ®°¡ ÀÖ´Â °æ¿ì¿Í ¾ø´Â °æ¿ìÀÇ ¾çÂÊ ¸ðµÎÀÇ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.

CREATE FUNCTION distributors(int) RETURNS SETOF distributors AS $$
    SELECT * FROM distributors WHERE did = $1;
$$ LANGUAGE SQL;

SELECT * FROM distributors(111);
 did |    name
-----+-------------
 111 | Walt Disney

CREATE FUNCTION distributors_2(int) RETURNS SETOF record AS $$
    SELECT * FROM distributors WHERE did = $1;
$$ LANGUAGE SQL;

SELECT * FROM distributors_2(111) AS (f1 int, f2 text);
 f1  |     f2
-----+-------------
 111 | Walt Disney

ȣȯ¼º

¹°·Ð SELECT¹®Àº Ç¥ÁØ SQL¿Í ȣȯ¼ºÀÌ ÀÖ½À´Ï´Ù. ±×·¯³ª, È®Àå ±â´ÉÀ̳ª ½ÇÇöµÇ¾î ÀÖÁö ¾ÊÀº ±â´Éµµ ¸î°³Àΰ¡ ÀÖ½À´Ï´Ù.

FROM±¸ÀÇ »ý·«

PostgreSQL¿¡¼­´Â FROM±¸¸¦ »ý·« ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ÀÌÇÏ¿Í °°ÀÌ ´Ü¼øÇÑ ½ÄÀ» °è»ê½Ãų ¼ö°¡ ÀÖ½À´Ï´Ù.

SELECT 2+2;

 ?column?
----------
        4

´Ù¸¥SQLµ¥ÀÌÅͺ£À̽º¿¡¼­´Â ÀÌ·¯ÇÑSELECT¸¦ ½Ç½ÃÇϱâ À§Çؼ­ ´õ¹ÌÀÇ 1Çà Å×À̺íÀ» Á¦¿ÜÇÒ ¼ö ¾ø½À´Ï´Ù.

FROM±¸ÀÇ ÁöÁ¤ÀÌ ¾ø´Â °æ¿ì, Äõ¸®¿¡¼­´Â µ¥ÀÌÅͺ£À̽º Å×À̺íÀ» ÂüÁ¶ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ¿¹¸¦ µé¸é, ÀÌÇÏÀÇ Äõ¸®´Â ¹«È¿ÀÔ´Ï´Ù.

SELECT distributors.* WHERE distributors.name = 'Westward';

PostgreSQL¸±¸®½º 8.1º¸´Ù Àü±îÁö¿¡¼­´Â, ÀÌ·¯ÇÑ ÇüÅÂÀÇ Äõ¸®¸¦ ¹Þ¾Æµé¿© Äõ¸®·Î ÂüÁ¶ÇÏ´Â °¢ Å×ÀÌºí¿¡ ´ëÇÑ ¾Ï¹¬ÀûÀÎ Ç׸ñÀ» Äõ¸®ÀÇFROM±¸¿¡ Ãß°¡Çϰí ÀÖ¾ú½À´Ï´Ù. À̰ÍÀº Ç¥ÁØ SQL¿¡ µû¸£Áö ¾Ê°í ¶Ç, ¿¡·¯¸¦ À̲ø±â ½±±â ¶§¹®¿¡, ±âº» µ¿ÀÛÀº ¾Æ´Ï°Ô µÇ¾ú½À´Ï´Ù. ÀÌ µ¿ÀÛ¿¡ ÀÇÁ¸ÇÏ´Â ¾ÖÇø®ÄÉÀ̼ǿ¡ À־ÀÇ È£È¯¼ºÀ» À¯ÁöÇÏ·Á¸é, add_missing_from¼³Á¤ º¯¼ö¸¦ À¯È¿ÇÏ°Ô ÇØ ÁÖ¼¼¿ä. enabled.

ASŰ¿öµå

Ç¥ÁØ SQL¿¡¼­´Â »ý·« °¡´ÉÇÑ Å°¿öµåÀÎAS´Â ´Ü¼øÇÑ ³ëÀÌÁî·Î¼­ ´Ù·ç¾îÁ® »ý·« ÇØµµ ¿µÇâÀº ¾ø½À´Ï´Ù. PostgreSQLÀÇ ÆÄ¼­´Â Ãâ·Â¿­ÀÇ À̸§À» º¯°æÇÒ ¶§¿¡ ÀÌ Å°¿öµå¸¦ ÇÊ¿ä·Î ÇÕ´Ï´Ù. ¿Ö³ÄÇϸé, ÇüÅÂÀÇ È®Àå ±â´ÉÀ» »ý°¢Çϸé ÀÌ Å°¿öµå°¡ ¾øÀ¸¸é ±¸¹® ºÐ¼®ÀÇ ºÒ¸í·áÇÔÀ¸·Î ¿¬°áµÇ±â ¶§¹®ÀÔ´Ï´Ù. ±×·¯³ª,FROMÇ׸ñ¿¡¼­´ÂAS´Â »ý·« °¡´ÉÇÕ´Ï´Ù.

GROUP BY¿ÍORDER BY¿¡ À־ÀÇ ÀÌ¿ë °¡´ÉÇÑ À̸§ °ø°£

Ç¥ÁØ SQL-92¿¡¼­´Â ORDER BY±¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº °á°úÀÇ ·Ä¸íÀ̳ª ¼ýÀÚ»ÓÀ̸ç GROUP BY±¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº, ÀԷ·ĸíÀ¸·ÎºÎÅÍ µÇ´Â ½Ä¸¸ÀÔ´Ï´Ù. PostgreSQL´Â ÀÌ·¯ÇÑ ±¸·Î ¾çÂÊ ¸ðµÎ¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖµµ·Ï È®ÀåµÇ°í ÀÖ½À´Ï´Ù (´Ù¸¸, ºÒ¸í·áÇÔÀÌ ÀÖ´Â °æ¿ì´Â Ç¥ÁØÀÇ ÇØ¼®ÀÌ »ç¿ëµË´Ï´Ù). °Ô´Ù°¡PostgreSQL¿¡¼­´Â ¾î´À ÂÊÀÇ ±¸¿¡µµ ÀÓÀÇÀÇ ½ÄÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ½Ä¿¡¼­ »ç¿ëµÇ´Â À̸§Àº Ç×»ó °á°ú¿­ÀÇ À̸§Àº ¾Æ´Ï°í ÀԷ¿­ÀÇ À̸§À¸·Î °£ÁÖÇØÁö´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.

SQL:1999ÀÌÈÄ¿¡¼­´Â, SQL-92¿ÍÀÇ »óÀ§ ȣȯ¼ºÀÌ ÀüÇô ¾ø´Â ´Ù¼Ò ´Ù¸¥ Á¤Àǰ¡ ä¿ëµÇ°í ÀÖ½À´Ï´Ù. ±×·¯³ª, ´ëºÎºÐÀÇ °æ¿ì PostgreSQL´Â SQL:1999·Î °°Àº ¹æ¹ýÀ¸·Î ORDER BY³ªGROUP BY¸¦ ÇØ¼®ÇÕ´Ï´Ù.

ºñÇ¥Áر¸

DISTINCT ON,LIMIT,OFFSET±¸´Â Ç¥ÁØ SQL¿¡¼­´Â Á¤Àǵǰí ÀÖÁö ¾Ê½À´Ï´Ù.