Àá½Ã¸¸ ±â´Ù·ÁÁÖ¼¼¿ä
¿äûÇϽŠ±Û·Î¹úÀ¥È£½ºÆÃÄÚ¸®¾Æ¢â À¥ÆäÀÌÁö¸¦ Loading Áß ÀÔ´Ï´Ù...

¼­ºñ½º ¼Ò°³
ÀÌ¿ë¿ä±Ý ¾È³»
¼­ºñ½º ȯ°æ
¼¼ºÎ ¼³ºñ
¿¬µ¿¸Á ±¸¼º
¼­ºñ½º ½Åû
ÀæÀº Áú¹®°ú ´äº¯
ÆÇ¸Å¿Õ
À̹ÌÁö/ÆÄÀÏ È£½ºÆÃ
¸ÖƼ µµ¸ÞÀÎ ¿¬°á
µ¥ÀÌÅͺ£À̽º
À̸ÞÀÏ(E-mail) Ãß°¡
¼­ºñ½º Àüȯ
(2005-03-05 [11:34], Hit : 28762)
MySQL Table Join ±âÃÊ


SQL(Structured Query Language)ÀÇ °¡Àå Å« Ư¡ ÁßÀÇ Çϳª´Â ¿©·¯°³ÀÇ Å×À̺íÀ»
¿¬°á½ÃÄÑ µ¥ÀÌÅ͸¦ °Ë»öÇϰųª Á¶ÀÛÇÒ ¼ö ÀÖ´Â ±â´ÉÀÌ´Ù. À̰ÍÀº µ¥ÀÌÅ͸¦ ½±°í
ºü¸£°Ô °Ë»öÇÏ°í ºÒÇÊ¿äÇÑ µ¥ÀÌÅ͸¦ ÁÙ¿©ÁÖ´Â ÀåÁ¡ÀÌ ÀÖ´Ù. ´Ù¸¥ SQL ¾ð¾î¿Í ¸¶Âù
°¡Áö·Î MySQLµµ join¸í·É¾î·Î ÀÌ ¿¬»êÀ» ¼öÇàÇÑ´Ù.

°£´ÜÈ÷ ¸»Çϸé joinÀº µÎ°³ ÀÌ»óÀÇ Å×À̺í·ÎºÎÅÍ ÇÊ¿äÇÑ µ¥ÀÌÅ͸¦ ¿¬°áÇØ ÇϳªÀÇ
Æ÷°ýÀûÀÎ ±¸Á¶·Î °áÇÕ½ÃŰ´Â ¿¬»êÀÌ´Ù.

¿¹¸¦ µé¾î, ÇÑ ÄÄÇ»ÅÍ Á¦Á¶¾÷ÀÚ°¡ ÀÚ½ÅÀÇ µ¥ÀÌÅ͸¦ ´É·üÀûÀ¸·Î °ü¸®Çϱâ À§ÇÑ
µ¥ÀÌÅͺ£À̽º°¡ ÇÊ¿äÇÏ´Ù°í ÇÏÀÚ. ÀÌ µ¥ÀÌÅ͵éÀº ÁÖ¹®, °í°´, »ý»ê°ú °°Àº ¾î¶²
Àϰü¼ºÀÖ´Â °³³ä°ú °ü·ÃµÈ °¢°¢ÀÇ µ¥ÀÌÅ͵éÀÌ ¸ð¿© ´Ù¾çÇÏ°í °£°áÇÑ Å×À̺íµéÀ»
ÀÌ·ê °ÍÀÌ´Ù. Å×À̺íÀ» »ý¼ºÇÑ ÈÄ¿¡´Â, ´Ù¾çÇÑ ¿¹¸¦ µé¾î µ¥ÀÌÅͺ£À̽º¿¡¼­ °¡Àå
¸¹ÀÌ »ç¿ëµÇ´Â joinÀÇ Á¶ÀÛ¹ý¿¡ ´ëÇØ ¼³¸íÇϰڴÙ.

ù¹øÂ° Å×À̺íÀº Á¦Á¶¾÷ÀÚ°¡ ºÐ·ùÇÑ ´Ù¾çÇÑ Å¸ÀÔÀÇ PCµéÀÇ µ¥ÀÌÅÍ·Î ±¸¼ºµÉ °ÍÀÌ´Ù.
----------------------------------------------
mysql> create table pcs (
-> pid INT, // product id
-> spec char(3),
-> os char(10),
-> ram INT,
-> hd char(4)
-> );
-----------------------------------------------

