PostgreSQL¿¡¼­ ÁýÇÕ ÇÔ¼ö¿Í ¿¬»êÀÚ »ç¿ëÇϱâ

By Branden R Williams

Çѱ۹ø¿ª ÀüÁ¤È£

ÀÌ ±ÛÀº Çѱ۹ø¿ªÆÇÀÔ´Ï´Ù. ¿ø¹®Àº ¿©±â¿¡¼­ º¼ ¼ö ÀÖ½À´Ï´Ù.


¼­¹®:
ÀÌ ±ÛÀº µ¶ÀÚ°¡ SQL µ¥ÀÌÅ׺£À̽º¿¡¼­ SELECT, INSERT, UPDATE, DELETEÀÇ ±âº»À» ¾È´Ù°í °¡Á¤ÇÑ´Ù. À̵éÀÌ ¹»ÇÏ´ÂÁö ¸ð¸¥´Ù¸é ´Ù¸¥ ±ÛÀ» ¿ì¼± Âü°íÇ϶ó. SELECT ÁúÀǸ¦ ÇÒ ¼ö ÀÖ´Ù¸é ÀÌ ±ÛÀ» Àдµ¥ ÃæºÐÇÏ´Ù. ±×·¯¸é ÁýÇÕ ÇÔ¼ö·Î °¡ÀÚ!

¿ä¾à:
ÀÌ ´Ù¼Ò Á¾ÇÕÀûÀÎ ±Û¿¡¼­ óÀ½¿¡´Â PostgreSQL¿¡¼­ °¡Àå ±âº»ÀûÀÎ ÁýÇÕ ÇÔ¼ö 5°³¸¦ ´Ù·é´Ù. À̵éÀº count(), min(), max(), avg(), sum()ÀÌ´Ù. ±×ÈÄ ÀÚÁÖ »ç¿ëµÇ´Â ¿©·¯ ¿¬»êÀÚ¸¦ ´Ù·ê °ÍÀÌ´Ù. °³¹ßȯ°æ¿¡ µû¶ó ¿¬½ÀÇÏ´Â ÁÁÀº ¹æ¹ýÀº Á÷Á¢ DBMS¿¡¼­ ½ÇÇàÇÏ¿© ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Â °á°ú¸¦ ¾ò´Â °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀº ÁýÇÕ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¶§ ºÐ¸íÇÏ´Ù. ¸¶Áö¸·À¸·Î ÁýÇÕ ÇÔ¼ö¿Í ÇÔ²² ¿¬»êÀÚ¸¦ »ç¿ëÇÏ´Â ¹ýÀ» ´Ù·ê °ÍÀÌ´Ù. ÀÌ ±ÛÀº Á¤È®È÷ ¿øÇÏ´Â ÀڷḦ ÁúÀÇÇϱâÀ§ÇØ °£´ÜÇÑ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ´Â ¹ýÀ» ¼³¸íÇÑ´Ù.

ÁýÇÕ(aggregate) ÇÔ¼ö¶õ ¹«¾ùÀΰ¡?
ÁýÇÕ ÇÔ¼ö´Â count()³ª sum()°ú °°ÀÌ ÃÑÇÕÀ» °è»êÇϱâÀ§ÇÑ ÇÔ¼öÀÌ´Ù. SQL ÁýÇÕ ÇÔ¼ö·Î ¿©·¯ Åë°è°ªÀ» ¾òÀ» ¼ö ÀÖ´Ù. ÁýÇÕ ÇÔ¼ö´Â µ¥ÀÌÅͺ£À̽º¿¡¼­ Á¤º¸¸¦ ¾ò´Âµ¥ ÇÊ¿äÇÑ Äڵ差À» Å©°Ô ÁÙÀδÙ.

(PostgreSQL 7.1 ¸Þ´º¾ó¿¡¼­ ¹ßÃé)
aggregate_name (Ç¥Çö½Ä)
aggregate_name (ALL Ç¥Çö½Ä)
aggregate_name (DISTINCT Ç¥Çö½Ä)
aggregate_name ( * )

aggregate_name´Â ÀÌ¹Ì Á¤ÀÇµÈ ÁýÇÕ ÇÔ¼öÀ̰í, Ç¥Çö½ÄÀº ±× ÀÚü·Î ÁýÇÕ ÇÔ¼ö¸¦ Æ÷ÇÔÇÏÁö ¾Ê´Â Ç¥Çö½ÄÀÌ´Ù.

