SQL¹®¿¡¼ ¾²ÀÌ´Â ÇÔ¼öµé°ú ƯÁ¤ Ä÷³ÀÇ °ªÀ» ±×·ìÀ¸·Î ³ªÅ¸³¾ ¼ö ÀÖ´Â GROUP BY,
ƯÁ¤ Ä÷³ÀÇ °ªÀ» ³»¸²Â÷¼ø ȤÀº ¿À¸§ Â÷¼øÀ¸·Î Á¤·ÄÇØ ÁÖ´Â ORDER BY¿Í ¾Õ ȸ¿¡¼ ¹è¿î Á¶ÀÎ(Join)¸¸ÅÀ̳ª Áß¿äÇÑ
¼ºêÄõ¸®(SubQuery)¿¡ ´ëÇØ¼ »ìÆìº»´Ù.
SQL¹®¿¡¼ ¾²ÀÌ´Â ÇÔ¼öµé
SQL¹®¿¡¼ ¾²ÀÌ´Â ÇÔ¼öµéÀº »ý°¢ ÀÌ»óÀ¸·Î ¸¹´Ù. ±×·¸Áö¸¸ ½ÇÁö·Î ¾²ÀÌ´Â °ÍÀº ºñ±³Àû ÀûÀ¸¸ç ¿ì¸®´Â ÀÚÁÖ ¾²ÀÌ´Â
ÇÔ¼ö¸¦ Áß½ÉÀ¸·Î ¾Ë¾Æ º¼ °ÍÀÌ´Ù. ¸¸¾à ´õ ¸¹Àº ÇÔ¼öµéÀ» ¾Ë°í ½Í´Ù¸é °¢°¢ÀÇ µ¥ÀÌÅÍ º£À̽º »çÀÌÆ®¸¦ ¹æ¹®ÇØ º¸±æ ¹Ù¶õ´Ù.
Âü°í·Î ÀÌ ÇÔ¼öµéÀº mysql¿¡¼ »ç¿ëÇÏ´Â ÇÔ¼öµéÀÌ¸ç °¢°¢ÀÇ µ¥ÀÌÅÍ º£À̽ºº°·Î ±â´ÉÀº °°Áö¸¸ ÇÔ¼ö À̸§Àº ´Ù¸¦ ¼ö ÀÖ´Ù.
1) ¼ýÀÚ ÇÔ¼ö
ABS(X) : X ¿¡ ÇØ´çÇÏ´Â Àý´ë °ªÀ» µ¹·ÁÁØ´Ù.
SIGN(X) : XÀÇ °ªÀÇ ºÎÈ£ °ªÀ» µ¹·Á ÁØ´Ù.(-1 : À½¼ö, 0 : 0, 1 : ¾ç¼ö)
MOD(N,M) : NÀ» MÀ¸·Î ³ª´« °ªÀÇ ³ª¸ÓÁö¸¦ µ¹·Á ÁØ´Ù.
FLOOR(X) : ½Ç¼ö X °ªÀÇ ¼Ò¼öÁ¡ ÀÌÇÏÀÇ °ªÀº ¹ö¸²À» ÇÑ Á¤¼ö °ªÀ» µ¹·Á ÁØ´Ù.
CEILING(X) : ½Ç¼ö X °ªÀÇ ¼Ò¼öÁ¡ ÀÌÇÏÀÇ °ªÀ» ¿Ã¸²À» ÇÑ Á¤¼ö °ªÀ» µ¹·Á ÁØ´Ù.
ROUND(X,D) : ½Ç¼ö X °ª¿¡¼ ¼Ò¼öÁ¡¿¡¼ D + 1¹øÂ°¿¡ ÇØ´çÇÏ´Â °ªÀ» ¿Ã¸²ÇÑ °ªÀ» µ¹·Á ÁØ´Ù.
POWER(X,Y) : XÀÇ °ªÀ» Y¹ø °öÇÑ °ªÀ» µ¹·Á ÁØ´Ù.
RAND() : 0¿¡¼ 1 »çÀÌÀÇ ¼ýÀÚ¸¦ ·£´ýÇÏ°Ô ¹ß»ý½Ã°Ü µ¹·ÁÁØ´Ù.
SELECT abs(-2),abs(2),sign(-45),sign(0),sign(34),mod(23,7);
SELECT floor(1,234),ceiling(1,234),round(2,49),round(2,51);
SELECT power(3,2),power(3,3),rand();
¹®ÀÚ¿ÇÔ¼ö
2) ¹®ÀÚ¿ ÇÔ¼ö
CHAR(N,...) : N(1-256ÀÇ Á¤¼Ò)°ªÀÇ ¾Æ½ºÅ°Äڵ带 ÇØ´ç ¹®ÀÚ·Î Ãâ·ÂÇÑ´Ù.
CONCAT(str1,str2,...) : °¢°¢ÀÇ str1,str2,...µîÀ» ÇϳªÀÇ ½ºÆ®¸µÀ¸·Î µ¹·Á ÁØ´Ù. ´Ü, NULL ÀÌ ÀÖÀ¸¸é NULL À» Ãâ·ÂÇÑ´Ù.
CONCAT_WS(separator, str1, str2,...) : °¢°¢ÀÇ str1,str2,...µîÀ» separatorÀ» ±¸ºÐÀÚ·Î »ç¿ëÇÏ¿© ÇϳªÀÇ ½ºÆ®¸µÀ¸·Î Ãâ·ÂÇÑ´Ù.
LENGTH(str) : strÀÇ ¹®ÀÚÀÇ ±æÀ̸¦ Ãâ·ÂÇÑ´Ù.
SELECT char(48),char(76),concat(('My','S','ql'),concat('My',NULL,'Sq;');
SELECT concat_ws(',','My',NULL,'Sql',' ','is',' ','Good');
SELECT length('mysql'),locate('bar','foobarbar');
[±×¸²2] ¹®ÀÚ ÇÔ¼ö¸¦ ½ÇÇàÇÑ °á°ú
LOCATE(substr,str) : str¿¡¼ substrÀÌ À§Ä¡ÇÑ Ã¹¹øÂ° À§Ä¡¸¦ Á¤¼ö °ªÀ¸·Î Ãâ·ÂÇÑ´Ù.
LEFT(str,len) : str¿¡¼ ÁöÁ¤ÇØÁØ ÀÚ¸´¼ö len¸¸Å ¿ÞÂÊ¿¡¼ºÎÅÍ ¹®ÀÚ¿À» Ãâ·ÂÇÑ´Ù.
RIGHT(str,len) : str¿¡¼ ÁöÁ¤ÇØÁØ ÀÚ¸´¼ö len¸¸Å ¿À¸¥ÂÊ¿¡¼ºÎÅÍ ¹®ÀÚ¿À» Ãâ·ÂÇÑ´Ù.
SUBSTRING(str,pos,len) : ¹®ÀÚ¿ str¿¡¼ ƯÁ¤ ½ÃÀÛÀ§Ä¡ pos¿¡¼ ÁöÁ¤µÈ ±æÀÌ len¸¸Å ¹®ÀÚ¸¦ Ãâ·ÂÇÑ´Ù.
LTRIM(str),RTRIM(str),TRIM(str) : strÀÇ ¿ÞÂÊ,¿À¸¥ÂÊ,ȤÀº ¾çÂÊ ¸ðµÎÀÇ °ø¹é ¹®ÀÚ¸¦ Á¦°ÅÇØ ÁØ´Ù.
SELECT left('mysql is good',3),right('mysql is good',3);
SELECT substring('mysql is good',1,5);
SELECT ltrim(' mysql'),rtrim(mysql '),trim(' mysql ');
[±×¸²3] ¹®ÀÚ ÇÔ¼ö¸¦ ½ÇÇàÇÑ °á°ú
SPACE(N) : N°³ ¸¸ÅÀÇ °ø¹é ¹®ÀÚ¸¦ ¸¸µé¾î Ãâ·ÂÇÑ´Ù.
REPLACE(str,from_str,to_str) : ¹®ÀÚ¿ str¿¡¼ ƯÁ¤¹®ÀÚ from_strÀ» ƯÁ¤ ¹®ÀÚ to_str·Î ¹Ù²Ù¾î Ãâ·ÂÇÑ´Ù.
REPEAT(str,count) : ¹®ÀÚ¿ strÀ» count °¹¼ö¸¸Å ¹Ýº¹ÇÏ¿© ¹Ýº¹ÇÑ °ªÀ» Ãâ·ÂÇÑ´Ù.
REVERSE(str) : ¹®ÀÚ¿ strÀ» ¿ªÀ¸·Î Ãâ·Â ÇÑ´Ù.
INSERT(str,pos,len,newstr) : ¹®ÀÚ¿ str¿¡¼ ƯÁ¤ À§Ä¡ pos¿¡¼ ƯÁ¤ ±æÀÌ len ¸¸ÅÀ» newstr¹®ÀÚ¿·Î ¹Ù²Ù¾î Ãâ·ÂÇÑ´Ù.
SELECT concat('a',space(6),'a');
SELECT replace('mysql is good','is','very'),repeat('a',3);
SELECT reverse('mysql'),insert('Quadratic',3,4,'What');
[±×¸²4] ¹®ÀÚ ÇÔ¼ö¸¦ ½ÇÇàÇÑ °á°ú
LCASE(str) : ¹®ÀÚ¿ strÀ» ¼Ò¹®ÀÚ·Î ¹Ù²Ù¾î Ãâ·ÂÇÑ´Ù.
UCASE(str) : ¹®ÀÚ¿ strÀ» ´ë¹®ÀÚ·Î ¹Ù²Ù¾î Ãâ·ÂÇÑ´Ù.
SELECT lcase('MYSQL'),ucase('mysql);
³¯Â¥½Ã°£ÇÔ¼ö
3) ³¯Â¥, ½Ã°£ ÇÔ¼ö
DAYOFWEEK(date) : ÇØ´ç³¯Â¥ÀÇ ¿äÀϰªÀ» Ãâ·ÂÇÑ´Ù.(1=ÀÏ¿äÀÏ,2=¿ù¿äÀÏ,3=È¿äÀÏ,...,7=Åä¿äÀÏ)
WEEKDAY(date) : DayOfWeek() ÇÔ¼ö¿Í °°Áö¸¸ ¿äÀϰªÀÌ ´Ù¸£´Ù.(0=¿ù¿äÀÏ,1=È¿äÀÏ,...,6=ÀÏ¿äÀÏ)
DAYOFMONTH(date) : ÇØ´ç³¯Â¥ÀÇ ³¯(1-31) °ªÀ» Ãâ·ÂÇÑ´Ù.
DAYOFYEAR(date) : ÀϳâÁß ¸î¹øÂ° ³¯(1-366)ÀÎÁö¸¦ Ãâ·ÂÇÑ´Ù.
MONTH(date) : ÇØ´ç ³¯Â¥ÀÇ ´Þ(1-12) °ªÀ» Ãâ·ÂÇÑ´Ù.
DAYNAME(date) : ÇØ´ç ³¯Â¥ÀÇ ¿äÀÏ °ªÀ» ½ºÆ®¸µÀ¸·Î Ãâ·ÂÇÑ´Ù.
SELECT dayofweek('2003-02-22'),weekday('2003-02-23');
SELECT dayofmonth('2003-02-22'),dayofyear('2003-02-23');
SELECT month('2003-02-22),dayname('2003-02-23');
[±×¸²6] ³¯Â¥, ½Ã°£ ÇÔ¼ö¸¦ ½ÇÇàÇÑ °á°ú
MONTHNAME(date) : ÇØ´ç ³¯Â¥ÀÇ ´Þ °ªÀ» ½ºÆ®¸µÀ¸·Î Ãâ·ÂÇÑ´Ù.
QUARTER(date) : ÃÑ 4ºÐ±âÁß ÇØ´ç ³¯Â¥ÀÇ ºÐ±â ¼ö °ªÀ» Ãâ·ÂÇÑ´Ù.
WEEK(date,first) : ÇØ´ç³¯Â¥°¡ 1³âÁß ¸î¹øÂ° ÁÖÀÎÁö¸¦ Ãâ·ÂÇÑ´Ù.
YEAR(date) : ÇØ´ç ³¯Â¥ÀÇ ³âµµ °ªÀ» Ãâ·ÂÇÑ´Ù.
YEARWEEK(date,first) : ÇØ´ç ³¯Â¥ÀÇ ³âµµ¿Í 1³âÁß ¸î¹øÂ° ÁÖÀÎÁö¸¦ Ãâ·ÂÇÑ´Ù.
HOUR(time) : ÇØ´ç ½Ã°£ÀÇ ½Ã °ªÀ» Ãâ·ÂÇÑ´Ù.
SELECT monthname('2003-02-22'),quarter('2003-02-23');
SELECT week('2003-02-22'),year('2003-02-23');
SELECT yearweek('2003-02-22'),hour('10:22:32');
[±×¸²7] ³¯Â¥, ½Ã°£ ÇÔ¼ö¸¦ ½ÇÇàÇÑ °á°ú
MINUTE(time) : ÇØ´ç ½Ã°£ÀÇ ºÐ °ªÀ» Ãâ·ÂÇÑ´Ù.
SECOND(time) : ÇØ´ç ½Ã°£ÀÇ ÃÊ °ªÀ» Ãâ·ÂÇÑ´Ù.
PERIOD_ADD(P,N) : P(YYMM or YYYYMM)°ª¿¡¼ N ´ÞÀ» »« °ªÀ» Ãâ·ÂÇÑ´Ù.
PERIOD_DIFF(P1,P2) : P1(YYMM or YYYYMM)°ú P2(YYMM or YYYYMM)ÀÇ ´Þ Â÷À̸¦ Ãâ·ÂÇÑ´Ù.
TO_DAYS(date) : 0³â ºÎÅÍ date±îÁöÀÇ ³¯ ¼ö¸¦ Ãâ·ÂÇÑ´Ù.
FROM_DAYS(N) : N(³¯)¿¡ ÇØ´çÇÏ´Â ³¯Â¥¸¦ Ãâ·ÂÇÑ´Ù.
SELECT minute('10:22:32'),second('10:22:32');
SELECT period_add(200302,3),period_diff(0302,200209);
SELECT to_days(20030222),from_days(731633);
[±×¸²8] ³¯Â¥, ½Ã°£ ÇÔ¼ö¸¦ ½ÇÇàÇÑ °á°ú
DATE_FORMAT(date,format) : dateÀÇ ³¯Â¥ °ªÀ» ¿øÇÏ´Â format °ªÀ¸·Î ¹Ù²Ù¾î Ãâ·ÂÇÑ´Ù.
TIME_FORMAT(time,format) : timeÀÇ ½Ã°£ °ªÀ» ¿øÇÏ´Â format °ªÀ¸·Î ¹Ù²Ù¾î Ãâ·ÂÇÑ´Ù.
CURDATE() : ÇöÀçÀÇ ³¯Â¥ °ªÀ» Ãâ·ÂÇÑ´Ù.
CURTIME() : ÇöÀç ½Ã°£À» Ãâ·ÂÇÑ´Ù.
NOW() : ÇöÀç ½Ã½ºÅÛÀÇ ³¯Â¥¿Í ½Ã°£À» Ãâ·ÂÇÑ´Ù.
SELECT date_format('2003-02-22 22:23:00','%D %y %a %d %m %b %j');
SELECT time_format('22:23:00','%H %k %h %i %I %r %p %s %S');
SELECT curdate(),curtime(),now();
Á¦¾îÇÔ¼ö
4) Á¦¾î ÇÔ¼ö
1) ~ 3)±îÁöÀÇ ÇÔ¼öµéÀº À̸§¸¸ µé¾îµµ ´ë°Àº ¾î¶² ÇÔ¼öÀÏ °Å¶õ °ÍÀ» ¿¹»ó ÇÒ °ÍÀÌ´Ù. ±×·³ Á¦¾î ÇÔ¼ö¶õ ¹«¾ùÀΰ¡.
À̵é ÇÔ¼ö´Â ÀϹÝÀûÀÎ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼ÀÇ Á¶°Ç¹®°ú °°Àº ¿ªÇÒÀ» ÇÏ´Â ÇÔ¼öµéÀÌ´Ù.
Á¾·ù·Î´Â IsNULL,NULLIF,IF,CASEµîÀÌ ÀÖÀ¸¸ç À̵é ÇÔ¼ö·Î ÀÎÇØ SQL¹® ¾È¿¡¼ °ªµéÀ» Á¦¾î ÇÒ ¼ö°¡ ÀÖ´Ù.
IFNULL(expr1,expr2) : expr1 °ªÀÌ ³ÎÀ̸é expr2°ªÀÌ Ãâ·ÂÀÌ µÇ´Â ÇÔ¼ö
NULLIF(expr1,expr2) : expr1 °ª°ú expr2°ªÀÌ °°À¸¸é NULLÀÌ Ãâ·ÂÀÌ µÇ°í ´Ù¸£¸é expr1 °ªÀÌ Ãâ·ÂµÇ´Â ÇÔ¼ö
IF(expr1,expr2,expr3) : expr1 °ªÀÌ ÂüÀ̸é expr2 °ªÀÌ Ãâ·ÂµÇ°í °ÅÁþÀ̸é expr3°ªÀÌ Ãâ·ÂµÇ´Â ÇÔ¼ö
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END :
value °ªÀÌ WHEN ´ÙÀ½ÀÇ compare-value°ª°ú °°À¸¸é THEN ´ÙÀ½ÀÇ result °ªÀ» Ãâ·ÂÇÏ´Â ÇÔ¼ö
SELECT IFNULL(NULL,2),IFNULL(1,2),IF(1 > 0,1,0),IF(1 < 0,1,0);
SELECT CASE 1 WHEN 1 THEN "one"
WHEN 2 THEN "two" ELSE "more" END;
[±×¸²10] Á¦¾î ÇÔ¼ö¸¦ ½ÇÇàÇÑ °á°ú
Áö±Ý±îÁö SQL¹®¿¡¼ ¸¹Àº ¾²ÀÌ´Â ÇÔ¼öµé¿¡ ´ëÇØ¼ °øºÎÇØ º¸¾Ò´Ù. À̵é ÇÔ¼ö ¸»°íµµ ¸¹Àº ´Ù¸¥ ÇÔ¼öµéÀÌ Á¸ÀçÇÏ´Ï
²À ÇѹøÂëÀº ºÁ µÎ±æ ¹Ù¶õ´Ù. ´ÙÀ½Àº Gruop By Àý°ú GROUP BY Àý°ú °°ÀÌ ¾²ÀÌ´Â ±×·ìÇÔ¼ö¿¡ ´ëÇØ¼ ¾Ë¾Æº¸ÀÚ.
GROUP BY
GROUP BY¿¡ ´ëÇØ¼
GROUP BY ¹®Àº SELECT ¹®À¸·Î µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ ¾ò¾î¿À´Â ³»¿ë Áß¿¡ ÃÖ´ë°ª, ÃÖ¼Ò°ª, ÇÕ°è, Æò±Õ ȤÀº ºÐ»êµî
¿©·¯ ¿ÀÇ Ä÷³À» Æ÷ÇÔÇÏ´Â ÁýÇÕ ¿¬»ê(aggregate function)ÀÌ Àû¿ëµÈ °æ¿ì¿¡ ÁÖ·Î »ç¿ëµÈ´Ù. ÀÌ·± ¿¬»ê¿¡ »ç¿ëÇÏ´Â
ÇÔ¼ö´Â Á»´õ ÈÄ¿¡ ¹è¿ì°í ¸ÕÀú GROUP BY¹®¿¡ ´ëÇØ¼ ¾Ë¾Æ º¸°Ú´Ù.
GROUP BYÀýÀº ƯÁ¤ Ä÷³ÀÇ °ªµéÀ» Çϳª·Î ¹´Â ¿ªÇÒÀ» ÇÑ´Ù. ÀÌ ¸»Àº ƯÁ¤ Ä÷³ÀÇ °ªÀÌ °°À¸¸é ±× ¿ °ªÀº ÇϳªÀÇ
¿ °ªÀ¸·Î Ãë±ÞÇÑ´Ù´Â ¸»ÀÌ´Ù. ¹é¹®ÀÌ ºÒ¿©ÀϰßÀ̶ó°í ¸ÕÀú Á÷Á¢ Å×½ºÆ®¸¦ ÇØº¸ÀÚ. Å×½ºÆ®¸¦ Çϱâ À§Çؼ ´ÙÀ½°ú
°°ÀÌ Å×À̺íÀ» Çϳª ¸¸µç´Ù.
CREATE TABLE group_test(
id varchar(10) not null,
number int not null,
string varchar(10) not null
}
À§¿Í °°ÀÌ ¸¸µé¾ú´Ù¸é Å×ÀÌºí¿¡ °ªÀ» ´ÙÀ½ ±×¸²°ú °°ÀÌ ³Ö¾î º¸ÀÚ.
SELECT * FROM group_test;
[±×¸²11] Group_test Å×ÀÌºí ¿(row)¸®½ºÆ®
ÀÌÁ¦ ¸»·Î¸¸ ¶°µéÁö ¸»°í Á÷Á¢ Å×½ºÆ®¸¦ ÇØº¸ÀÚ. °ú¿¬ ¾î¶² °á°ú°¡ ³ª¿ÃÁö. string Ä÷³À» ±×·ìÈÇÏ¿© º¸ÀÚ.
SELECT * FROM group_test GROUP BY string;
[±×¸²12] StringÀ» ±×·ìÈÇÑ °á°ú
À§ÀÇ ±×¸²Ã³·³ ¸¹Àº º¯È°¡ »ý°å´Ù. ÀÌ·¸µí ƯÁ¤ Ä÷³À» ±×·ìÈÇÏ¸é ±× Ä÷³ÀÇ µ¿ÀÏÇÑ °ªÀº Çϳª·Î ¹¿© Ãâ·ÂÀÌ µÈ´Ù.
ÀÌÁ¦´Â ÀÌ Group By ÀýÀ» »ç¿ëÇÏ¿© ±×·ìÇÔ¼ö¸¦ »ç¿ëÇØ º¸ÀÚ.
±×·ìÇÔ¼ö(aggregate function)¿¡ ´ëÇØ¼
±×·ìÇÔ¼ö(aggregate function)¿¡ ´ëÇØ¼
±×·ì ÇÔ¼öµµ ¿©·¯°³°¡ Á¸Àç ÇÏÁö¸¸ ¿©±â¼´Â ÀÚÁÖ »ç¿ëÇÏ´Â ÇÔ¼ö ¸î °³¿¡ ´ëÇØ¼ ¼³¸íÀ» ÇϰڴÙ.
±× Àü¿¡ ±×·ìÇÔ¼ö¶ó ÇÏ¿© ²À GROUP BYÀý°ú °°ÀÌ »ç¿ëÇØ¾ß ÇÏ´Â °ÍÀº ¾Æ´Ï¸ç ´ÜÁö ÀϹÝÀûÀ¸·Î
SELECT Ä÷³1,±×·ìÇÔ¼ö FROM test1
¿Í °°Àº ºñ½ÁÇÑ Çü½ÄÀÏ °æ¿ì¿¡´Â GROUP BYÀýÀ» °°ÀÌ »ç¿ëÇÏ¿©¾ß ÇÑ´Ù. ±×·¸Áö ¾Ê°í ±×·ìÇÔ¼ö¸¸ ¾µ °æ¿ì¿¡´Â GROUP BY ÀýÀ»
²À °°ÀÌ ½á¾ß ÇÒ ÇÊ¿ä´Â ¾ø´Ù.
AVG() : ÀÌ ÇÔ¼ö´Â ()¾ÈÀÇ Ä÷³µéÀÇ Æò±ÕÀ» Ãâ·ÂÇÏ´Â ÇÔ¼öÀÌ´Ù.
MAX() : ÀÌ ÇÔ¼ö´Â ()¾ÈÀÇ Ä÷³µé Áß °¡Àå Å« °ªÀ» Ãâ·ÂÇÏ´Â ÇÔ¼öÀÌ´Ù.
MIN() : ÀÌ ÇÔ¼ö´Â ()¾ÈÀÇ Ä÷³µé Áß °¡Àå ÀÛÀº °ªÀ» Ãâ·ÂÇÏ´Â ÇÔ¼öÀÌ´Ù.
SUM() : ÀÌ ÇÔ¼ö´Â ()¾ÈÀÇ Ä÷³µéÀÇ ÇÕ°èÀ» Ãâ·ÂÇÏ´Â ÇÔ¼öÀÌ´Ù.
COUNT() : ÀÌ ÇÔ¼ö´Â ·¹Å©µåÀÇ ¼ö¸¦ Ãâ·ÂÇÏ´Â ÇÔ¼öÀÌ´Ù.
SELECT count(*),avg(number),max(string),min(id),sum(number) FROM group_test;
[±×¸²13] ±×·ì ÇÔ¼ö¸¦ ½ÇÇàÇÑ °á°ú
ÀÌÁ¦ À̵éÀ» Ȱ¿ëÇØ º¸ÀÚ. ¾î¶² °æ¿ì¿¡ À̵éÀ» È¿À²ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖÀ»±î?
¿¹¸¦ µé¾î ¾î¶² »ç¶÷ÀÌ 'id°¡ 'kim'À̶ó´Â »ç¶÷ÀÇ numberÀÇ °ªÀÇ Æò±Õ°ú ÃÑÁ¡À» ±¸ÇÏ°í ½Í´Ù'¶ó°í ÁÖ¹®À» ÇØ¿Ô´Ù.
±×·¯¸é ¿©·¯ºÐµéÀº ¾î¶»°Ô Çϰڴ°¡? Áö±Ý±îÁö ¹è¿îµ¥·Î ¸ÕÀú À̵éÀÇ °ªÀ» ±¸Çغ¸ÀÚ.
SELECT avg(number),sum(number) FROM group_test WHERE id = 'kim';
[±×¸²14] id°¡ 'kim'ÀÎ »ç¶÷ÀÇ Æò±Õ°ú ÃÑÁ¡ °á°ú
¿©±â±îÁö´Â ¹®Á¦°¡ ¾ø´Ù. ±×·¸´Ù¸é ÀÌÁ¦´Â idº°·Î ±× »ç¶÷µéÀÇ numberÀÇ °ªÀÇ Æò±Õ°ú ÃÑÁ¡À» ±¸ÇÏ°í ½Í´Ù°í ÇÑ´Ù.
±×·¯¸é ¿©·¯ºÐµéÀº ¾î¶»°Ô ÇÏ¸é µÇ°Ú´Â°¡? ±×·¸´Ù. ÀÌ·²¶§ À¯¿ëÇÏ°Ô ¾²ÀÌ´Â °ÍÀÌ GROUP BY ÀýÀÌ´Ù.
À̸¦ »ç¿ëÇÏ¿© id¸¦ ±×·ìÈÇϸé ÀÌµé °¢°¢ÀÇ Æò±Õ°ú ÃÑÁ¡À» ±¸ÇÒ ¼ö ÀÖ´Ù.
SELECT id,avg(number),sum(number) FROM group_test GROUP BY id;
[±×¸²15] °¢°¢ÀÇ »ç¶÷ÀÇ Æò±Õ°ú ÃÑÁ¡ °á°ú
ORDER BY Àý¿¡ ´ëÇØ¼ ÀÌÁ¦´Â °á°ú °ªÀ» Á¤·ÄÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼ ¾Ë¾Æº¸ÀÚ. Á¤·ÄÀ» Çϱâ À§Çؼ »ç¿ëÇÏ´Â °ÍÀÌ ORDER BY ÀýÀÌ´Ù.
ÀÌ ÀýÀº ƯÁ¤ Ä÷³À» Áß½ÉÀ¸·Î ³»¸²Â÷¼ø Á¤·Ä ȤÀº ¿À¸§Â÷¼ø Á¤·ÄÀ» ÇÒ ¼ö°¡ ÀÖ´Ù. ±×·³ ¸ÕÀú Çü½ÄÀ» º¸ÀÚ.
ORDER BY ƯÁ¤ Ä÷³1 [Asc|Desc],ƯÁ¤ Ä÷³2 [Asc|Desc],...
À̸ç Á¦ÀÏ ¸ÕÀú ƯÁ¤ Ä÷³1ÀÌ Á¤·ÄÀÌ µÇ°í ±× Á¤·Ä ¼Ó¿¡¼ ƯÁ¤ Ä÷³2°¡ Á¤·ÄÀÌ µÈ´Ù. ±×·³ Á÷Á¢ ½Ç½ÀÀ» ÇØº¸ÀÚ.
SELECT * FROM group_test ORDER BY id ASC,number DESC, string ASC;
[±×¸²16] ORDER BY ÀýÀ» »ç¿ëÇÑ °á°ú
ÀÌ·¸°Ô ORDER BY ÀýÀ» ÀÌ¿ëÇÏ¸é ¿øÇÏ´Â Á¤·ÄÀÌ °¡´ÉÇÏ´Ù.
¿©±â¼ ÇѰ¡Áö ÁÖÀÇÇÒ Á¡ÀÌ Àִµ¥ ORDER BY ÀýÀ» ¸ÕÀú ¾²°í GROUP BYÀýÀ» ³ªÁß¿¡ ¾²¸é ¿À·ù°¡ ¹ß»ýÇϹǷÎ
¹Ýµå½Ã GROUP BY¿Í ORDER BY ÀýÀ» °°ÀÌ ¾µ °æ¿ì¿¡´Â GROUP BYÀýÀ» ¸ÕÀú ¾²°í µÚ¿¡ order byÀýÀ» ¾²±æ ¹Ù¶õ´Ù.
ÀϹÝÀûÀÎ SQL¹® ¼ø¼
SELECT Ä÷³1,Ä÷³2,... FROM Å×À̺í1,Å×À̺ê2,.. WHERE Á¶°Ç¹® GROUP BY ±×·ìÈ ÇÒ Ä÷³1,Ä÷³2,...
ORDER BY Á¤·ÄÇÒ Ä÷³1 [ASC|DESC],Ä÷³2,[ASC|DESC],...
¼ºêÄõ¸®(SubQuery?)¿¡ ´ëÇØ¼
¼ºêÄõ¸®(SubQuery)¿¡ ´ëÇØ¼
µåµð¿© ¿©±â±îÁö ¿Ô´Ù. ÀÌ ºÎºÐÀº Á¶ÀÎ(Join)ó·³ ¸Å¿ì Áß¿äÇϹǷΠ²À ¸¶½ºÅÍ ÇÏ±æ ¹Ù¶õ´Ù.
ÀÌÁ¨ Á¶ÀÎ(Join)¿¡ ´ëÇØ¼ ¾î´À Á¤µµ ÀÌÇØ°¡ °¡´Â°¡? ±×·¸´Ù¸é Á¶ÀÎ(join)¸¸ÅÀ̳ª Áß¿äÇϰí
º¹ÀâÇÑ ¼ºêÄõ¸®(SubQuery)¿¡ ´ëÇØ¼ ¾Ë¾Æº¸ÀÚ. ¸ÕÀú ¾Ë¾Æ º¸±â Àü¿¡ ´ÙÀ½°ú °°ÀÌ Å×À̺íÀ» ¸¸µç´Ù.
Âü°í·Î MySQL¿¡¼´Â ¼ºêÄõ¸®(SubQuery)¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù. mysql.com ¿¡ µû¸£¸é 4.1¹öÀüºÎÅÍ Áö¿øÀ» ÇÑ´Ù°í
ÇÏ¸ç ¿ì¸®´Â ÀÏ´Ü PostgreSQL¸¦ »ç¿ëÇÏ¿© Å×½ºÆ®¸¦ ÇÒ °ÍÀÌ´Ù.
CREATE TABLE Student(
ID varchar(50),
Name varchar(50),
Class int
);
CREATE TABLE Score(
ID varchar(50),
Score int
);
À§¿Í °°ÀÌ Å×À̺íÀ» ¸¸µé¾ú´Ù¸é [±×¸²17]°ú [±×¸²18]ó·³ ¿¸¦ Ãß°¡ÇÑ´Ù.
SELECT * FROM Student;
[±×¸²17] Student Å×ÀÌºí ¼Ó ¿
SELECT * FROM Score;
[±×¸²16] Score Å×ÀÌºí ¼Ó ¿
Ãß°¡ ÇÏ¿´´Ù¸é ÀÌÁ¦ º»°ÝÀûÀ¸·Î ¼ºêÄõ¸®(SubQuery)¿¡ ´ëÇÏ¿© °øºÎÇÏ¿© º¸ÀÚ.
¼ºêÄõ¸®(SubQuery)´Â SELECT, INSERT, UPDATE, DELETE ¹®À̳ª ´Ù¸¥ ¼ºêÄõ¸®(SubQuery) ³»ºÎ¿¡ ÁßøµÈ SELECT Äõ¸®ÀÌ´Ù.
¼ºêÄõ¸®(SubQuery)´Â ½ÄÀÌ Çã¿ëµÇ´Â ¸ðµç À§Ä¡¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ°í ()·Î ¹¾î¼ »ç¿ëµÈ´Ù.
´ÙÀ½ ¿¹Á¦¿¡¼ ¼ºêÄõ¸®(SubQuery)´Â SELECT ¹®¿¡¼ Score ¶ó´Â Ä÷³À¸·Î »ç¿ëµÈ´Ù.
SELECT a.Name, a.Class,
(SELECT Score FROM Math AS b
WHERE b.ID = a.ID) AS Score
FROM Student AS a
À̰ÍÀº ÇлýµéÀÇ À̸§°ú ¹Ý, Á¡¼öÀ» »Ì¾Æ³»´Â ¼ºêÄõ¸®(SubQuery)¹®ÀÌ´Ù.
´ëºÎºÐÀÇ ¼ºêÄõ¸®(SubQuery)¹®Àº Á¶ÀÎ(join)À¸·Î ³ªÅ¸³¾ ¼ö °¡ ÀÖ´Ù.
¶ÇÇÑ ¼ºêÄõ¸®(SubQuery)°¡ Æ÷ÇÔµÈ ¹®ÀåÀ̳ª ÀÇ¹Ì»ó µ¿ÀÏÇÑ ¹®Àå¿¡¼´Â ¼ºêÄõ¸®(SubQuery)³ª Á¶ÀÎ(Join)À̳ª ¼º´É¸é¿¡¼´Â Â÷À̰¡ ¾ø´Ù.
ÀÌÁ¦ À§ÀÇ ¹®ÀåÀ» Å×½ºÆ® ÇØº¸ÀÚ.
[±×¸²19] À§ÀÇ ¼ºêÄõ¸®(SubQuery)¹® ½ÇÇà °á°ú
À§¿¡¼ ÇÏÀ§ Äõ¸®(SubQuery)´Â ´ëºÎºÐÀÌ Á¶ÀÎ(Join)À¸·Î Ãâ·ÂÇÒ ¼ö ÀÖ´Ù°í Çß´Ù. ±×·³ ÀÌÁ¨ ¾Õ °¿¡¼ ¹è¿î Á¶ÀÎ(Join)À¸·Î Ãâ·ÂÇØº¸ÀÚ.
SELECT a.Name,a.Class,b.Score FROM Student a INNER JOIN Score b ON b.ID = a.ID;
[±×¸²20] À§ÀÇ ¼ºêÄõ¸®(SubQuery)¹®À» Á¶ÀÎ(join)¹®À¸·Î º¯°æÇÏ¿© ½ÇÇàÇÑ °á°ú
³»¿ëÀ» º¸¸é ¶È°°Àº °á°ú¸¦ Ãâ·ÂÇÏ¿´´Ù. ¼ºêÄõ¸®(SubQuery)¿¡ ´ëÇØ¼ À§¿¡¼ ¼³¸íÇÒ ¶§ ½ÄÀÌ Çã¿ëÇÏ´ÂÇÑ ¾îµð¿¡¼µç
»ç¿ëÇÒ ¼ö ÀÖ´Ù°í Çß´Ù. ±×·³ ÀÌÁ¦´Â ¼ºêÄõ¸®(SubQuery)¹®À» ÇöÀçÀÇ À§Ä¡°¡ ¾Æ´Ñ ´Ù¸¥ À§Ä¡¿¡¼ »ç¿ëÇÏ¿© º¸ÀÚ.
±âº»ÀûÀÎ Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
SELECT Ä÷³1,Ä÷³2,.....
FROM Å×À̺í1 where ºñ±³ÇÒ Ä÷³ [IN|NOT IN]
(select ºñ±³ÇÒ Ä÷³ From Å×À̺í2)
¿©±â¼ ÁÖ¸ñÇÒ °÷Àº IN°ú NOT INÀÌ´Ù. INÀº =¿Í °°Àº ¶æÀ̸ç NOT INÀº !=°ú °°Àº ¶æÀ¸·Î »ç¿ëµÈ´Ù. ±×·³ °£´ÜÇÑ ½Ç½ÀÀ» ÇØº¸ÀÚ.
SELECT ID,Name,Class FROM Student WHERE ID IN (SELECT ID FROM Score);
SELECT ID,Name,Class FROM Student WHERE ID NOT IN (SELECT ID FROM Score);
[±×¸²21] À§ÀÇ ¼ºêÄõ¸®(SubQuery)¹®¿¡¼ IN°ú NOT INÀÇ Â÷ÀÌ
ÀÌ»ó°ú °°ÀÌ ¼ºêÄõ¸®(SubQuery)¿¡ ´ëÇØ¼ »ìÆìº¸¾Ò´Ù. ¾ÕÀ¸·Î µ¥ÀÌÅÍ º£À̽º¸¦ »ç¿ëÇÏ¸é¼ ¼ºêÄõ¸®(SubQuery)¹®°ú
Á¶ÀÎ(join)¹®Àº ¼º´ÉÇâ»óÀ» À§Çؼµµ ²À ÇÊ¿äÇÑ °ÍµéÀ̹ǷΠ¹Ýµå½Ã ¸¶½ºÅÍÇÏ±æ ¹Ù¶õ´Ù. Âü°í·Î MSSQL°ú ¿À¶óŬµî
»ó¾÷ÀûÀÎ µ¥ÀÌÅÍ º£À̽º´Â IN,NOT IN»Ó¸¸ÀÌ ¾Æ´Ï¶ó =,!=,<,>µîÀ» ¼ºêÄõ¸®(SubQuery)¿¡¼µµ Áö¿øÇϰí ÀÖ´Ù.
ÀÌ°Ç ¿ÀÇ ¼Ò½º µ¥ÀÌÅÍ º£À̽ºÀÇ ÇѰè·Î ¾ÕÀ¸·Î ÀÌµé ¿ÀÇ ¼Ò½º µ¥ÀÌÅÍ º£À̽ºµµ ¿ª½Ã Áö¿øÀ» ÇÒ °ÍÀÌ´Ù.