µÎ¹øÂ° Å×À̺íÀº Á¦Á¶¾÷ÀÚÀÇ ´Ù¾çÇÑ °í°´µé¿¡ °üÇÑ µ¥ÀÌÅÍ·Î ÀÌ·ç¾îÁú °ÍÀÌ´Ù.
-----------------------------------------------
mysql> create table clients (
-> name char(25),
-> cid char(8), // client id
-> email char(25),
-> tel char(10)
-> );
-----------------------------------------------

¼¼¹øÂ° Å×À̺íÀº ÁÖ¹® Á¤º¸¿¡ °üÇÑ µ¥ÀÌŸ¸¦ Æ÷ÇÔÇÒ °ÍÀÌ´Ù.
-----------------------------------------------
mysql> create table orders (
-> order_date date,
-> pid INT,
-> cid char(8)
-> );
-----------------------------------------------

¡ß¡ß ÀÚ·á(Data) »ðÀÔÇϱâ

°¢°¢ÀÇ Å×ÀÌºí¿¡ ¾Æ·¡¿Í °°ÀÌ ÀڷḦ »ðÀÔÇØ º¸ÀÚ.

¡Ù pcs (Å×À̺í1)
+------+------+-------+------+------+
| pid | spec | os | ram | hd |
+------+------+-------+------+------+
| 1 | 386 | Linux | 64 | 3.1 |
| 2 | 386 | Linux | 128 | 4.2 |
| 3 | 486 | WinNT | 64 | 3.1 |
| 4 | 586 | Linux | 128 | 4.2 |
| 5 | 586 | Win98 | 128 | 6.4 |
+------+------+-------+------+------+

[»ðÀÔ¹æ¹ý]
-----------------------------------------------------------
mysql> INSERT INTO pcs (pid, spec, os, ram, hd)
-> VALUES (1, '386', 'Linux', 64, '3.1');
-----------------------------------------------------------

¡Ù clients (Å×À̺í2)
+--------+---------+---------------------------+------------+
| name | cid | email | tel |
+--------+---------+---------------------------+------------+
| ¿øÁÖÈñ | wjh-042 | haremoon@won.hongik.ac.kr | 123-456-78 |
| È«±æµ¿ | hgd-043 | honggd@won.hongik.ac.kr | 421-555-34 |
| ÀÌ»Ú´Ï | pty-042 | pretty@won.hongik.ac.kr | 459-555-32 |
| ¸ø³­ÀÌ | ugy-043 | ugly@won.hongik.ac.kr | 439-555-88 |
+--------+---------+---------------------------+------------+

[»ðÀÔ¹æ¹ý]
-----------------------------------------------------------
mysql> INSERT INTO clients (name, cid, email, tel)
-> VALUES ('¿øÁÖÈñ', 'wjh-042',
-> 'haremoon@won.hongik.ac.kr', '123-456-7890');
-----------------------------------------------------------

¡Ù orders (Å×À̺í3)
+------------+------+---------+
| order_date | pid | cid |
+------------+------+---------+
| 1999-12-05 | 2 | wjh-042 |
| 1999-12-04 | 3 | hgd-043 |
| 1999-12-04 | 1 | wjh-042 |
| 1999-12-05 | 2 | wjh-042 |
| 1999-12-12 | 5 | ugy-043 |
| 1999-12-05 | 5 | pty-042 |
+------------+------+---------+

[»ðÀÔ¹æ¹ý]
-----------------------------------------------------------
mysql> INSERT INTO orders (order_date, pid, cid)
-> VALUES ('1999-12-05', 2, 'wjh-042');
-----------------------------------------------------------

ÀÚ, ÀÌÁ¦ºÎÅÍ ¸¸µé¾îÁø 3°³ÀÇ Å×À̺í·ÎºÎÅÍ ÇÊ¿äÇÑ µ¥ÀÌÅ͸¸À» ÃßÃâÇØ °áÇÕÇÏ´Â
¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. ¸¸ÀÏ ´ç½ÅÀÇ »ó»ç°¡ ƯÁ¤ÇÑ ³¯¿¡ ƯÁ¤ÇÑ PC¸¦ ÁÖ¹®ÇÑ ¸ðµç
°í°´ÀÇ À̸ÞÀÏ ¸ñ·ÏÀ» ¿øÇÑ´Ù°í ÇÏÀÚ! ¶Ç´Â ƯÁ¤ÇÑ °í°´¿¡ ÀÇÇØ ÀÛ¼ºµÈ ÁÖ¹®¼­¿¡
ÀÖ´Â RAMÀÇ ¾çÀ» º¸°í¹Þ±â¸¦ ¿øÇÑ´Ù°í ÇÏÀÚ. ÀÌ·¯ÇÑ ¸ðµç ÀϵéÀº ´Ù¾çÇÑ join¹®¿¡
ÀÇÇØ ½±°Ô ¼öÇàµÉ ¼ö ÀÖ´Ù. ¸¸µé¾îÁø Å×À̺íÀ» »ç¿ëÇØ ù¹øÂ° join¹®À» »ý¼ºÇغ¸°í
ÀÛ¼ºÇغ¸ÀÚ.

