4. ÁúÀǾî

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 ·Î º¸³»±â Àü¿¡ Á¤ÁöÇÏ´Â ½Ì±Û ½ºÅÜ ¸ðµå·Î ¼³Á¤ÇÏ´Â °ÍÀÌ´Ù.

4.1 °³³ä

POSTGRES ¿¡¼­ ±âº»ÀûÀÎ °³³äÀº Ŭ·¡½º(class) ÀÌ´Ù. Ŭ·¡½º´Â °´Ã¼·Î¼­ÀÇ ÀνºÅÏ ½º (instances) ÀÇ °áÁýüÀÌ´Ù. °¢°¢ÀÇ ÀνºÅϽº´Â °°Àº ¼Ó¼º(attributes)ÀÇ ÁýÇÕ À» °¡Áö°í ÀÖ°í, °¢°¢ÀÇ ¼Ó¼ºÀº ƯÁ¤ÇÑ Çü(type)ÀÌ´Ù. ´õ ³ª¾Æ°¡, °¢°¢ÀÇ ÀνºÅϽº´Â ¿µ±¸ÀûÀÎ °´Ã¼ ½Äº°ÀÚ(object identifier - OID)¸¦ °¡Áö°Ô µÇ¸ç, ÀÌ ½Äº°ÀÚ´Â ¼³Ä¡½ÃºÎÅÍ Áߺ¹µÇÁö ¾Ê´Â À¯ÀÏÇÑ °ÍÀÌ´Ù. SQL ¹®¹ýÀº Å×À̺í(table)À» ÂüÁ¶Çϱ⠶§¹®¿¡, Ŭ·¡½º(class) ¶ó´Â °³³ä´ë½Å Å×À̺í(table)À̶ó´Â ¸»À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¶ Âù °¡Áö·Î, ¿­(row) ´Â ÀνºÅϽº(instance)À̰í, Ä÷³(columns)Àº ¼Ó¼º(attributes)ÀÌ´Ù.

¾Õ¿¡¼­ »ìÆìº» ¹Ù¿Í °°ÀÌ, Ŭ·¡½º´Â ±×·ìÈ­µÇ¾î µ¥ÀÌÅͺ£À̽º¸¦ ÀÌ·ç°í, µ¥ÀÌÅͺ£ À̽ºÀÇ ÁýÇÕÀº ÇϳªÀÇ postmaster ÇÁ·Î¼¼½º¿¡ ÀÇÇØ °ü¸®µÈ´Ù.

4.2 »õ·Î¿î Ŭ·¡½ºÀÇ »ý¼º

Ŭ·¡½ºÀÇ À̸§À» ÁöÁ¤ÇÏ¿© »õ·Î¿î Ŭ·¡½º¸¦ ¸¸µé ¼ö ÀÖ´Ù. À̶§ ¸ðµç ¼Ó¼º°ú Çü À» ¸í½ÃÇÑ´Ù.

    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' ¸í·É¾î´Â ÀüÅëÀûÀÎ °ü°èÇü ½Ã½ºÅÛ¿¡¼­ Å×À̺íÀ» »ý ¼º ÇÏ´Â µ¥ »ç¿ëÇÏ´Â ¸í·É¾î¿Í ¾ÆÁÖ À¯»çÇÏ´Ù. ±×·¯³ª, Ŭ·¡½º´Â °ü°èÇü ¸ðµ¨À» È®ÀåÇÏ´Â µ¶ÀÚÀûÀΠƯ¼ºÀ» °¡Áö°í ÀÖÀ½À» °ð ¾Ë¾Æº¼ °ÍÀÌ´Ù.

4.3 Ŭ·¡½º¿¡ ÀνºÅϽº¸¦ »ðÀÔÇϱâ

Ŭ·¡½º¿¡ ÀνºÅϽº¸¦ »ðÀÔÇÏ´Â µ¥´Â 'insert' ±¸¹®À» »ç¿ëÇÑ´Ù.

    INSERT INTO weather
        VALUES ('San Francisco', 46, 50, 0.25, '11/27/1994')

'copy' ¸í·ÉÀ» »ç¿ëÇϸé, Æò¹üÇÑ ¾Æ½ºÅ° ÆÄÀÏ¿¡¼­ ´ë±Ô¸ðÀÇ µ¥ÀÌÅ͸¦ ÀûÀçÇÒ ¼ö ÀÖ´Ù.

4.4 Ŭ·¡½º¿¡ ÁúÀÇÇϱâ

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;

4.5 select °á°ú¸¦ ¸®´ÙÀÌ·ºÆ®Çϱâ

select Ä¿¸®´Â »õ·Î¿î Ŭ·¡½º·Î ¸®´ÙÀÌ·ºÆ® Çϵµ·Ï »ç¿ëÇÒ ¼ö ÀÖ´Ù.

    SELECT * INTO temp from weather;