ù¹øÂ° °æ¿ì´Â NULLÀÌ ¾Æ´Ñ Çʵ带 °¡Áø ¸ðµç Çà¿¡ Àû¿ëµÈ´Ù. (½ÇÁ¦·Î NULLÀ» ¹«½ÃÇÒÁö ¿©ºÎ´Â ÁýÇÕ ÇÔ¼ö¿¡ ´Þ·È´Ù. ±×·¯³ª ¸ðµç Ç¥ÁØ ÇÔ¼ö´Â ¹«½ÃÇÑ´Ù.) µÎ¹øÂ°´Â ALLÀÌ ±âº»°ªÀ̱⠶§¹®¿¡ ù¹øÂ°¿Í °°´Ù. ¼¼¹øÂ° °æ¿ì´Â NULLÀÌ ¾Æ´Ñ Çʵ带 °¡Áø ¸ðµç ±¸º°µÇ´Â Çà¿¡ Àû¿ëµÈ´Ù. ¸¶Áö¸· °æ¿ì´Â NULL ¿©ºÎ¿Í °ü°è¾øÀÌ ¸ðµç Çà¿¡ Àû¿ëµÈ´Ù. Ưº°ÇÑ ÀԷ°ªÀÌ ÁöÁ¤µÇÁö ¾Ê¾Ò±â ¶§¹®¿¡ º¸Åë count() ÁýÇÕ ÇÔ¼ö¿¡¼­¸¸ À¯¿ëÇÏ´Ù.

Ã¥ ÆÇ¸Å¸¦ ±â·ÏÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù°í °¡Á¤ÇÏÀÚ. Ã¥ Á¦¸ñ, °¡°Ý, ÆÇ¸ÅÀÏÀ» ±â·ÏÇÏ´Â "sale"À̶õ Å×À̺íÀÌ ÀÖ´Ù. 2001³â 3¿ù¿¡ ÆÇ¸ÅÇÑ Ã¥ÀÇ ÃѰ¡°ÝÀ» ¾Ë°í½Í´Ù. ÁýÇÕ ÇÔ¼ö°¡ ¾ø´Ù¸é 2001³â 3¿ù¿¡ ÆÇ¸ÅµÈ ¸ðµç ÇàÀ» selectÇØ¾ß ÇÑ´Ù. Áö±ÝÀº 10 Çà¹Û¿¡ ¾ø´Ù¸é Å©°Ô ¹®Á¦µÉ °ÍÀÌ ¾ø´Ù. (¹°·Ð ÇÑ´Þ¿¡ Ã¥À» 10±Ç ¹Û¿¡ ÆÈÁö¸øÇß´Ù¸é Å« µ·À» ¹ú ¼ö ¾øÀ» °ÍÀÌ´Ù.) ±×·¯³ª ÇÑ´Þ¿¡ Æò±Õ 2000±ÇÀ» ÆÄ´Â ¼­Á¡À» »ý°¢Çغ¸ÀÚ. ÇàµéÀ» Çϳª¾¿ »ìÆìº¸´Â °ÍÀÌ È¿À²ÀûÀ¸·Î º¸ÀÌÁö´Â ¾Ê´Â´Ù.

ÁýÇÕ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù¸é ´Ü¼øÈ÷ 2001³â 3¿ù¿¡ ÇØ´çÇϴ å °¡°Ý ¿­ÀÇ sum()À» selectÇÏ¸é µÈ´Ù. ÁúÀÇ´Â ÇÑ °ª¸¸À» ¹ÝȯÇϰí, Äڵ忡¼­ ÇàµéÀ» Çϳª¾¿ »ìÆìº¼ Çʿ䰡 ¾ø´Ù!

SUM() ÇÔ¼ö
sum() ÇÔ¼ö´Â À§ÀÇ ¿¹Ã³·³ ¸Å¿ì À¯¿ëÇÑ´Ù. ´ÙÀ½°ú °°Àº °¡»óÀûÀÎ Å×À̺íÀ» °¡Á¤ÇÏÀÚ.

table sale (
	book_title varchar(200),
	book_price real,
	date_of_purchase datetime
)

ÁýÇÕ ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é:
SELECT * FROM sale WHERE date_of_purchase BETWEEN '03/01/2001' AND '04/01/2001';

±×·¯¸é 2001³â 3¿ù¿¡ ÆÇ¸ÅÇÑ ¸ðµç ¿­À» ¹ÝȯÇÑ´Ù.

ÁýÇÕ ÇÔ¼ö¸¦ »ç¿ëÇϸé:
SELECT SUM(book_price) AS total FROM sale WHERE date_of_purchase BETWEEN '03/01/2001' AND '04/01/2001';