¡ß¡ß The Cross Join

Cross JoinÀº °¡Àå ±âº»ÀûÀÎ joinÀÇ Å¸ÀÔÀ¸·Î ÇÑ Å×ÀÌºí¿¡ ÀÖ´Â °¢°¢ÀÇ ¿­ÀÌ ´Ù¸¥
Å×À̺íÀÇ ¸ðµç ¿­¿¡ °£´ÜÇÏ°Ô ¸ÅÄ¡µÇ¾î Ãâ·ÂµÈ´Ù. ´É·üÀûÀÌÁö´Â ¾ÊÁö¸¸, ¸ðµç join
ÀÇ °øÅëµÈ Ư¡À» ³ªÅ¸³»ÁØ´Ù.

Cross JoinÀÇ °£´ÜÇÑ ¿¹ :
----------------------------------------------
mysql> SELECT * FROM pcs, clients;
----------------------------------------------

¸Å¿ì ¸¹Àº ¿­µéÀÌ Ãâ·ÂµÉ °ÍÀÌ´Ù. Å×À̺í1(pcs)¿¡ ÀÖ´Â °¢°¢ÀÇ ¿­ÀÌ Å×À̺í2(clients)
ÀÇ ¸ðµç ¿­¿¡ ¸ÅÄ¡µÈ´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ. µû¶ó¼­, 3 ¿­À» °¡Áø Å×À̺í1(pcs)°ú 4 ¿­À»
°¡Áø Å×À̺í2(clients)¸¦ Æ÷ÇÔÇÑ join¹®Àº ÃÑ 12 ¿­ÀÇ Å×À̺íÀ» ¸¸µé°ÍÀÌ´Ù.

Áï cross-joinÀº Å×À̺í1¿¡ ÀÖ´Â °¢°¢ÀÇ ¿­µéÀÌ Å×À̺í2¿¡ ÀÖ´Â ¸ðµç¿­µéÀ» ÇÑ ¹ø¾¿
±³Â÷ÇØ Ãâ·ÂÇÑ´Ù°í ±â¾ïÇÏ´Â °ÍÀÌ ½¬¿ï °Í°°´Ù.

ù¹øÂ° joinÀ» ¼º°øÀûÀ¸·Î ¼öÇàÇß´Ù¸é ´ÙÀ½ÀÇ ¿¹µµ ¾î·ÆÁö ¾ÊÀ» °ÍÀÌ´Ù.

¾Æ·¡ÀÇ ¿¹¸¦ µû¶óÇØ º¸°í ¾î¶² °á°ú°¡ Ãâ·ÂµÉÁö ¿¹»óÇØº¸ÀÚ.

-----------------------------------------------------------------------------
mysql> select c.name, o.cid from orders o, clients c where o.cid = "wjh-042";
-----------------------------------------------------------------------------

+--------+---------+
| name | cid |
+--------+---------+
| ¿øÁÖÈñ | wjh-042 |
| ¿øÁÖÈñ | wjh-042 |
| ¿øÁÖÈñ | wjh-042 |
| È«±æµ¿ | wjh-042 |
| È«±æµ¿ | wjh-042 |
| È«±æµ¿ | wjh-042 |
| ÀÌ»Ú´Ï | wjh-042 |
| ÀÌ»Ú´Ï | wjh-042 |
| ÀÌ»Ú´Ï | wjh-042 |
| ¸ø³­ÀÌ | wjh-042 |
| ¸ø³­ÀÌ | wjh-042 |
| ¸ø³­ÀÌ | wjh-042 |
+--------+---------+

¿¹»óÇÑ ´ë·Î °á°ú°¡ Ãâ·ÂµÇ¾ú³ª? clients Å×ÀÌºí¿¡ ÀÖ´Â °¢°¢ÀÇ nameÀÌ ordersÅ×ÀÌ
ºíÀÇ "wjh-042"¸¦ Æ÷ÇÔÇÑ ¿­¸¶´Ù ¸ÅÄ¡µÇ¾î Ãâ·ÂµÇ¾ú´Ù. Áö±Ý±îÁöÀÇ ¼³¸íÀÌ Cross
JoinÀ» ¼³¸íÇϴµ¥ ÃæºÐÇÏÁö ¾ÊÀ¸¹Ç·Î ´Ù¸¥ ÁúÀǸ¦ »ç¿ëÇØ°¡¸ç JOINÀ» Ȱ¿ëÇØº¸±â
¹Ù¶õ´Ù.