ÀÌ·¯ÇÑ select ÀÇ »ç¿ëÀº, ¹¬½ÃÀûÀÎ create ¸í·É¾î¸¦ »ý¼ºÇÏ¿©, »õ·Î¿î Ŭ·¡½º·Î temp ¸¦ »ý¼ºÇÏ´Â µ¥, ÀÌ ¶§ ¼Ó¼º°ú ÇüÀº 'SELECT INTO' ¸í·É¾î¿¡¼­ ´ë»ó ¸®½ºÆ®¿¡ ¸í½ÃµÈ ¼Ó¼º ¸íΰú ÇüÀÌ »ç¿ëµÈ´Ù. ¹°·Ð, ´Ù¸¥ Ŭ·¡½º»ó¿¡¼­ °á°úÀûÀ¸·Î »ý¼ºµÈ Ŭ·¡½º¿¡¼­µµ ¾î¶°ÇÑ µ¿ÀÛµµ ¼öÇàÇÒ ¼ö ÀÖ´Ù.

4.6 Ŭ·¡½º°£ÀÇ °áÇÕ

Áö±Ý±îÁö, ÇϳªÀÇ ÁúÀÇ´Â Çѹø¿¡ ÇϳªÀÇ Å¬·¡½º¸¸À» ¾ï¼¼½º ÇØ¿Ô´Ù. ÁúÀÇ´Â Çѹø¿¡ ¿©·¯ Ŭ·¡½º¸¦ ¾ï¼¼½ºÇϰųª, Ŭ·¡½ºÀÇ ¿©·¯ ÀνºÅϽº¸¦ µ¿½Ã¿¡ ´Ù·ç´Â ¹æ¹ýÀ¸·Î µ¿ÀÏÇÑ Å¬·¡½º¸¦ ¾ï¼¼½º ÇÒ ¼ö ÀÖ´Ù. Çѹø¿¡ °°Àº Ŭ·¡½º³ª ¼­·Î´Ù¸¥ Ŭ·¡½ºÀÇ ¿©·¯ ÀνºÅϽº¿¡ Á¢±ÙÇÏ´Â ÁúÀǸ¦ '°áÇÕ ÁúÀÇ(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' ±¸¹®À» »ç¿ëÇÏ¿©¾ß ÇÑ ´Ù.)

4.7 °»½Å

'update' ¸í·ÉÀ» »ç¿ëÇϸé Á¸ÀçÇÏ´Â ÀνºÅϽº¸¦ °»½ÅÇÒ ¼ö ÀÖ´Ù. 11¿ù 28ÀÏ ÀÌÈÄÀÇÃÖ°í¿Âµµ¿Í ÃÖÀú¿Âµµ¸¦ 2µµ¾¿ °¨¼Ò½ÃÄÑ¾ß ÇÒ Çʿ伺ÀÌ ÀÖ´Ù°í »ý°¢Çغ¸ÀÚ. ÀÌ·¯ÇÑ °»½ÅÀº ´ÙÀ½ÀÇ ÁúÀǷΠó¸®ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

    UPDATE weather
    SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
    WHERE date > '11/28/1994';

4.8 »èÁ¦

»èÁ¦´Â 'delete' ¸í·ÉÀ» »ç¿ëÇÑ´Ù.

    DELETE FROM weather WHERE city = 'Hayward';

Hayward ¿¡ °ü·ÃµÈ ¸ðµç ³¯¾¾±â·ÏÀº »èÁ¦ÇÑ´Ù. ´ÙÀ½°ú °°Àº »ç¿ëÀº Á¶½ÉÇØ¾ß ÇÑ´Ù.

    DELETE FROM classname;

'delete' ¸í·ÉÀº ¿©·¯ºÐ¿¡°Ô ¹°¾îº¸Áöµµ ¾Ê°í ÁöÁ¤ÇÑ Å¬·¡½ºÀÇ ¸ðµç ÀνºÅϽº¸¦ °£ ´ÜÈ÷ »èÁ¦Çؼ­ °øÇ㸸ÀÌ ³²°Ô µÈ´Ù. ½Ã½ºÅÛÀº ÀÌ·¯ÇÑ »èÁ¦ÀÛ¾÷ ÀÌÀü¿¡ È®ÀÎÀ» ¿ä±¸ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.

4.9 Àüü ÇÔ¼öÀÇ »ç¿ë

´Ù¸¥ ÁúÀǾî¿Í ¸¶Âù°¡Áö·Î, POSTGRES ´Â Àüü ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. ±×·¯³ª, ÇöÀçÀÇ POSTGRESÀÇ Àüü ÇÔ¼ö´Â ¸Å¿ì Á¦ÇÑÀûÀÌ´Ù. Ưº°È÷, Ƚ¼ö, ÇÕ°è, Æò±Õ, ÃÖ´ë, ÃÖ¼Ò µîÀÇ °è»ê¿¡ °ü·ÃµÈ Àüü ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. À̵é ÇÔ¼ö´Â ÀνºÅϽºÀÇ ÁýÇÕ¿¡ Àû¿ëµÇ¸ç, ÁúÀÇÀÇ ´ë»ó ¸®½ºÆ®¿¡¸¸ ³ªÅ¸³ª¸ç, ÁúÀǺκÐ(where Àý)¿¡´Â ³ªÅ¸³ªÁö ¾Ê´Â´Ù. ¿¹¸¦ µé¾îº¸ÀÚ.

    SELECT max(temp_lo) FROM weather;

Àüü ÇÔ¼ö¿Í ÇÔ²² 'GROUP BY' ÀýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

    SELECT city, max(temp_lo) FROM weather GROUP BY city;