±×·¯¸é totalÀ̶ó´Â ¿­·Î 2001³â 3¿ù¿¡ ÆÇ¸ÅÇÑ ÃÑ ±Ý¾×À» ´ãÀº ÇÑ ÇàÀ» ¹ÝȯÇÑ´Ù.

¶Ç sum()¾È¿¡ ¼öÇÐ ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î Ã¥ °¡°ÝÀÇ 20%ÀÎ ÀÌÀ±ÀÇ ÇÕÀ» ¾Ë°í ½Í´Ù¸é,

SELECT SUM(book_price) AS total, SUM(book_price * .2) AS profit FROM sale WHERE date_of_purchase BETWEEN '03/01/2001' AND '04/01/2001';

´õ Å©°Ô º»´Ù¸é sum() ÇÔ¼öÀÇ ´Ù¸¥ ¿ëµµµµ ãÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿¹¸¦ µé¾î ¼ö¼ö·á¸¦ °è»êÇϰí, ÀÚ¼¼ÇÑ º¸°í¼­¸¦ ¸¸µé°í, Åë°èÀûÀÎ ÃÑÇÕÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù. º¸°í¼­¸¦ ÀÛ¼ºÇÑ´Ù¸é ¼öõ ¼ö¸¸ ÇàÀ» Çϳª¾¿ »ìÆìº¸´Â °Íº¸´Ù´Â SQLÀÌ °è»êÇÏ¿© °£´ÜÈ÷ °á°ú¸¦ Ãâ·ÂÇÏ´Â °ÍÀÌ ÈξÀ ´õ ½±´Ù.

count() ÇÔ¼ö
´Ù¸¥ À¯¿ëÇÑ ÁýÇÕ ÇÔ¼ö´Â count()ÀÌ´Ù. ÀÌ ÇÔ¼ö´Â Á¶°ÇÀ» ¸¸Á·ÇÏ´Â ÇàÀÇ °¹¼ö¸¦ ¹ÝȯÇÑ´Ù. ¿¹¸¦ µé¾î ´º½º¸¦ ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º¿¡¼­ Çϳª¾¿ ¼¼Áö¾Ê°í µ¥ÀÌÅ׺£À̽ºÀÇ ¸ðµç ´º½º °¹¼ö¸¦ ¾Ë ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ °£´ÜÇÏ´Ù.

SELECT COUNT(*) AS myCount FROM news;

±×·¯¸é µ¥ÀÌÅ׺£À̽ºÀÇ ¸ðµç ´º½º °¹¼ö¸¦ ¹ÝȯÇÑ´Ù.

MAX()¿Í MIN() ÇÔ¼ö
ÀÌ µÎ ÇÔ¼ö´Â ÁöÁ¤ÇÑ ¿­¿¡¼­ ÃÖ´ë°ªÀ̳ª ÃÖ¼Ò°ªÀ» ¹ÝȯÇÑ´Ù. (¼­Á¡ÀÇ ¿¹¿¡¼­) ÆÇ¸ÅÇÑ °¡Àå ºñ½Ñ Ã¥°ú °¡Àå ½Ñ Ã¥À» »¡¸® ¾Ë ¼ö À־ À¯¿ëÇÏ´Ù. ÀÌ ÁúÀÇ´Â ´ÙÀ½°ú °°´Ù.

SELECT MAX(book_price) AS highestPrice, MIN(book_price) AS lowestPrice FROM sale WHERE date_of_purchase BETWEEN '03/01/2001' AND '04/01/2001';

ÀÌ °æ¿ì¿¡µµ µ¥ÀÌÅ׺£À̽º¿¡¼­ ¸ðµç °ÍÀ» selectÇÏ¿© Çϳª¾¿ »ìÆìº¸¸ç °è»êÇÏÁö ¾Ê¾Æµµ µÈ´Ù.

AVG() ÇÔ¼ö
ÀÌ ÁýÇÕ ÇÔ¼ö´Â Ưº°È÷ ¸Å¿ì Áß¿äÇÏ´Ù. ¿©·¯ ÇʵåÀÇ Æò±Õ°ªÀ» ±¸ÇÏ°í ½ÍÀ» ¶§ avg()¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ÀÌ ÁýÇÕ ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é ¸ðµç ÇàÀ» ¾òÀ» ÈÄ, ´Ù ´õÇϰí ÇàÀÇ °¹¼ö·Î ³ª´²¾ßÇÑ´Ù. ¼­Á¡ÀÇ ¿¹¿¡¼­ 2001³â 3¿ù µ¿¾È ÆÈ¸° Ã¥µéÀÇ Æò±Õ°ªÀ» ´ÙÀ½°ú °°ÀÌ ¾Ë ¼ö ÀÖ´Ù.