NOTE : ¿Ö Å×À̺íÀÇ À̸§¿¡ º°¸íÀ» ÁÖ¾î »ç¿ëÇÒ±î? Aliases(º°¸í)Àº ÁúÀǸ¦ ÀÔ·ÂÇÒ
¶§ ¹Ýº¹ÀûÀΠŰÀÇ ÀÔ·ÂÀ» ÁÙ¿©ÁÖ´Â ¹æ¹ýÀ¸·Î »ç¿ëµÇ¾îÁø´Ù. µû¶ó¼­ ¿­À» ÁöÁ¤ÇØ ÁÙ
¶§ ¹Ýº¹ÀûÀ¸·Î 'clients'¸¦ ÇÑÀÚ ÇÑÀÚ ÀÔ·ÂÇÏ´Â ´ë½Å¿¡, ÁúÀdz»¿¡ 'from clients c'
¸¦ ÁöÁ¤ÇØÁÖ°í 'c'¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

Cross JoinÀÌ Å×À̺íµéÀ» ¿¬°áÇØ ÁÖ±â´Â ÇÏÁö¸¸, ´É·üÀûÀÌÁö´Â ¸øÇÏ´Ù. µû¶ó¼­
°¢°¢ÀÇ Å×À̺íµé·Î ºÎÅÍ ¿ì¸®°¡ ¿øÇÏ´Â µ¥ÀÌŸ¸¦ ¾î¶»°Ô ÇÏ¸é ½±°Ô ¼±ÅÃÇÒ ¼ö ÀÖ´ÂÁö
°è¼Ó ´ÙÀ½ ÀåÀ» Àо±â ¹Ù¶õ´Ù.

¡ß¡ß The Equi-join

Equi-joinÀº ÇÑ Å×ÀÌºí¿¡ ÀÖ´Â ¾î¶°ÇÑ °ªÀÌ µÎ¹øÂ°(¶Ç´Â ´Ù¼öÀÇ) Å×ÀÌºí³»¿¡ Æ÷ÇÔµÈ
°ª¿¡ ÀÏÄ¡ ÇÒ ¶§ ¼öÇàµÈ´Ù.

product id °¡ 1ÀÎ PC¸¦ ÁÖ¹®ÇÑ °í°´ÀÇ ¸ñ·ÏÀ» ¿øÇÑ´Ù°í °¡Á¤ÇØ º¸ÀÚ.

-------------------------------------------------------------------
mysql> select p.os, c.name from orders o, pcs p, clients c
-> where p.pid=o.pid and o.pid = 1 and o.cid=c.cid;
-------------------------------------------------------------------

+-------+--------+
| os | name |
+-------+--------+
| Linux | ¿øÁÖÈñ |
+-------+--------+

¡ß Non-Equi-join

Equi-joinÀº ´Ù¼öÀÇ Å×À̺íµé »çÀÌ¿¡¼­ ÀÏÄ¡ÇÏ´Â ÀÚ·áµé¸¸À» ÃßÃâÇØ³½´Ù. ±×·¯³ª
¸¸ÀÏ ÀÏÄ¡ÇÏÁö ¾ÊÀº ÀÚ·áµé¸¸À» ÃßÃâÇØ¾ß ÇÑ´Ù¸é...? ¿¹¸¦ µé¾î, ´ç½ÅÀÇ »ó»ç°¡
ÁÖ¹®ÇÑ pid°¡ Á¦Ç°ÀÇ pidº¸´Ù ´õ Å« order idÀÇ ¸ðµç ¿î¿µÃ¼Á¦(OS)ÀÇ ¸ñ·ÏÀ»
ÇÊ¿ä·Î ÇÑ´Ù¸é ¾î¶»°Ô ÇÒ °ÍÀΰ¡? Àû´çÈ÷ À̸§À» non-equi join¶ó°í ÇϰڴÙ.

-------------------------------------------------------------------
mysql> SELECT p.os, o.pid from orders o, pcs p where o.pid > p.pid;
-------------------------------------------------------------------

+-------+------+
| os | pid |
+-------+------+
| Linux | 2 |
| Linux | 3 |
| Linux | 2 |
| Linux | 5 |
| Linux | 5 |
| Linux | 3 |
| Linux | 5 |
| Linux | 5 |
| WinNT | 5 |
| WinNT | 5 |
| Linux | 5 |
| Linux | 5 |
+-------+------+

