POSTGRES ¿¡¼ »ç¿ëÇÏ´Â ÁúÀǾî´Â SQL-3 ÀÇ º¯ÇüÀÌ´Ù. POSTGRES ÀÇ Áú¾îÀÇ¿¡´Â È®Àå°¡´ÉÇÑ ÇüÅÂÀÇ ½Ã½ºÅÛ, »ó¼Ó, ÇÔ¼ö, »ý¼º±ÔÄ¢°ú °°Àº °ÍÀ» °¡Áö°í ÀÖ´Ù. ÀÌ·¯ÇÑ Æ¯Â¡Àº ¿ø·¡ÀÇPOSTGRES ÁúÀǾîÀÎ POSTQUEL ¿¡¼ ³ª¿Ô´Ù. ÀÌÀå¿¡¼´Â °£´ÜÇÑ ÀÛµ¿À» POSTGRES SQL À» »ç¿ëÇÏ¿© ½ÃÇàÇØ º»´Ù.
ÀÌ ¸Å´º¾óÀº SQL ÀÇ Çൿ¾ç½ÄÀ» º¸¿©ÁÙ »Ó, ¿ÏÀüÇÑ SQL ±³Àç´Â ¾Æ´Ï´Ù. SQL ¿¡ ´ëÇÑ Ã¥Àº ½ÃÁß¿¡ ¸¹ÀÌ ³ª¿ÍÀÖ´Ù. ±×¸®°í ¿©±â¿¡ ³ª¿À´Â ¸î¸î Ư¡µéÀº ANSI Ç¥ÁØÀÌ ¾Æ´Ï´Ù.
¾Æ·¡¿¡ ¿¹¸¦ µé¾îº¸ÀÚ. ¿©±â¿¡¼´Â, ¹Ù·Î ¾ÕÀå¿¡¼ ³ª¿Ô´ø °Í°ú °°ÀÌ mydb ¶ó´Â µ¥ÀÌÅͺ£À̽º¸¦ ¸¸µé¾î µÎ¾ú°í, psql À» ½ÇÇàÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ. ÀÌ ¸Þ´º¾ó¿¡ ³ª¿À´Â ¿¹Á¦´Â /usr/local/postgres95/src/tutorial ¿¡µµ ³ª¿ÍÀÖ´Ù. ÀÌ ¿¹Á¦µéÀ» ¾î¶»°Ô »ç¿ëÇÏ´Â Áö´Â ÇØ´ç µð·ºÅ丮¿¡ ÀÖ´Â README ÆÄÀÏÀ» Àß ÀÐ¾î º¸¸é µÈ´Ù. ´ÙÀ½°ú °°ÀÌ µû¶óÇÏÀÚ.
% cd /usr/local/postgres95/src/tutorial % psql -s mydb Welcome to the POSTGRES95 interactive sql monitor:
type \? for help on slash commands type \q to quit type \g or terminate with semicolon to execute query
You are currently connected to the database: jolly
mydb=> \i basics.sql
'\i' ¸í·ÉÀ» »ç¿ëÇÏ¸é Æ¯Á¤ÇÑ ¿ÜºÎÆÄÀÏ¿¡¼ ÁúÀǾ ÀÐ¾î¼ Ã³¸®ÇÒ ¼ö ÀÖ´Ù. ¸í·ÉÇà¿¡¼ÀÇ '-s' ¿É¼ÇÀº ÇϳªÀÇ Ä¿¸®¸¦ backend ·Î º¸³»±â Àü¿¡ Á¤ÁöÇÏ´Â ½Ì±Û ½ºÅÜ ¸ðµå·Î ¼³Á¤ÇÏ´Â °ÍÀÌ´Ù.
POSTGRES ¿¡¼ ±âº»ÀûÀÎ °³³äÀº Ŭ·¡½º(class) ÀÌ´Ù. Ŭ·¡½º´Â °´Ã¼·Î¼ÀÇ ÀνºÅÏ ½º (instances) ÀÇ °áÁýüÀÌ´Ù. °¢°¢ÀÇ ÀνºÅϽº´Â °°Àº ¼Ó¼º(attributes)ÀÇ ÁýÇÕ À» °¡Áö°í ÀÖ°í, °¢°¢ÀÇ ¼Ó¼ºÀº ƯÁ¤ÇÑ Çü(type)ÀÌ´Ù. ´õ ³ª¾Æ°¡, °¢°¢ÀÇ ÀνºÅϽº´Â ¿µ±¸ÀûÀÎ °´Ã¼ ½Äº°ÀÚ(object identifier - OID)¸¦ °¡Áö°Ô µÇ¸ç, ÀÌ ½Äº°ÀÚ´Â ¼³Ä¡½ÃºÎÅÍ Áߺ¹µÇÁö ¾Ê´Â À¯ÀÏÇÑ °ÍÀÌ´Ù. SQL ¹®¹ýÀº Å×À̺í(table)À» ÂüÁ¶Çϱ⠶§¹®¿¡, Ŭ·¡½º(class) ¶ó´Â °³³ä´ë½Å Å×À̺í(table)À̶ó´Â ¸»À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¶ Âù °¡Áö·Î, ¿(row) ´Â ÀνºÅϽº(instance)À̰í, Ä÷³(columns)Àº ¼Ó¼º(attributes)ÀÌ´Ù.
¾Õ¿¡¼ »ìÆìº» ¹Ù¿Í °°ÀÌ, Ŭ·¡½º´Â ±×·ìÈµÇ¾î µ¥ÀÌÅͺ£À̽º¸¦ ÀÌ·ç°í, µ¥ÀÌÅͺ£ À̽ºÀÇ ÁýÇÕÀº ÇϳªÀÇ postmaster ÇÁ·Î¼¼½º¿¡ ÀÇÇØ °ü¸®µÈ´Ù.
Ŭ·¡½ºÀÇ À̸§À» ÁöÁ¤ÇÏ¿© »õ·Î¿î Ŭ·¡½º¸¦ ¸¸µé ¼ö ÀÖ´Ù. À̶§ ¸ðµç ¼Ó¼º°ú Çü À» ¸í½ÃÇÑ´Ù.
CREATE TABLE weather (
cityvar char(80),
temp_lo int, - ÃÖÀú¿Âµµ
temp_hi int, - ÃÖ°í¿Âµµ
prcp real, - °¼ö·®
date date
);
¿¹¾à¾î(keyword)¿¡´Â ¹«½Å°æÇصµ µÇÁö¸¸ ½Äº°ÀÚ¿¡´Â ÁÖÀÇÇÏ¿©¾ß ÇÑ´Ù. POSTGRES SQL Àº Æò¹üÇÑ SQL ŸÀÔÀ¸·Î int, float, real, smallint, char(N), varchar(N), date, time À» Á¦°øÇÑ´Ù. ³ªÁß¿¡ »ìÆìº¸°ÚÁö¸¸, POSTGRES ¿¡¼´Â »ç¿ëÀÚ°¡ µ¥ÀÌ ÅÍ ÇüÀ» ÀÚ½ÅÀÌ ¸¶À½´ë·Î Á¤ÇÒ ¼ö ÀÖ´Ù. °á°úÀûÀ¸·Î, ÇüÀÇ ¸íĪÀº ¿¹¾à¾î°¡ ¾Æ´Ï´Ù.
³ª¾Æ°¡, POSTGRES ÀÇ 'create' ¸í·É¾î´Â ÀüÅëÀûÀÎ °ü°èÇü ½Ã½ºÅÛ¿¡¼ Å×À̺íÀ» »ý ¼º ÇÏ´Â µ¥ »ç¿ëÇÏ´Â ¸í·É¾î¿Í ¾ÆÁÖ À¯»çÇÏ´Ù. ±×·¯³ª, Ŭ·¡½º´Â °ü°èÇü ¸ðµ¨À» È®ÀåÇÏ´Â µ¶ÀÚÀûÀΠƯ¼ºÀ» °¡Áö°í ÀÖÀ½À» °ð ¾Ë¾Æº¼ °ÍÀÌ´Ù.
Ŭ·¡½º¿¡ ÀνºÅϽº¸¦ »ðÀÔÇÏ´Â µ¥´Â 'insert' ±¸¹®À» »ç¿ëÇÑ´Ù.
INSERT INTO weather
VALUES ('San Francisco', 46, 50, 0.25, '11/27/1994')
'copy' ¸í·ÉÀ» »ç¿ëÇϸé, Æò¹üÇÑ ¾Æ½ºÅ° ÆÄÀÏ¿¡¼ ´ë±Ô¸ðÀÇ µ¥ÀÌÅ͸¦ ÀûÀçÇÒ ¼ö ÀÖ´Ù.
weather Ŭ·¡½º¿¡ º¸ÅëÀÇ °ü°èÇü ¼±ÅÃ, °èȹ Ä¿¸®¸¦ ´øÁú ¼ö ÀÖ´Ù. SQL 'select' ±¸¹®À» ÀÌ·¯ÇÑ ¸ñÀû¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±¸¹®Àº ´ë»ó ¸ñ·Ï ºÎºÐ(target list - ¹ÝȯµÉ ¼Ó¼º ¸ñ·ÏºÎºÐ) °ú ÁúÀǺκÐ(¾î¶°ÇÑ Á¦ÇÑÀ» ¸í½ÃÇÏ´Â ºÎºÐ)À¸·Î ³ª´ ¼ö ÀÖ´Ù. ¿¹¸¦ µéÀÚ¸é, weather ÀÇ ¸ðµç ¿(row)À» ¾Ë¾Æº¸±â À§Çؼ´Â ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÉ °ÍÀÌ´Ù.
SELECT * FROM WEATHER;
±×·¯¸é, Ãâ·ÂÀº ´ÙÀ½°ú °°À» °ÍÀÌ´Ù.
city |temp_lo|temp_hi|prcp| date -------------+-------+-------+----+---------- San Francisco| 46| 50|0.25|11-27-1994 San Francisco| 43| 57| 0|11-29-1994 Hayward | 37| 54| |11-29-1994 (3 rows)
¾Æ¿ï·¯, ´ë»ó ¸®½ºÆ®¿¡ Ç¥Çö½ÄÀ» ¸¶À½´ë·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é, ´ÙÀ½°ú °°ÀÌ ÁúÀǸ¦ ÇÒ ¼ö µµ ÀÖ´Ù.
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
Äõ¸®½Ã¿¡ Ä¿¸®ºÎºÐ¿¡ ºÎ¿ï·± ¿ÀÆÛ·¹ÀÌÅÍ(and, or, not) À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é, ´ÙÀ½°ú °°´Ù.
SELECT *
FROM weather
WHERE city = 'San Francisco'
and prcp > 0.0;
city |temp_lo|temp_hi|prcp| date
-------------+-------+-------+----+----------
San Francisco| 46| 50|0.25|11-27-1994
(1 row)
¸¶Áö¸· Âü°í»çÇ×À¸·Î, select ÀÇ °á°ú¸¦ ¼ø¼´ë·Î Á¤·ÄÇϰųª, Áߺ¹µÇ´Â ÀνºÅϽº ¸¦ Á¦°ÅÇÒ ¼öµµ ÀÖ´Ù.
SELECT * FROM weather ORDER BY city;
select Ä¿¸®´Â »õ·Î¿î Ŭ·¡½º·Î ¸®´ÙÀÌ·ºÆ® Çϵµ·Ï »ç¿ëÇÒ ¼ö ÀÖ´Ù.
SELECT * INTO temp from weather;
ÀÌ·¯ÇÑ select ÀÇ »ç¿ëÀº, ¹¬½ÃÀûÀÎ create ¸í·É¾î¸¦ »ý¼ºÇÏ¿©, »õ·Î¿î Ŭ·¡½º·Î temp ¸¦ »ý¼ºÇÏ´Â µ¥, ÀÌ ¶§ ¼Ó¼º°ú ÇüÀº 'SELECT INTO' ¸í·É¾î¿¡¼ ´ë»ó ¸®½ºÆ®¿¡ ¸í½ÃµÈ ¼Ó¼º ¸íΰú ÇüÀÌ »ç¿ëµÈ´Ù. ¹°·Ð, ´Ù¸¥ Ŭ·¡½º»ó¿¡¼ °á°úÀûÀ¸·Î »ý¼ºµÈ Ŭ·¡½º¿¡¼µµ ¾î¶°ÇÑ µ¿ÀÛµµ ¼öÇàÇÒ ¼ö ÀÖ´Ù.
Áö±Ý±îÁö, ÇϳªÀÇ ÁúÀÇ´Â Çѹø¿¡ ÇϳªÀÇ Å¬·¡½º¸¸À» ¾ï¼¼½º ÇØ¿Ô´Ù. ÁúÀÇ´Â Çѹø¿¡ ¿©·¯ Ŭ·¡½º¸¦ ¾ï¼¼½ºÇϰųª, Ŭ·¡½ºÀÇ ¿©·¯ ÀνºÅϽº¸¦ µ¿½Ã¿¡ ´Ù·ç´Â ¹æ¹ýÀ¸·Î µ¿ÀÏÇÑ Å¬·¡½º¸¦ ¾ï¼¼½º ÇÒ ¼ö ÀÖ´Ù. Çѹø¿¡ °°Àº Ŭ·¡½º³ª ¼·Î´Ù¸¥ Ŭ·¡½ºÀÇ ¿©·¯ ÀνºÅϽº¿¡ Á¢±ÙÇÏ´Â ÁúÀǸ¦ '°áÇÕ ÁúÀÇ(join query)' ¶ó°í ºÎ¸¥´Ù.
ÇϳªÀÇ ¿¹·Î, ´Ù¸¥ ·¹ÄÚµåÀÇ ¿Âµµ ¹üÀ§¿¡ ÀÖ´Â ¸ðµç ·¹Äڵ带 ã°í ½ÍÀ» ¶§¸¦ °¡Á¤ ÇØº¸ÀÚ. °á°úÀûÀ¸·Î, ¿ì¸®´Â °¢°¢ÀÇ EMP ÀνºÅϽºÀÇ temp_lo ¿Í temp_hi ¼Ó¼ºÀ» ´Ù¸¥ ¸ðµç EMP ÀνºÅϽºÀÇ temp_lo ¿Í temp_hi ¼Ó¼º°ú ºñ±³ÇÒ Çʿ䰡 ÀÖ´Ù.
(ÁÖ2 - À̰ÍÀº ´ÜÁö °³³äÀûÀÎ ¸ðµ¨ÀÏ »ÓÀÌ´Ù. ½ÇÁ¦ÀûÀÎ °áÇÕÀº Á»´õ È¿À²ÀûÀÎ ¹æ¹ýÀ¸·Î ÀÌ·ç¾î Áú °ÍÀÌÁö¸¸, »ç¿ëÀÚÀÇ ´«¿¡´Â º¸ÀÌÁö ¾Ê´Â´Ù. )ÀÌ·¯ÇÑ ÀÛ¾÷Àº ´ÙÀ½ÀÇ Ä¿¸®·Î ÇÒ ¼ö ÀÖ´Ù.
SELECT W1.city, W1.temp_lo, W1.temp_hi,
W2.city, W2.temp_lo, W2.temp_hi
FROM weather W1, weather W2
WHERE W1.temp_lo < W2.temp_lo
and W1.temp_hi > W2.temp_hi;
city |temp_lo|temp_hi|city |temp_lo|temp_hi
-------------+-------+-------+-------------+-------+-------
San Francisco| 43| 57|San Francisco| 46| 50
Hayward | 37| 54|San Francisco| 46| 50
(2 rows)
ÀÌ °æ¿ì¿¡, W1 °ú W2 ´Â Ŭ·¡½º weather ÀÇ ÀνºÅϽº¸¦ À§ÇÑ ´ë¿ëÀ̸ç, ¾çÂÊÀÇ ¹üÀ§´Â Ŭ·¡½ºÀÇ ¸ðµç ÀνºÅϽº¸¦ ³Ñ´Â´Ù. (µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛÀÇ Àü¹®¿ë¾î·Î W1 °ú W2 ´Â "¹üÀ§ º¯¼ö(range variables)"¶ó ÇÑ´Ù.) ÇϳªÀÇ ÁúÀǴ Ŭ·¡½º À̸§°ú ±×ÀÇ ´ë¿ëÀ» ÀÚÀ¯·Ó°Ô Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù.
(ÁÖ3 - ÀÌ·¯ÇÑ °áÇÕÀÇ Àǹ̴Â, ÁúÀǺκÐÀº µ¥Ä«¸£Æ®ÀÇ product ¿¡¼ Á¤ÀÇÇÑ Å¬·¡½º ½ÄÀÇ Áø¸®°ªÀÇ Ç¥ÇöÀ̶ó´Â °ÍÀÌ´Ù. ÁúÀǺκÐÀÌ ÂüÀÎ µ¥Ä«¸£Æ®ÀÇ product ¿¡¼ÀÇ ÀÌ·¯ÇÑ ÀνºÅϽº¸¦ À§Çؼ, POSTGRES ´Â ´ë»ó ¸®½ºÆ®¿¡¼ ÁöÁ¤ÇÑ °ªÀ» °è»ê ÇÏ¿© ¹ÝȯÇÑ´Ù. POSTGRES SQL Àº ÀÌ·¯ÇÑ Ç¥Çö¿¡¼ °ªÀ» º¹»çÇÏ´Â µ¥ ¾î¶°ÇÑ Àǹ̵µ ºÎ¿©ÇÏÁö ¾Ê´Â´Ù. ÀÌ Àǹ̴ POSTGRES ´Â °¡²û °°Àº ´ë»ó ¸®½ºÆ®¸¦ ¿©·¯¹ø Àç°è»ê ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. - À̰ÍÀº ÀÚÁÖ ºÎ¿ï·± Ç¥ÇöÀÌ 'or' ·Î ¿¬°áµÇ¾úÀ» ¶§ ³ªÅ¸ ³´Ù. ÀÌ·¯ÇÑ º¹»ç¸¦ ÇÇÇϱâ À§Çؼ´Â, 'select distinct' ±¸¹®À» »ç¿ëÇÏ¿©¾ß ÇÑ ´Ù.)
'update' ¸í·ÉÀ» »ç¿ëÇϸé Á¸ÀçÇÏ´Â ÀνºÅϽº¸¦ °»½ÅÇÒ ¼ö ÀÖ´Ù. 11¿ù 28ÀÏ ÀÌÈÄÀÇÃÖ°í¿Âµµ¿Í ÃÖÀú¿Âµµ¸¦ 2µµ¾¿ °¨¼Ò½ÃÄÑ¾ß ÇÒ Çʿ伺ÀÌ ÀÖ´Ù°í »ý°¢Çغ¸ÀÚ. ÀÌ·¯ÇÑ °»½ÅÀº ´ÙÀ½ÀÇ ÁúÀǷΠó¸®ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
UPDATE weather
SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
WHERE date > '11/28/1994';
»èÁ¦´Â 'delete' ¸í·ÉÀ» »ç¿ëÇÑ´Ù.
DELETE FROM weather WHERE city = 'Hayward';
Hayward ¿¡ °ü·ÃµÈ ¸ðµç ³¯¾¾±â·ÏÀº »èÁ¦ÇÑ´Ù. ´ÙÀ½°ú °°Àº »ç¿ëÀº Á¶½ÉÇØ¾ß ÇÑ´Ù.
DELETE FROM classname;
'delete' ¸í·ÉÀº ¿©·¯ºÐ¿¡°Ô ¹°¾îº¸Áöµµ ¾Ê°í ÁöÁ¤ÇÑ Å¬·¡½ºÀÇ ¸ðµç ÀνºÅϽº¸¦ °£ ´ÜÈ÷ »èÁ¦Çؼ °øÇ㸸ÀÌ ³²°Ô µÈ´Ù. ½Ã½ºÅÛÀº ÀÌ·¯ÇÑ »èÁ¦ÀÛ¾÷ ÀÌÀü¿¡ È®ÀÎÀ» ¿ä±¸ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.
´Ù¸¥ ÁúÀǾî¿Í ¸¶Âù°¡Áö·Î, POSTGRES ´Â Àüü ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. ±×·¯³ª, ÇöÀçÀÇ POSTGRESÀÇ Àüü ÇÔ¼ö´Â ¸Å¿ì Á¦ÇÑÀûÀÌ´Ù. Ưº°È÷, Ƚ¼ö, ÇÕ°è, Æò±Õ, ÃÖ´ë, ÃÖ¼Ò µîÀÇ °è»ê¿¡ °ü·ÃµÈ Àüü ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. À̵é ÇÔ¼ö´Â ÀνºÅϽºÀÇ ÁýÇÕ¿¡ Àû¿ëµÇ¸ç, ÁúÀÇÀÇ ´ë»ó ¸®½ºÆ®¿¡¸¸ ³ªÅ¸³ª¸ç, ÁúÀǺκÐ(where Àý)¿¡´Â ³ªÅ¸³ªÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾îº¸ÀÚ.
SELECT max(temp_lo) FROM weather;
Àüü ÇÔ¼ö¿Í ÇÔ²² 'GROUP BY' ÀýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
SELECT city, max(temp_lo) FROM weather GROUP BY city;