SELECT AVG(book_price) AS avg_price FROM sale WHERE date_of_purchase BETWEEN '03/01/2001' AND '04/01/2001';

¿¬»êÀÚ´Â ¹«¾ùÀΰ¡?
¿¬»êÀÚ´Â ÁÖÀ§ °ª¿¡ ¿¬»êÀ» ÇÑ´Ù. ¿¹¸¦ µé¾î ¼öÇÐ ¿¬»êÀÚ¸¦ µé ¼ö ÀÖ´Ù. select ¹®¿¡¼­ µÎ ÇʵåÀÇ °ªÀ» »©°í ½Í´Ù¸é, »©±â(-) ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¸é µÈ´Ù.

SELECT salesperson_name, revenue - cost AS commission FROM sales;

°¢ ÆÇ¸Å¿øÀÌ ÆÇ ±Ý¾×¿¡¼­ ºñ¿ëÀ» »©¼­ ±×µéÀÇ ¼ö¼ö·á¸¦ ¹ÝȯÇÑ´Ù.

salesperson_namecommission
Branden Williams234.43
Matt Springfield87.74

¿¬»êÀÚ´Â º¹ÀâÇÑ °è»êÀ» ÇÒ¶§³ª µû·Î ó¸®ÇÏ´Â ÄÚµå¾øÀÌ Á¤È®ÇÑ °á°ú°¡ ÇÊ¿äÇÒ ¶§ ¸Å¿ì À¯¿ëÇÏ´Ù.

¼­Á¡ÀÇ ¿¹¿¡¼­ ¼­Á¡ÀÇ ÃâÀÔ±¸ ±Ùó¿¡ Àü½ÃÇϱâ À§Çؼ­ (ÇÑ ±Ç´ç) ÀÌÀ±ÀÌ °¡Àå ³ôÀº Ã¥À» ã´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇϰí ÇÏÀÚ. °á°ú¿¡¼­ Çϳª¾¿ °è»êÇÏÁö¾Ê°í ÀûÈ®È÷ ¿øÇÏ´Â °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù.

table inventory (
	book_title varchar(200),
	book_cost real,
	selling_price real
)

SELECT book_title, selling_price - book_cost AS profit ORDER BY profit DESC;

´ÙÀ½°ú ºñ½ÁÇÑ °á°ú¸¦ ¾ò´Â´Ù.

book_titleprofit
How To Scam Customers Into Buying Your Books15.01
How To Crash Windows 200013.84

ÀÌÁ¦ ¾î¶² Ã¥ÀÌ °¡Àå ÀÌÀ±ÀÌ ³ôÀºÁö »¡¸® ¾Ë ¼ö ÀÖ´Ù.

¿¬»êÀÚ´Â ÇÑ Å×ÀÌºí¿¡¼­ ´Ù¸¥ Å×À̺í·Î Á¤º¸¸¦ ¿Å±â´Âµ¥µµ À¯¿ëÇÏ´Ù. ¿¹¸¦ µé¾î ÁÖ ÀÚ·á Å×ÀÌºí¿¡ ÀڷḦ Áý¾î³Ö±âÀü¿¡ È®ÀÎÀ» À§ÇØ ÀڷḦ Àӽà Å×ÀÌºí¿¡ ¸ÕÀú Áý¾î³Ö±âµµ ÇÑ´Ù. Àå¹Ù±¸´Ï°¡ ÁÁÀº ¿¹ÀÌ´Ù. »óǰ Å×ÀÌºí¿¡¼­ Á¤º¸¸¦ ¾ò¾î Àӽà Å×ÀÌºí¿¡ ³Ö°í, Ãë¼ÒÇϰųª ¼ö·®À» ´Ã¸®°Å³ª ÇÒÀηüÀ» Àû¿ëÇÑ ÈÄ ÁÖ¹® Å×ÀÌºí¿¡ ÀÔ·ÂÇÑ´Ù.