orders Å×À̺íÀÇ pid°¡ pcsÅ×À̺íÀÇ pidº¸´Ù ´õ Å« ¸ðµç ¿­µéÀÌ ¸ÅÄ¡µÉ °ÍÀÌ´Ù.
ÁÖÀDZí°Ô »ìÆìº¸¸é, ¿©·¯°¡Áö Á¦ÇÑÀ» ÁØ °£´ÜÇÑ cross-join ÀÓÀ» ÆÄ¾ÇÇÒ ¼ö ÀÖ
À» °ÍÀÌ´Ù. »ó»ç¿¡°Ô´Â Ưº°ÇÏ°Ô À¯¿ëÇÏÁö ¾ÊÀ» Áöµµ ¸ð¸£Áö¸¸, ¸Å¿ì À¯¿ëÇÑ ±â
´ÉÀÎ left joinÀ» À§ÇÑ Áغñ °úÁ¤À¸·Î »ý°¢ÇÏÀÚ. ÀÚ, ÀÌÁ¦ ´ÙÀ½ÀåÀ¸·Î °¡¼­
left joinÀ» »ç¿ëÇÒ ¶§ À¯¿ëÇÒ ¼öÀÖ´Â ¿É¼Çµé¿¡ ´ëÇØ ÁýÁßÀûÀ¸·Î ¾Ë¾Æº¸ÀÚ.

¡ß¡ß The Left Join

Left JoinÀº »ç¿ëÀÚ°¡ ¾î¶°ÇÑ Á¦ÇÑÀ» ±â¹ÝÀ¸·Î °ü½ÉÀÖ´Â ¸ðµç Á¾·ùÀÇ ÀڷḦ ÃßÃâ
ÇϰÔÇÑ´Ù. Å×À̺í joinÁß °¡Àå ¸·°­ÇÑ ¿É¼ÇÀ¸·Î, Å×À̺íÀ» ¸Å¿ì ½±°Ô Á¶ÀÛÇÒ ¼ö
ÀÖ°Ô ÇÑ´Ù.

¸¸ÀÏ »ó»ç°¡ Á»´õ ÀÚ¼¼È÷, ÀÚ¼¼È÷, ÀÚ¼¼ÇϰÔ, ÀÚ¼¼ÇϰÔ!¸¦ ¿ÜÄ£´Ù°í °¡Á¤Çغ¸ÀÚ.
left joinÀÌ ¿ì¸®ÀÇ ¹®Á¦¸¦ ÇØ°áÇØ ÁÙ °ÍÀÌ´Ù.

-------------------------------------------------------------------
mysql> select * from orders left join pcs on orders.pid = pcs.pid;
-------------------------------------------------------------------

+------------+------+---------+------+------+-------+------+------+
| order_date | pid | cid | pid | spec | os | ram | hd |
+------------+------+---------+------+------+-------+------+------+
| 1999-12-05 | 2 | wjh-042 | 2 | 386 | Linux | 128 | 4.2 |
| 1999-12-04 | 3 | hgd-043 | 3 | 486 | WinNT | 64 | 3.1 |
| 1999-12-04 | 1 | wjh-042 | 1 | 386 | Linux | 64 | 3.1 |
| 1999-12-05 | 2 | wjh-042 | 2 | 386 | Linux | 128 | 4.2 |
| 1999-12-12 | 5 | ugy-043 | 5 | 586 | Win98 | 128 | 6.4 |
| 1999-12-05 | 5 | pty-042 | 5 | 586 | Win98 | 128 | 6.4 |
+------------+------+---------+------+------+-------+------+------+

°í°´ÀÌ ÁÖ¹®ÇÑ ¸ðµç PCµéÀÇ ¸ñ·ÏÀ» ÃßÃâÇØ ³½´Ù. ¿¹¸¦ µé¾î, PHP3 ¶Ç´Â Perl
½ºÅ©¸³Æ®¸¦ »ç¿ëÇØ ¿µ¼öÁõÀ» Ãâ·ÂÇϴµ¥ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. °í°´µé¿¡°Ô ¿ì¸®È¸
»ç·ÎºÎÅÍ ±¸ÀÔÇÑ ¸ðµç Á¦Ç°ÀÇ ¸ñ·ÏÀ» °¡²û¾¿ ¸ÞÀÏ·Î º¸³»¾ß ÇÒ ¶§¿¡µµ
clients Å×À̺í°ú ¿¬°áÇØ »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

¾Æ·¡ÀÇ ¿¹¿¡¼­ ¿ì¸®´Â Á¦Ç°ÀÇ id(pid)°¡ 3ÀÎ PCÀÇ Á¤º¸¸¸À» º¼ ¼ö ÀÖ´Ù.

-------------------------------------------------------------------
mysql> select * from orders left join pcs on pcs.pid=3 and pcs.pid=orders.pid;
-------------------------------------------------------------------

