 |
|
|  |
[MySQL]UNION°ú UNION ALL ÀÇ Â÷ÀÌ ¹× ÁÖÀÇ »çÇ× |
|
|
 |
13³â Àü |
ANSI SQL¿¡¼ Á¦¾ÈÇÏ´Â ÁýÇÕ ¿¬»ê "UNION", "INTERSECT", "MINUS" Áß¿¡¼
MySQL¿¡¼´Â UNION ÁýÇÕ ¿¬»ê¸¸ Á¦°øÇÏ°í ÀÖ´Ù.
(ÇÏÁö¸¸ MySQL¿¡¼ INTERSECT³ª MINUS¸¦ ´Ù¸¥ ÇüÅÂÀÇ Äõ¸®·Î Ç®¾î¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù.)
ÀÌ ±Û¿¡¼´Â UNION ¿¡ ´ëÇؼ Á» ´õ ÀÚ¼¼È÷ ¾Ë¾Æ º¸°íÀÚ ÇÑ´Ù.
UNION ÁýÇÕ ¿¬»êÀº ´Ù½Ã ¾Æ·¡¿Í °°ÀÌ µÎ°¡Áö Á¾·ù·Î ³ª´©¾îÁø´Ù.
- UNION ALL
- UNION DISTINCT
¿ì¸®°¡ ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â ¹æ½ÄÀÎ ¾Æ¹«·± Ãß°¡ Å°¿öµå ¾øÀÌ UNION ¸¸ »ç¿ëÇÏ´Â °ÍÀº
UNION DISTINCT ¸¦ ÁÙ¿©¼ »ç¿ëÇÏ°í ÀÖ´Â °ÍÀÌ´Ù.
UNION ALL°ú UNION DISTINCT¸¦ ·¹Äڵ尡 ¸¹Àº °á°ú¿¡ ´ëÇؼ Àû¿ëÇغ» »ç¶÷Àº
¾Æ¸¶µµ µÑÀÇ Ã³¸® ¹æ½Ä¿¡ ´ëÇؼ ÀDZ¸½ÉÀ» °¡Á®º» ÀûÀÌ ÀÖÀ» °ÍÀÌ´Ù.
·¹ÄÚµå °Ç¼ö°¡ ¸¹¾ÆÁö¸é ¸¹¾ÆÁú¼ö·Ï ±× ¼º´É Â÷ÀÌ´Â ¾öû³ Â÷À̸¦ º¸¿©ÁÙ °ÍÀÌ´Ù.
¿ì¼±, ¾Æ·¡¿Í °°ÀÌ 2°³¾¿ µ¿ÀÏÇÑ ·¹ÄÚµå µ¥ÀÌÅ͸¦ °¡Áö°í ÀÖ´Â tab1°ú tab2¶ó´Â Å×À̺íÀÌ ÀÖ´Ù.
mysql>SELECT fdpk, fddata FROM tab1;
+------+--------+
| fdpk | fddata |
+------+--------+
| 1 | data1 |
| 2 | data2 |
+------+--------+
2 rows in set (0.00 sec)
mysql>SELECT fdpk, fddata FROM tab2;
+------+--------+
| fdpk | fddata |
+------+--------+
| 1 | data1 |
| 2 | data2 |
+------+--------+
2 rows in set (0.01 sec)
±×·¯¸é, ÀÌ µÎ°³ Å×ÀÌºí¿¡ ´ëÇؼ °¢°¢ UNION°ú UNION ALLÀ» »ç¿ëÇÏ´Â Äõ¸®¸¦ ½ÇÇàÇغ¸ÀÚ.
mysql>SELECT fdpk, fddata
-> FROM (
-> SELECT fdpk, fddata FROM tab1
-> UNION ALL
-> SELECT fdpk, fddata FROM tab2
-> ) x;
+------+--------+
| fdpk | fddata |
+------+--------+
| 1 | data1 |
| 2 | data2 |
| 1 | data1 |
| 2 | data2 |
+------+--------+
4 rows in set (0.00 sec)
mysql>SELECT fdpk, fddata
-> FROM (
-> SELECT fdpk, fddata FROM tab1
-> UNION
-> SELECT fdpk, fddata FROM tab2
-> ) x;
+------+--------+
| fdpk | fddata |
+------+--------+
| 1 | data1 |
| 2 | data2 |
+------+--------+
2 rows in set (0.00 sec)
µÎ°³ÀÇ Äû¸® ½ÇÇà °á°ú UNIONÀº ·¹Äڵ尡 ¹ÝÀ¸·Î ÁÙ¾ú´Ù.
ÀÌ¹Ì ´Ùµé ¾Ë°í ÀÖ´Ù½ÃÇÇ UNIONÀº UNION DISTINCT¿Í µ¿ÀÏÇÑ ÀÛ¾÷À» Çϱ⠶§¹®¿¡ Áߺ¹µÇ´Â ·¹Äڵ带 Á¦°ÅÇßÀ½À» ¾Ë ¼ö ÀÖ´Ù.
ÇÏÁö¸¸, UNION ALLÀÇ °æ¿ì¿¡´Â º°µµÀÇ Áߺ¹ Á¦°Å °úÁ¤À» °ÅÄ¡Áö ¾Ê°í ±×³É °á°ú¸¦ ³»·ÁÁØ´Ù.
¾ÆÁÖ Áß¿äÇÑ ³»¿ëÀÌÁö¸¸, »ç½Ç ÀÌ ³»¿ëÀ» ´Ùµé º°·Î ½Å°æ¾²Áö ¾Ê°í ¸ðµÎµé UNIONÀ» Áñ°Ü »ç¿ëÇÑ´Ù.
¾ÈŸ±õ°Ôµµ, MySQLÀÇ ½ÇÇà°èȹ¿¡¼´Â µÑÀÇ Â÷À̸¦ ÀüÇô ´À³¥ ¼ö ¾ø´Ù.
+----+--------------+------------+------+..+------+..+------+------+-------+
| id | select_type | table | type |..| key |..| ref | rows | Extra |
+----+--------------+------------+------+..+------+..+------+------+-------+
| 1 | PRIMARY | <derived2> | ALL |..| NULL |..| NULL | 4 | |
| 2 | DERIVED | tab1 | ALL |..| NULL |..| NULL | 2 | |
| 3 | UNION | tab2 | ALL |..| NULL |..| NULL | 2 | |
|NULL| UNION RESULT | <union2,3> | ALL |..| NULL |..| NULL | NULL | |
+----+--------------+------------+------+..+------+..+------+------+-------+
ÇÏÁö¸¸ Áߺ¹ Á¦°Å´Â ±×³É ¾òÀ» ¼ö ÀÖ´Â °á°ú°¡ ¾Æ´Ï´Ù.±×·¯¸é, MySQLÀÌ ³»ºÎÀûÀ¸·Î ¾î¶»°Ô Áߺ¹À» Á¦°ÅÇÏ´Â °ÍÀϱî ?
³»ºÎÀûÀΠ󸮸¦ ¾Ë¾Æº¸±â Àü¿¡, ·¹ÄÚµåÀÇ Áߺ¹À̶ó´Â Ç¥ÇöÀ» Çߴµ¥ ÀÌ Áߺ¹ÀÇ ±âÁØÀÌ ¹«¾úÀϱî ?
1. °¢ Å×À̺íÀÇ Primary key ?
2. Àüü Å×À̺íÀÇ ¸ðµç Çʵå ?
3. °¢ ¼ºê Äõ¸®¿¡¼ SELECTµÈ Æ©ÇÃ(·¹ÄÚµå)ÀÇ ¸ðµç Çʵå ?
±×·¸´Ù. ÀÌ¹Ì SELECTµÈ °á°ú¸¦ °¡Áö°í UNIONÇϱ⠶§¹®¿¡ SELECTµÇ±â ÀüÀÇ Å×À̺íÀ̳ª ·¹Äڵ忡 ´ëÇÑ Á¤º¸´Â ¾Ë ¼ö ¾ø´Ù.
±×·¡¼, Áߺ¹ ¿©ºÎÀÇ ÆÇ´ÜÀº SELECTµÈ Æ©Çõ鿡 ¼ÓÇØÀÖ´Â ¸ðµç Ä÷³ÀÇ °ªµé ÀÚü°¡ Áߺ¹ üũÀÇ ±âÁØÀÌ µÇ´Â °ÍÀÌ´Ù.
ÀÚ~, ±×·¯¸é ÀÌÁ¦ MySQLÀÌ ³»ºÎÀûÀ¸·Î UNION ALL°ú UNIONÀ» ó¸®ÇÏ´Â °úÁ¤À» ¾Ë¾Æº¸ÀÚ.
1. ÃÖÁ¾ UNION [ALL | DISTINCT] °á°ú¿¡ ÀûÇÕÇÑ Àӽà Å×À̺í(Temporary table)À» ¸Þ¸ð¸® Å×À̺í·Î »ý¼º
2. UNION ¶Ç´Â UNION DISTINCT ÀÇ °æ¿ì, Temporary Å×À̺íÀÇ ¸ðµç Ä÷³À¸·Î Unique Hash À妽º »ý¼º3. ¼ºêÄõ¸®1 ½ÇÇà ÈÄ °á°ú¸¦ Temporary Å×ÀÌºí¿¡ º¹»ç
4. ¼ºêÄõ¸®2 ½ÇÇà ÈÄ °á°ú¸¦ Temporary Å×ÀÌºí¿¡ º¹»ç
5. ¸¸¾à 3,4¹ø °úÁ¤¿¡¼ Temporary Å×À̺íÀÌ Æ¯Á¤ »çÀÌÁî ÀÌ»óÀ¸·Î Ä¿Áö¸é
Temporary Å×À̺íÀ» Disk Temporary Å×À̺í·Î º¯°æ
(À̶§ Unique Hash À妽º´Â Unique B-Tree À妽º·Î º¯°æµÊ)
6. Temporary Å×À̺íÀ» ÀÐ¾î¼ Client¿¡ °á°ú Àü¼Û
7. Temporary Å×ÀÌºí »èÁ¦
UNION µÎ °¡ÁöÀÇ Â÷ÀÌ´Â 2¹ø °úÁ¤ µü ÇϳªÀÌ´Ù. Áߺ¹ Á¦°Å¸¦ À§Çؼ Temporary Å×ÀÌºí¿¡ À妽º¸¦ »ý¼ºÇÏ´À³Ä ?. ±×·¸Áö ¾Ê´À³Ä ?.º°·Î Áß¿äÇÏÁö ¾ÊÀº °Í °°Áö¸¸, ÀÌ À妽º·Î ÀÎÇؼ 3,4¹ø °úÁ¤ÀÇ ÀÛ¾÷ÀÌ ÀÛÁö ¾ÊÀº ¼º´É Â÷ÀÌ°¡ ¸¸µé¾î ³»°Ô µÈ´Ù.
½ÇÁ¦ UNIONÀ» ½ÇÇàÇÏ´Â µ¥ÀÌÅÍÀÇ °Ç¼ö¿¡ µû¶ó¼ ´Ù¸£°ÚÁö¸¸, 1.5 ~ 4¹è °¡·®ÀÇ ¼º´É Â÷ÀÌ·Î UNION ALLÀÌ ºü¸£°Ô 󸮵ȴÙ.
¸¸¾à ó¸®Áß µ¥ÀÌÅÍÀÇ ·®ÀÌ À۾Ƽ 5¹ø °úÁ¤À» °ÅÄ¡Áö ¾Ê´Â´Ù¸é ¸Þ¸ð¸® Temporary Å×ÀÌºí¿¡ Hash À妽º¸¦ »ç¿ëÇϱ⠶§¹®¿¡
¼Óµµ Â÷ÀÌ°¡ ¾ÆÁÖ ¹Ì¼¼ÇÒ °ÍÀÌ´Ù.
ÇÏÁö¸¸ µ¥ÀÌÅÍ·®ÀÌ Ä¿Á®¼ 5¹ø °úÁ¤À» °ÅÄ¡°Ô µÇ¸é Disk Temporary Å×ÀÌºí¿¡ B-Tree À妽º¸¦ »ç¿ëÇϱ⠶§¹®¿¡ Å« ¼º´É Â÷À̸¦ º¸ÀÌ°Ô µÉ °ÍÀÌ´Ù.
ÀÌ ¼º´É Â÷ÀÌ´Â UNION ÇÏ´Â µÎ ÁýÇÕ¿¡ Áߺ¹µÇ´Â ·¹Äڵ尡 ÀÖµç ¾øµç °ü°è ¾øÀÌ ¹ß»ýÇÒ °ÍÀÌ´Ù.
À§¿¡¼ Àá±ñ ¾Ë¾Æº¸¾Ò´ø, "Áߺ¹ÀÇ ±âÁØ"À» »ý°¢Çϸé, UNION ÇÏ´Â Ä÷³µéÀÇ ¼ö°¡ ¸¹¾ÆÁö°í ·¹ÄÚµåÀÇ »çÀÌÁî°¡ Ä¿Áú¼ö·Ï µÎ ÀÛ¾÷ ¸ðµÎ¿¡°Ô ºÒ¸®ÇÏ°ÚÁö¸¸, UNION ALLº¸´Ù´Â UNION¿¡ ´õ ¾Ç¿µÇâÀÌ Å¬ °ÍÀÌ´Ù.
°á·ÐÀº,
0. UNION À̵çÁö UNION ALLÀ̵çÁö »ç½Ç ±×¸® ÁÁÀº SQL ÀÛ¼ºÀº ¾Æ´Ï´Ù.
UNIONÀÌ ÇÊ¿äÇÏ´Ù´Â °ÍÀº »ç½Ç µÎ ¿£ÅÍƼ(Å×À̺í)°¡ ÇϳªÀÇ ¿£ÅÍƼ(Å×À̺í)·Î ÅëÇÕÀÌ µÇ¾ú¾î¾ß
ÇÒ ¿£ÅÍƼµéÀ̾ú´Âµ¥, ¾Ë ¼ö ¾ø´Â ÀÌÀ¯·Î ºÐ¸® ¿î¿µµÇ´Â °æ¿ì°¡ »ó´çÈ÷ ¸¹´Ù.
Áï ¸ðµ¨¸µ Â÷¿ø¿¡¼ ¿£ÅÍƼ¸¦ ÀûÀýÈ÷ ÅëÇÕÇÏ¿© UNIONÀÇ ¿ä°ÇÀ» ¸ðµÎ Á¦°ÅÇÏÀÚ.
1. µÎ ÁýÇÕ¿¡ Àý´ë Áߺ¹µÈ Æ©ÇÃ(·¹ÄÚµå)°¡ ¹ß»ýÇÒ ¼ö ¾ø´Ù´Â º¸ÀåÀÌ ÀÖ´Ù¸é UNION ALLÀ» ²À »ç¿ëÇÏÀÚ.
µÎ ÁýÇÕ¿¡¼ ¸ðµÎ °¢°¢ÀÇ PK¸¦ Á¶È¸Çϴµ¥, ±× µÎ ÁýÇÕÀÇ PK°¡ Àý´ë Áߺ¹µÇÁö ¾Ê´Â ÇüÅÂ
2. Áߺ¹ÀÌ ÀÖ´Ù ÇÏ´õ¶óµµ ±×¸® ¹®Á¦µÇÁö ¾Ê´Â´Ù¸é UNION º¸´Ù´Â UNION ALLÀ» »ç¿ëÇÏÀÚ.
3. ¸¸¾à UNIONÀ̳ª UNION ALLÀ» »ç¿ëÇØ¾ß ÇÑ´Ù¸é, ÃÖ¼Ò ÇÊ¿ä Ä÷³¸¸ SELECT ÇÏÀÚ.
http://dev.mysql.com/doc/refman/5.0/en/union.html
|
|
̵̧ : 732 |
̵̧
¸ñ·Ï
|
|
|  |
|