ÀÌ °æ¿ì ÇÊ¿äÇÑ ¿©·¯ Á¤º¸¸¦ ã°í °è»êÇÏ¿© ´Ù½Ã Àӽà Å×ÀÌºí¿¡ Áý¾î³Ö´Â º¹ÀâÇÑ °úÁ¤À» °ÅÁö°í ½ÍÁö ¾ÊÀ» °ÍÀÌ´Ù. ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© °£´ÜÈ÷ ÇѹøÀÇ ÁúÀÇ·Î ÀÌ·± °úÁ¤À» ó¸®ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ µ¿ÀûÀÎ (º¯°æµÇ´Â) ÀڷḦ ´Ù·ê¶§µµ ½±°Ô ó¸®ÇÒ ¼ö ÀÖ´Ù. µ¥ÀÌÅͺ£À̽º°¡ µ¿ÀûÀÎ ÀڷḦ ´õ Àß ´Ù·ê ¼ö ÀÖ´Ù.

ÀÌÁ¦ ¸î¸î ¿¬»êÀÚ¿Í ±× ±â´ÉÀ» »ìÆìº¸ÀÚ. Àüü ¿¬»êÀÚ ¸ñ·ÏÀ» º¸·Á¸é pgsql¿¡¼­ '\do'¸¦ ÀÔ·ÂÇ϶ó.

+, -, *, / ¿¬»êÀÚ
PostgreSQL¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ±âº» »ê¼ú ¿¬»êÀÚÀÌ´Ù. ÀÌ¹Ì À§¿¡¼­ ÀÌ ¿¬»êÀÚµéÀÇ ¿¹¸¦ º¸¾ÒÀ» °ÍÀÌ´Ù. ´ÙÀ½°ú °°Àº ¿¹µµ »ý°¢Çغ¼ ¼ö ÀÖ´Ù.

»ê¼ú ¿¬»êÀÚÀÇ ´Ù¸¥ ¿¹´Â ¾Æ·¡ ¿¬»êÀÚ¿Í ÁýÇÕ ÇÔ¼ö¸¦ °áÇÕÇÏ´Â °÷¿¡¼­ º¼ ¼ö ÀÖ´Ù.

ºñ±³ (<, >, <=, >=) ¿¬»êÀÚ
ÀÌ ¿¬»êÀÚµéÀº º¸Åë WHERE Àý¿¡¼­ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î,

SELECT book_title FROM inventory WHERE selling_price >= '30.00';

ÆÇ¸Å°¡°¡ $30.00 ÀÌ»óÀΠåÀ» ¸ðµÎ ã´Â´Ù. ÀÌÀü ÀÌÀ± ¿¹Á¦¸¦ ´ÙÀ½°ú °°ÀÌ È®ÀåÇÒ ¼ö ÀÖ´Ù.

SELECT book_title, selling_price - book_cost AS profit WHERE selling_price - book_cost >= '14.00' ORDER BY profit DESC;

´ÙÀ½°ú °°Àº °á°ú°¡ ³ª¿Â´Ù.

book_titleprofit
How To Scam Customers Into Buying Your Books15.01

ÁúÀÇ¿¡¼­ ÇÏÇѼ±À» »ç¿ëÇÏ´Â °ÍÀº º¸°í¼­¿¡¼­ ¸Å¿ì À¯¿ëÇÏ´Ù.

|| (°áÇÕ) ¿¬»êÀÚ
¹®ÀÚ¸¦ °áÇÕÇÒ¶§ ÀÌ ¿¬»êÀÚ°¡ À¯¿ëÇÏ´Ù. ¿¹¸¦ µé¾î ¿©·¯ »óǰ Á¾·ù°¡ ÀÖ´Ù¸é, ±¸¸Å¼­¿¡ »óǰ¸í°ú Á¾·ù¸¦ °°ÀÌ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.

SELECT category || CAST(': ' AS VARCHAR) || productname AS title FROM products;

CAST() ÇÔ¼ö »ç¿ëÀ» ÁÖ¸ñÇ϶ó. °áÇÕÀ» À§Çؼ­ ´ë»ó¿¡ ´ëÇØ ¾Ë¾Æ¾ßÇÑ´Ù. ±×·¡¼­ ¿¬»êÀÚ°¡ ÀÛµ¿Çϱâ À§Çؼ­ PostgreSQL¿¡°Ô ¹®ÀÚ¿­ ': 'ÀÌ VARCHAR ÇüÀ̶ó°í ¾Ë·ÁÁà¾ßÇÑ´Ù.

°á°ú´Â ´ÙÀ½°ú °°´Ù.

title
Music CDs: Dave Matthews, Listener Supported
DVDs: Airplane