+------------+------+---------+------+------+-------+------+------+
| order_date | pid | cid | pid | spec | os | ram | hd |
+------------+------+---------+------+------+-------+------+------+
| 1999-12-05 | 2 | wjh-042 | NULL | NULL | NULL | NULL | NULL |
| 1999-12-04 | 3 | hgd-043 | 3 | 486 | WinNT | 64 | 3.1 |
| 1999-12-04 | 1 | wjh-042 | NULL | NULL | NULL | NULL | NULL |
| 1999-12-05 | 2 | wjh-042 | NULL | NULL | NULL | NULL | NULL |
| 1999-12-12 | 5 | ugy-043 | NULL | NULL | NULL | NULL | NULL |
| 1999-12-05 | 5 | pty-042 | NULL | NULL | NULL | NULL | NULL |
+------------+------+---------+------+------+-------+------+------+

¡ß The Using Clause

left join¿¡ ¾à°£ÀÇ ¿É¼ÇÀ» ÁÖ¾î µÑ ÀÌ»óÀÇ Å×ÀÌºí¿¡ ÀÖ´Â µ¿ÀÏÇÑ Ä÷³À» Á¶±Ý ´õ
±í°Ô ¿¬°üÁöÀ»¼öµµ ÀÖ´Ù. on°ú using¿É¼ÇÀÌ »ç¿ëµÇ¸ç, ¾Æ·¡ÀÇ ¿¹Á¦¸¦ ÂüÁ¶ÇÏÀÚ.


--------------------------------------------------------------------
## ¿øº»ÀÇ ¿¹Á¦´Â ¾Æ·¡¿Í °°Áö¸¸, ¿¡·¯°¡ ¹ß»ýÇØ ÇÊÀÚ°¡ MySQL¸Å´º¾óÀ» ÂüÁ¶ÇØ
³ª¸§´ë·Î ¼öÁ¤À» Çß´Ù.##
mysql> SELECT * from clients join on orders where clients.cid = orders.cid;
mysql> SELECT * from clients join on orders using (cid);
-------------------------------------------------------------------

==> ¼öÁ¤ÇÑ ¿¹Á¦

-------------------------------------------------------------------
mysql> SELECT * from clients left join orders on clients.cid = orders.cid;
-------------------------------------------------------------------

¶Ç´Â ¾Æ·¡¿Í °°ÀÌ ³ªÅ¸³¾ ¼öµµ ÀÖ´Ù.

-------------------------------------------------------------------
mysql> SELECT * from clients left join orders using (cid);
-------------------------------------------------------------------

µÎ ¿¹Á¦ ¸ðµÎ ¶È°°Àº °á°ú°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù.

+--------+---------+---------------------------+------------+------------+------+---------+
| name | cid | email | tel | order_date | pid | cid |
+--------+---------+---------------------------+------------+------------+------+---------+
| ¿øÁÖÈñ | wjh-042 | haremoon@won.hongik.ac.kr | 123-456-78 | 1999-12-05 | 2 | wjh-042 |
| ¿øÁÖÈñ | wjh-042 | haremoon@won.hongik.ac.kr | 123-456-78 | 1999-12-04 | 1 | wjh-042 |
| ¿øÁÖÈñ | wjh-042 | haremoon@won.hongik.ac.kr | 123-456-78 | 1999-12-05 | 2 | wjh-042 |
| È«±æµ¿ | hgd-043 | honggd@won.hongik.ac.kr | 421-555-34 | 1999-12-04 | 3 | hgd-043 |
| ÀÌ»Ú´Ï | pty-042 | pretty@won.hongik.ac.kr | 459-555-32 | 1999-12-05 | 5 | pty-042 |
| ¸ø³­ÀÌ | ugy-043 | ugly@won.hongik.ac.kr | 439-555-88 | 1999-12-12 | 5 | ugy-043 |
+--------+---------+---------------------------+------------+------------+------+---------+

´Ù¸¥ ±¸¹®ÀÇ ¿¹¸¦ Àû¿ëÇØ °¡¸ç left join¿¡ ´ëÇØ ÀÌÇØÇϱ⠹ٶõ´Ù. °øºÎ¸¦ ÇÏ´Ùº¸¸é
left joinÀÌ ¿©·¯ºÐÀÇ °³¹ßȰµ¿¿¡ ¸Å¿ì Áß¿äÇÑ ¿ªÇÒÀ» ÇÑ ´Ù´Â °ÍÀ» ´À³¥ °ÍÀÌ´Ù.
Å×À̺í join¿¡ °üÇÑ Á¤º¸¸¦ Á»´õ ±í°Ô ±³È¯ÇÏ°í ½Í´Ù¸é http://www.mysql.com¿¡ ÀÖ´Â
´Ù¾çÇÑ Åä·Ð ±×·ìÀ» Ã¼Å©ÇØ º¸±â ¹Ù¶õ´Ù.

¡ß¡ß Self-joins