ÀÌÁ¦±îÁö ¿¬»êÀÚ¿Í ÁýÇÕ ÇÔ¼öÀÇ °£´ÜÇÑ »ç¿ë¹ý°ú À̸¦ ÀÌ¿ëÇÏ¿© ÇÁ·Î±×·¥À» (°³¹ß°ú ½ÇÇà) ºü¸£°ÔÇÏ´Â ¹ýÀ» º¸¾Ò´Ù. ¿¬»êÀÚ¿Í ÁýÇÕ ÇÔ¼öÀÇ ÁøÁ¤ÇÑ ÈûÀº µÑÀ» ¼­·Î °áÇÕÇÒ ¶§ ³ª¿Â´Ù. µ¥ÀÌÅͺ£À̽º°¡ ´ë½Å ÀÏÀ» ÇϰÔÇÏ¿© ÇÁ·Î±×·¥ÀÇ Äڵ差À» ÁÙÀÏ ¼ö ÀÖ´Ù. ÀÌÁ¦ ÀÌ ¹æ¹ýÀ» ´Ù·é´Ù.

¿ì¸®ÀÇ »óȲ:
´ç½ÅÀº À¥±â¹ÝÀÇ »óÁ¡ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â ÀÏÀ» ¸º¾Ò´Ù. ÁÖ¹® Å×À̺íÀº ¾Æ·¡¿Í °°´Ù.

create table orders (
	orderid integer (autoincrement),
	customerid integer,
	subtotal real,
	tax real,
	shipping real
)

create table orderdetail (
	orderid integer,
	productid integer,
	price real,
	qty integer
)

create table taxtable (
	state varchar(2),
	rate real
)

create table products (
	productid integer,
	description varchar(100),
	price real
)

create table cart (
	sessionid varchar(30),
	productid integer,
	price real,
	qty integer
)

¿©±â¼­ Àå¹Ù±¸´Ï Á¤º¸¸¦ ¼¼¼Ç¿¡ ÀúÀåÇÏÁö¾Ê°í µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇϱâ·Î °áÁ¤Çß´Ù. ±×·¯³ª µ¥ÀÌÅͺ£À̽º¿¡¼­ º¯È­¸¦ ±â·ÏÇϱâÀ§ÇØ sessionID´Â ÇÊ¿äÇÏ´Ù. cart Å×À̺íÀº ÇöÀç °áÁ¦ÇÏÁö¾ÊÀº Àå¹Ù±¸´Ï¸¦ ÀúÀåÇÑ´Ù. orders¿Í orderdetailÀº ¿ÏÀüÇÑ ÁÖ¹®°ú Ç׸ñÀ» ÀúÀåÇÑ´Ù. µ·À» û±¸ÇÒ¶§ ºÎºÐµéÀ» ÇÕÃļ­ °¢ ÁÖ¹®ÀÇ ÀüüÇÕÀ» ¾Ë ¼ö ÀÖ´Ù. ¸¶Áö¸·À¸·Î products Å×À̺íÀº °¡°Ý°ú ¼³¸íÀ» ÀúÀåÇÏ´Â »óǰ Å×À̺íÀÌ´Ù.

¿©±â¼­ Áß¿äÇÑ °ÍÀº °¡´ÉÇÑ ¸¹Àº °è»êÀ» µ¥ÀÌÅͺ£À̽º·Î ³Ñ°Ü¼­ ÇÁ·Î±×·¥Àº µ¥ÀÌÅͺ£À̽º ÁúÀÇ¿Í ÀÛ¾÷¿¡ ÇÊ¿äÇÑ Äڵ差À» ÁÙÀÌ´Â °ÍÀÌ´Ù. ¶Ç ¿©·¯ Ç׸ñÀÌ µ¥ÀÌÅͺ£À̽º Å×ÀÌºí¿¡ ÀúÀåµÇÀֱ⶧¹®¿¡ ¹Ù²ð ¼ö ÀÖ´Ù. ÀÌ·± Ç׸ñÀº ºÎºÐÇÕ°è, ¼¼±Ý, ¿î¼Ûºñ °è»ê¿¡ ¿µÇâÀ» ÁØ´Ù. ¿¬»êÀÚ¿Í ÁýÇÕ ÇÔ¼ö¸¦ (¾Æ¸¶µµ ÇÏÀ§ÁúÀǸ¦) »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é µ¥ÀÌÅͺ£À̽º¿¡ ¸¹Àº ÁúÀǸ¦ ÇÏ¿© ÇÁ·Î±×·¥ÀÇ Ãß°¡ ºÎ´ãÀ» ÁØ´Ù. ¿¹¸¦ °¢ Ç׸ñÀ¸·Î ³ª´«ÈÄ ¸¶Áö¸·¿¡¼­ Çϳª·Î ÇÕÄ¥ °ÍÀÌ´Ù.

ºÎºÐÇÕ°è °è»ê
ºñ±³Àû °£´ÜÇÑ °è»êÀÌ¿©¼­ ÁýÇÕ ÇÔ¼ö¿Í °£´ÜÇÑ ¿¬»êÀÚ¸¸À¸·Î ¾òÀ» ¼ö ÀÖ´Ù.

SELECT SUM(price*qty) AS subtotal FROM cart WHERE sessionid = '9j23iundo239new';

ÇÊ¿äÇÑ °ÍÀº ¸ðµç price * qtyÀÇ ÇÕÀÌ´Ù. ÀÌ ¿¹´Â ¿¬»êÀÚ¿Í ÁýÇÕ ÇÔ¼öÀÇ °áÇÕÀ» Àß º¸¿©ÁØ´Ù. SUN ÁýÇÕ ÇÔ¼ö´Â °¢ Çà´ÜÀ§ÀÇ °è»êÀÇ ÃÑÇÕÀ» ¹ÝȯÇÑ´Ù. ÀÌ ¼ø¼­¸¦ ÀØÁö¸¶¶ó!

¼¼±Ý °è»ê
ÀÌ °è»êÀº °£´ÜÇÑ SQL·Î Çϱâ Èûµé´Ù. ¿©±â¼­ ½ÇÁ¦ ¼¼·üÀ» ¾ò±âÀ§ÇØ COALESCE¸¦ »ç¿ëÇÑ´Ù. COALESCE´Â µÎ ¾Æ±Ô¸ÕÆ®¸¦ ¹Þ´Â´Ù. ù¹øÂ° ¾Æ±Ô¸ÕÆ®ÀÇ °á°ú°¡ nullÀ̶ó¸é µÎ¹øÂ° ¾Æ±Ô¸ÕÆ®¸¦ ¹ÝȯÇÑ´Ù. (nullÀÌ ¾Æ´Ï¶ó¸é ù¹øÂ° ¾Æ±Ô¸ÕÆ®ÀÇ °á°ú¸¦ ¹ÝȯÇÑ´Ù.) ÀÌ´Â Áö±Ý°ú °°Àº °æ¿ì¿¡ ¸Å¿ì À¯¿ëÇÏ´Ù. ÁúÀÇ´Â ´ÙÀ½°ú °°´Ù. ÁÖÀÇ: _subtotal_Àº ÇöÀç °¡»óÀÇ °ªÀÌ´Ù.

SELECT _subtotal_ * COALESCE(tax, 0) AS tax FROM tax WHERE state = 'TX';

¾Æ·¡¿¡¼­ °¢ ºÎºÐÀ» ÇÕÃÄ °¡»óÀÇ °ªÀ» Á¦°ÅÇÒ °ÍÀÌ´Ù.

¿î¼Ûºñ °è»ê
°£´ÜÈ÷ °¢ Ç׸ñ´ç ¿î¼Ûºñ°¡ $3À̶ó°í °¡Á¤ÇÏ´Ù. ³ªÁß¿¡ À̸¦ ½±°Ô È®ÀåÇÒ ¼ö ÀÖ´Ù. ¹«°Ô Çʵ带 »óǰ Å×ÀÌºí¿¡ Ãß°¡ÇÏ¿© ¿î¼Ûºñ¸¦ °è»êÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ¿©±â¼­´Â ´Ü¼øÈ÷ Àå¹Ù±¸´Ï Ç׸ñÀÇ °¹¼ö¿¡ 3À» °öÇÑ´Ù.

SELECT COUNT(*) * 3 FROM cart AS shipping WHERE sessionid = '9j23iundo239new';

¸ðµÎ ÇÕÄ¡ÀÚ
°¢ °è»ê °á°ú¸¦ µû·Î ¾ò´Â ¹æ¹ýÀ» ¾Ë¾ÒÀ¸´Ï À̸¦ ÇϳªÀÇ Å« Äõ¸®·Î ÇÕÄ¡ÀÚ. ÀÌ Äõ¸®´Â ¸ðµç °è»êÀ» ÇÏ¿© orders Å×ÀÌºí¿¡ ÀúÀåÇÑ´Ù.

INSERT INTO orders (customerid, subtotal, tax, shipping) VALUES (customerid, (SELECT SUM(price*qty) FROM cart WHERE sessionid = '9j23iundo239new'), (SELECT SUM(price*qty) FROM cart WHERE sessionid = '9j23iundo239new') * (SELECT COALESCE(tax, 0) FROM tax WHERE state = 'TX'), (SELECT COUNT(*) * 3 FROM cart WHERE sessionid = '9j23iundo239new'));