Self-joinÀº °ü¸®ÀÚ°¡ ÇϳªÀÇ Å×ÀÌºí¿¡ °ü·ÃµÈ µ¥ÀÌŸ¸¦ ÁýÁß½ÃŰ´Â ¸·°­ÇÑ ¹æ¹ýÀ»
Á¦°øÇØ ÁØ´Ù. »ç½Ç, self-joinÀº ±× ÀÚ½ÅÀÇ Å×ÀÌºí¿¡ °áÇÕÇÏ´Â °Í¿¡ ÀÇÇØ ¼öÇàµÈ´Ù.
°³³äÀÇ ÀÌÇØ¸¦ À§ÇØ ¿¹¸¦ µé¾î ¼³¸íÇϰڴÙ.

ÄÄÇ»ÅÍ ¿öÅ©½ºÅ×À̼ÇÀ» ¸¸µå´Âµ¥ »ç¿ëµÇ´Â Çϵå¿þ¾îÀÇ ´Ù¾çÇÑ ºÎǰ¿¡ °üÇÑ Á¤º¸¸¦
°¡Áø ¸Å¿ì Å« µ¥ÀÌŸº£À̽º¸¦ °ü¸®ÇØ¾ß ÇÑ´Ù°í °¡Á¤ÇÏÀÚ. ¿öÅ©½ºÅ×À̼ÇÀº µ¥½ºÅ©,
PC, ¸ð´ÏÅÍ, Űº¸µå, ¸¶¿ì½ºµîÀ¸·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. °Ô´Ù°¡, µ¥½ºÅ©´Â ¿öÅ©½ºÅ×À̼ÇÀÇ
¸ðµÎ ´Ù¸¥ ºÎºÐÀÇ 'ºÎ¸ð'¶ó°í »ý°¢µÉ ¼ö ÀÖ´Ù. ¿ì¸®´Â °¢ ¿öÅ©½ºÅ×À̼ÇÀÇ ·¹Äڵ尡
Á¤È®ÇÑ ÀÚ·á·Î À¯ÁöµÇ±â¸¦ ¿øÇÒ °ÍÀ̸ç, À¯ÀÏÇÑ ID¹øÈ£¸¦ ºÎ¿©ÇÔÀ¸·Î½á ¿öÅ©½ºÅ×À̼Ç
ÀÇ ¸ðµç ºÎºÐÀ» ±¸Ã¼ÀûÀ¸·Î °ü·Ã½Ãų °ÍÀÌ´Ù. »ç½Ç, °¢ ºÎºÐÀº Ç׸ñÀ» ºÐ¸íÇÏ°Ô ÇØÁÖ´Â
À¯ÀÏÇÑ ID¹øÈ£¿Í ±×°ÍÀÇ ºÎ¸ð(µ¥½ºÅ©) ID¹øÈ£¸¦ È®ÀÎÇϱâ À§ÇÑ, µÎ°³ÀÇ ID ¹øÈ£¸¦
Æ÷ÇÔ °ÍÀÌ´Ù.

Å×À̺íÀÌ ¾Æ·¡¿Í °°´Ù°í °¡Á¤ÇÏÀÚ.

mysql> select * from ws;
+---------+-----------+-----------+
| uniq_id | name | parent_id |
+---------+-----------+-----------+
| d001 | desktop | NULL |
| m4gg | monitor | d001 |
| k235 | keyboar | d001 |
| pc345 | 200mhz pc | d001 |
| d002 | desktop | NULL |
| m156 | monitor | d002 |
| k9334 | keyboar | d002 |
| pa556 | 350mhz pc | d002 |
+---------+-----------+-----------+


desktopÀº ±×¿Í °ü·ÃµÈ ¸ðµç ºÎºÐµéÀÇ ºÎ¸ð¿Í °°À¸¹Ç·Î parent_id¸¦ °¡Áö°í ÀÖÁö
¾ÊÀ½À» ÁÖ¸ñÇÏÀÚ. Áö±ÝºÎÅÍ À¯¿ëÇÑ Á¤º¸¸¦ À§ÇÑ ÁúÀǸ¦ ½ÃÀÛÇÒ °ÍÀÌ´Ù. self-join
ÀÇ »ç¿ë¹ýÀ» ½±°Ô ¼³¸íÇϱâ À§ÇØ Å×À̺íÀ» °£´ÜÇÏ°Ô ¸¸µé¾ú´Ù.

-------------------------------------------------------------------
mysql> select t1.*, t2.* from ws as t1, ws as t2;
-------------------------------------------------------------------