Ãß°¡·Î orders Å×ÀÌºí¿¡ ÃÑÇÕ Çʵ尡 ÀÖ´Ù¸é ´Ù¸¥ Äõ¸®·Î ºÎºÐÇ׸ñÀ» ¸ðµÎ ÇÕÄ¡°Å³ª INSERT Äõ¸®·Î Ãß°¡ÇÒ ¼ö ÀÖ´Ù. µÎ¹øÂ° ¹æ¹ýÀ» »ç¿ëÇÑ´Ù¸é ´ÙÀ½°ú °°´Ù.

UPDATE orders SET grandtotal = subtotal+tax+shipping WHERE orderid = 29898;

´ÙÀ½ µÎ Äõ¸®´Â ¼ø¼­´ë·Î »ç¿ëÇÏ¿© Àå¹Ù±¸´Ï¿¡ ³²Àº Ç׸ñÀ» orderdetail Å×À̺í·Î ¿Å±ä´Ù.

INSERT INTO orderdetail (orderid, productid, price, qty) values SELECT _yourorderid_, productid, price, qty FROM cart WHERE sessionid = '9j23iundo239new';
DELETE FROM cart WHERE sessionid = '9j23iundo239new';

°á·Ð:
ÁýÇÕ ÇÔ¼ö´Â SQL ¼­¹ö°¡ ¿©·¯ °è»êÀ» ó¸®ÇÏ¿© ÇÁ·Î±×·¥À» ´Ü¼øÇϰÔÇÏ°í ¼Óµµ¸¦ ºü¸£°Ô ÇÑ´Ù. ´õ º¹ÀâÇÑ ÇÁ·Î±×·¥¿¡¼­µµ º¸°í¼­ µîÀÇ ¸ñÀûÀ¸·Î ¿©·¯ Å×ÀÌºí¿¡¼­ ¿øÇÏ´Â °á°ú¸¦ ¾ò´Âµ¥ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¬»êÀÚ´Â Å×ÀÌÅͺ£À̽º°¡ ¹ÝȯÇÏ´Â °á°úÀÇ ÁúÀ» ³ôÀδÙ. ¿¬»êÀÚ¿Í ÁýÇÕ ÇÔ¼ö¸¦ Àß »ç¿ëÇϸé ÇÁ·Î±×·¥ÀÇ ¼Óµµ¿Í Á¤È®¼ºÀ» ³ôÀÌ´Â °ÍÀº ¹°·ÐÀ̰í, °á°ú¸¦ ¹Ýº¹ÇÏ¸ç °è»êÇÏ´Â ºÒÇÊ¿äÇÑ Äڵ带 ÁÙ¿©ÁØ´Ù.

ÀÌ ±ÛÀ» ¾²¸é¼­ Áñ±ä¸¸Å­ ´ç½Åµµ Áñ°Ì°Ô ÀÌ ±ÛÀ» ÀÐ°í ¹è¿ü±æ ¹Ù¶õ´Ù!

Branden R Williams

BrandenÀº ÇöÀç ±×°¡ ¿ÃÇØ °øµ¿¼±¸³ÇÑ e-ºñÁö´Ï½º¿Í º¸¾È ÄÁ¼³ÆÃ ȸ»çÀÎ ElliptixÀÇ ÄÁ¼³ÅÏÆ®ÀÌ´Ù. ±×´Â ÀÎÅͳݰü·Ã ±â¼ú, À¯´Ð½º °ü¸®, ³×Æ®¿÷ µðÀÚÀÎ/±¸¼º, ¸¹Àº ÇÁ·Î±×·¥ ¾ð¾î¿¡ 10³âÀÌ»ó °æÇèÀÌ ÀÖ´Ù. ÃÖ±Ù 6³â µ¿¾È ±â¾÷¼öÁØÀÇ ÀüÀÚ»ó°Å·¡ ÇÁ·Î±×·¥À» ¼³°è/°³¹ßÇß´Ù. ±×´Â Arlongton¿¡ ÀÖ´Â Texas´ë¿¡¼­ ¸¶ÄÉÆÃÀ» Àü°øÇß´Ù. ±×´Â brw@brw.net·Î ¿¬¶ôÇÒ ¼ö ÀÖ´Ù.


Copyright © 2001, Branden R Williams.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 70 of Linux Gazette, September 2001