¾î¶»°Ô Ãâ·ÂµÇ´Â°¡? ÀÌÀüó·³, ù¹øÂ° Å×À̺íÀÇ °¢ ¿­µéÀÌ µÎ¹øÂ° Å×ÀÌºí¿¡ ÀÖ´Â
¸ðµç ¿­µé¿¡ ¸ÅÄ¡µÇ¾î ¿¬°áµÇ Ãâ·ÂµÉ °ÍÀÌ´Ù. ¿ì¸®¿¡°Ô ¸Å¿ì À¯¿ëÇÏÁö´Â ¾ÊÁö¸¸
´Ù½Ã Çѹø ½ÃµµÇغ¸°í È®ÀÎÇØ º¸±â¹Ù¶õ´Ù. Á»´õ Àç¹ÌÀÖ´Â ¿¹¸¦ µé¾îº¸°Ú´Ù.

-------------------------------------------------------------------
mysql> select parent.uniq_id, parent.name, child.uniq_id, child.name
-> from ws as parent, ws as child
-> where child.parent_id = parent.uniq_id and parent.uniq_id = "d001";
-------------------------------------------------------------------

Èï¹Ì·Î¿î °á°ú°¡ Ãâ·ÂµÉ °ÍÀÌ´Ù.
+---------+---------+---------+-----------+
| uniq_id | name | uniq_id | name |
+---------+---------+---------+-----------+
| d001 | desktop | m4gg | monitor |
| d001 | desktop | k235 | keyboar |
| d001 | desktop | pc345 | 200mhz pc |
+---------+---------+---------+-----------+

self-joinÀº Å×À̺íÀÇ ÀڷḦ °ËÁõÇÏ´Â ¹æ¹ýÀ¸·Îµµ »ç¿ëµÈ´Ù. Å×ÀÌºí³»¿¡ ÀÖ´Â
uniq_idÄ÷³Àº Å×ÀÌºí¿¡¼­ À¯ÀÏÇØ¾ß Çϸç, ¸¸ÀÏ µ¥ÀÌŸÀÇ ¿£Æ®¸®°¡ ±í¾î ¶æÇÏÁö
¾Ê°Ô °°Àº uniq_id¸¦ °¡Áø µÎ°³ÀÇ Ç׸ñÀÌ µ¥ÀÌŸº£À̽º¿¡ ÀԷµȴٸé ÁÁÁö ¾ÊÀº
°á°ú°¡ »ý±æ°ÍÀÌ´Ù. ÀÌ·² °æ¿ì Á¤±âÀûÀ¸·Î self-joinÀ» »ç¿ëÇØ üũÇÒ ¼ö ÀÖ´Ù.
¿ì¸®´Â 350mhz pcÀÇ uniq_id°¡ 'm156'(ÀÌ °ªÀº ¿öÅ©½ºÅ×ÀÌ¼Ç 'd002'¿¡ ¼ÓÇÑ
¸ð´ÏÅÍÀÇ uniq_id °ªÀÌ´Ù.)ÀÌ µÇµµ·Ï º¯°æÇß´Ù°í °¡Á¤ÇÏÀÚ.

Å×À̺íÀÇ ³»¿ëÀº ´ÙÀ½°ú °°ÀÌ º¯°æÇÑ´Ù.
-------------------------------------------------------------------
mysql> update ws set uniq_id = 'm156' where name = '350mhz pc';
-------------------------------------------------------------------

¾Æ·¡ÀÇ ¿¹¸¦ Âü°íÇØ wsÅ×ÀÌºí¿¡ self-joinÀ» Àû¿ëÇØº¸ÀÚ.

-------------------------------------------------------------------
mysql> select parent.uniq_id, parent.name, child.uniq_id, child.name
-> from ws as parent, ws as child
-> where parent.uniq_id = child.uniq_id and parent.name <> child.name;
-------------------------------------------------------------------

¾Æ·¡¿Í °°ÀÌ Ãâ·ÂµÉ °ÍÀÌ´Ù.
+---------+-----------+---------+-----------+
| uniq_id | name | uniq_id | name |
+---------+-----------+---------+-----------+
| m156 | 350mhz pc | m156 | monitor |
| m156 | monitor | m156 | 350mhz pc |
+---------+-----------+---------+-----------+





MSIE 6.0 (Windows NT 5.1) 210.105.172.170

¡è À­±Û¾Æ¿ô·è¿¡¼­ "¿À·ù 0x800ccc0f: ¼­¹ö·ÎÀÇ ¿¬°á ÀÛ¾÷ÀÌ ÁߴܵǾú½À´Ï´Ù" ¶ó°í ³ª¿Ã °æ¿ì
¡é ¾Æ·§±Û[µ¥ÀÌÅͺ£À̽º] SQLÀÇ ±âÃÊ

ÆÇ¸Å¿Õ ¹Ù·Î°¡±â
¹«·á °Ô½ÃÆÇ, ÇÁ·Î±×·¥ ¼­ºñ½º