°úÁ¤ ¸ñÇ¥
º» °úÁ¤Àº ÀÌ¿ë
°¡´ÉÇÑ °¢±â ´Ù¸¥ ¹æ¹ýµéÀ» »ç¿ëÇÏ¿© Çϳª ÀÌ»óÀÇ Å×À̺í·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ±¸ÇÏ´Â ¹æ¹ýÀ» ´Ù·ì´Ï´Ù.
´ÙÁß Å×À̺í·ÎºÎÅÍ µ¥ÀÌÅÍ È¹µæ
¶§¶§·Î Çϳª ÀÌ»óÀÇ Å×À̺í·ÎºÎÅÍ µ¥ÀÌÅ͸¦ »ç¿ëÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. À§ÀÇ ¿¹¿¡¼ ¸®Æ÷Æ®´Â µÎ °³ÀÇ Å×À̺í·ÎºÎÅÍ µ¥ÀÌÅ͸¦
µð½ºÇ÷¹ÀÌ ÇÕ´Ï´Ù.
¸®Æ÷Æ®¸¦ ¸¸µé±â À§Çؼ´Â EMP ¿Í DEPT Å×À̺íÀ» ¸µÅ©ÇÏ°í ¾çÂÊ Å×À̺í·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ¾×¼¼½º ÇÕ´Ï´Ù.
Á¶ÀÎ Á¤ÀÇ
µ¥ÀÌÅͺ£À̽º¿¡ ÀÖ´Â Çϳª ÀÌ»óÀÇ Å×À̺í·ÎºÎÅÍ µ¥ÀÌÅÍ°¡ ÇÊ¿äÇÒ ¶§
join Á¶°Ç¹®À» »ç¿ëÇÕ´Ï´Ù. ÇÑ Å×À̺íÀÇ ÇàÀº °ü·ÃµÇ´Â ¿¿¡ ÀÖ´Â °øÅë °ª¿¡ µû¶ó¼ Áï, primary key¿Í foreign key ¿¿¡ µû¶ó¼ ´Ù¸¥
ÇϳªÀÇ Å×À̺í Çà°ú Á¶ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
µÎ °³ ÀÌ»óÀÇ °ü°èÇü Å×À̺í·ÎºÎÅÍ µ¥ÀÌÅ͸¦ µð½ºÇ÷¹ÀÌ Çϱâ À§Çؼ, WHERE Àý¿¡ °£´ÜÇÑ Á¶ÀÎ
Á¶°Ç¹®À»
ÀÛ¼ºÇÕ´Ï´Ù.
±¸¹®Çü½Ä¿¡¼:
table.column µ¥ÀÌÅ͸¦
°Ë»öÇÒ Å×À̺í°ú ¿À» ³ªÅ¸³À´Ï´Ù.
table1.column1 = table2.column2 Å×À̺íÀ» ÇÔ²²
Á¶ÀÎ(¶Ç´Â °ü·Ã)ÇÏ´Â Á¶°Ç¹®ÀÔ´Ï´Ù.
Áöħ¼
SELECT ¿¡ ´ëÇÑ º¸´Ù ÀÚ¼¼ÇÑ ³»¿ëÀ» ¾Ë°íÀÚ ÇÑ´Ù¸é ´ÙÀ½À» ÂüÁ¶ÇϽʽÿÀ.
-
Oracle Server SQL Reference Manual, Release 7.3 ¶Ç´Â 8.0,
¡°SELECT.¡±
Cartesian Product
Á¶ÀÎ Á¶°Ç¹®ÀÌ À߸øµÇ¾ú°Å³ª ¿ÏÀüÈ÷ »ý·«µÇ¾úÀ» ¶§ ¸ðµç ÇàµéÀÇ Á¶ÇÕÀÎ Cartesian product ¶ó´Â °á°ú°¡ µð½ºÇ÷¹ÀÌ
µË´Ï´Ù. ù ¹ø° Å×À̺íÀÇ ¸ðµç ÇàÀº µÎ ¹ø° Å×À̺íÀÇ ¸ðµç Çà¿¡ Á¶Àε˴ϴÙ.
Cartesian product ´Â ¸¹Àº
¼öÀÇ ÇàÀ» »ý¼ºÇÏ´Â °æÇâÀÌ ÀÖÀ¸¸ç, °á°úµµ °ÅÀÇ À¯¿ëÇÏÁö ¸øÇÕ´Ï´Ù. Ưº°È÷ ¸ðµç Å×À̺í·ÎºÎÅÍ ¸ðµç ÇàÀ» Á¶ÇÕÇÒ ÇÊ¿ä°¡ ¾øÀ» °æ¿ì, Ç×»ó
WHERE Àý¿¡ ¿Ã¹Ù¸¥ Á¶ÀÎ Á¶°Ç¹®À» Àû¾î¾ß ÇÕ´Ï´Ù.
Cartesian Product (°è¼Ó)
Cartesian product ´Â
Á¶ÀÎ Á¶°ÇÀÌ »ý·«µÉ ¶§ ¹ß»ýÇÕ´Ï´Ù. ½½¶óÀ̵åÀÇ ¿¹´Â EMP Å×À̺í°ú DEPT Å×À̺í·ÎºÎÅÍ Á¾¾÷¿ø À̸§°ú ºÎ¼ À̸§À» µð½ºÇ÷¹ÀÌ ÇÕ´Ï´Ù.
WHERE ÀýÀÌ ¸í½ÃµÇÁö ¾Ê¾Ò±â ¶§¹®¿¡ EMP Å×À̺íÀÇ ¸ðµç Çà(14Çà)Àº DEPT Å×À̺íÀÇ ¸ðµç Çà(4Çà)°ú Á¶ÀÎ µÇ¾î¼ °á°ú¿¡ 56ÇàÀ»
¹ß»ýÇÕ´Ï´Ù.
SQL> SELECT ename, dname |
ENAME DNAME |
Á¶ÀÎÀÇ À¯Çü
Á¶ÀÎ Á¶°Ç¿¡´Â
µÎ °¡ÁöÀÇ Áß¿äÇÑ À¯ÇüÀÌ ÀÖ½À´Ï´Ù:
Ãß°¡ÀûÀÎ Á¶ÀÎ ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù:
Equijoin
Á¾¾÷¿øÀÇ ºÎ¼ À̸§À» °áÁ¤Çϱâ À§Çؼ EMP Å×À̺íÀÇ
DEPTNO ¿ °ª°ú DEPT Å×À̺íÀÇ DEPTNO ¿ °ªÀ» ºñ±³ÇÕ´Ï´Ù. EMP Å×À̺í°ú DEPT Å×ÀÌºí »çÀÌÀÇ °ü°è¼ºÀº equijoin -
Áï, ¾çÂÊ Å×À̺íÀÇ DEPTNO ¿ °ªÀÌ °°¾Æ¾ß ÇÕ´Ï´Ù. ÀÌ ¿µéÀº primary key¿Í foreign key°¡ µË´Ï´Ù.
ÁÖ: Equijoins Àº ´Ü¼ø Á¶ÀÎ ¶Ç´Â ³»ºÎ Á¶ÀÎÀ̶ó°íµµ ÇÕ´Ï´Ù.
EquijoinÀ¸·Î ·¹ÄÚµå °Ë»ö
À§ÀÇ ¿¹¿¡¼ :
DEPTNO ¿ÀÌ ¾çÂÊ Å×ÀÌºí¿¡ °øÅëÀ¸·Î ÀÖÀ¸¹Ç·Î ¸ðÈ£ÇÔÀ» ÇÇÇϱâ À§Çؼ ¿ À̸§ ¾Õ¿¡ Å×ÀÌºí ¸íÀ» ÀÛ¼ºÇØ¾ß ÇÕ´Ï´Ù.
Ãß°¡ÀûÀÎ °Ë»ö Á¶°Ç
Á¶ÀÎ ÀÌ¿Ü¿¡ WHERE Àý¿¡ Ãß°¡ÀûÀÎ Á¶°ÇÀ» °¡Áú ¼ö
ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, Á¾¾÷¿ø KingÀÇ Á¾¾÷¿ø ¹øÈ£, À̸§, ºÎ¼¹øÈ£ ±×¸®°í ºÎ¼ À§Ä¡¸¦ µð½ºÇ÷¹ÀÌ Çϱâ À§Çؼ´Â WHERE Àý¿¡ Ãß°¡ÀûÀÎ
Á¶°ÇÀÌ ÇÊ¿äÇÕ´Ï´Ù.
SQL> SELECT empno, ename,
emp.deptno, loc |
EMPNO ENAME DEPTNO
LOC |
Å×ÀÌºí º°Äª
Å×À̺í À̸§À¸·Î ¿ À̸§À»
Á¦ÇÑÇÏ´Â °ÍÀº Å×ÀÌºí ¸íÀÌ ±æ °æ¿ì¿¡´Â ¸¹Àº ½Ã°£À» ³¶ºñÇÒ ¼ö ÀÖ½À´Ï´Ù. Å×À̺í À̸§ ´ë½Å¿¡ Å×À̺í alias¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¿
º°ÄªÀÌ ´Ù¸¥ À̸§ÀÇ ¿À» ÁÖ´Â °Íó·³
Å×ÀÌºí º°ÄªÀº ´Ù¸¥ À̸§ÀÇ Å×À̺íÀ»
ÁÝ´Ï´Ù. Å×ÀÌºí º°ÄªÀº SQL Äڵ带
º¸´Ù Àû°Ô Çϵµ·Ï µµ¿Í ÁÜÀ¸·Î½á ¸Þ¸ð¸®¸¦ º¸´Ù Àû°Ô »ç¿ëÇÕ´Ï´Ù.
¿¹¿¡¼, Å×ÀÌºí º°ÄªÀÌ FROM Àý¿¡¼ ¾î¶»°Ô ½Äº°
µÇ´ÂÁö¸¦ ÁÖ¸ñÇϽʽÿÀ. Å×ÀÌºí ¸íÀ» ÀüºÎ ¸í½ÃÇÏ°í °ø¹éÀ» µÐ ´ÙÀ½ Å×ÀÌºí º°ÄªÀÌ ¸í½ÃµË´Ï´Ù. EMP Å×ÀÌºí¿¡ º°Äª E¸¦ ÁÖ¾ú°í, DEPT Å×ÀÌºí¿¡¼ º°Äª D¸¦
ÁÖ¾ú½À´Ï´Ù.
Áöħ¼
Ãß°¡ÀûÀÎ °Ë»öÁ¶°Ç
¶§¶§·Î µÎ°³ ÀÌ»óÀÇ Å×À̺íÀ» Á¶ÀÎÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦
µé¸é, °í°´ TKB SPORT SHOPÀÇ À̸§, ÁÖ¹®Ã³, Ç׸ñ¼ö, °¢ Ç׸ñÀÇ ÇÕ°è ±×¸®°í °¢ ÁÖ¹®ÀÇ Çհ踦 µð½ºÇ÷¹ÀÌ Çϱâ À§Çؼ´Â
CUSTOMER, ORD ±×¸®°í ITEM Å×À̺íÀ» Á¶ÀÎÇØ¾ß ÇÕ´Ï´Ù.
SQL> SELECT c.name, o.ordid, i.itemid,
i.itemtot, o.total |
NAME ORDID ITEMID ITEMTOT
TOTAL |
Non-Equijoin
EMP¿Í SALGRADE Å×ÀÌºí »çÀÌÀÇ °ü°è¼ºÀº EMP Å×À̺íÀÇ ¾î¶°ÇÑ ¿µµ Á÷Á¢ÀûÀ¸·Î SALGRADE Å×À̺íÀÇ ¿¿¡
°ü·ÃµÇÁö ¾ÊÀ½À» ÀǹÌÇÏ´Â non-equijoin ÀÔ´Ï´Ù. µÎ Å×ÀÌºí »çÀÌÀÇ °ü·Ã¼ºÀº EMP Å×À̺íÀÇ SAL ¿ÀÌ SALGRADE Å×À̺íÀÇ
LOSAL°ú HISAL¿ »çÀÌ¿¡ ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. °ü·Ã¼ºÀº µ¿µî(=)ÀÌ ¾Æ´Ñ ´Ù¸¥ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ¾ò¾îÁý´Ï´Ù.
Non-Equijoin (°è¼Ó)
À§ÀÇ ¿¹´Â Á¾¾÷¿øÀÇ ±Þ¿© µî±ÞÀ» °è»êÇϱâ À§Çؼ non-equijoin À» »ý¼ºÇÕ´Ï´Ù. ±Þ¿©´Â ÇÏÇÑ °ª°ú »óÇÑ °ª »çÀÌ¿¡
ÀÖ¾î¾ß ÇÕ´Ï´Ù.
ÀÌ ÁúÀÇ°¡ ½ÇÇàµÉ ¶§ ¸ðµç Á¾¾÷¿øµéÀº Á¤È®È÷ ÇÑ ¹ø¸¸ ³ªÅ¸³²À» ÁÖ¸ñÇϽʽÿÀ. ¸®½ºÆ®¿¡¼ Áߺ¹µÇ´Â Á¾¾÷¿øÀº ¾ø½À´Ï´Ù.
ÀÌ¿¡ ´ëÇÑ µÎ °¡ÁöÀÇ ÀÌÀ¯°¡ ÀÖ½À´Ï´Ù:
ÁÖ: <= ¿Í >= °°Àº ´Ù¸¥ ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, BETWEEN ÀÌ °¡Àå °£´ÜÇÕ´Ï´Ù. BETWEEN À» »ç¿ëÇÒ ¶§ ÇÏÇÑ °ªÀ» ¸ÕÀú ¸í½ÃÇÏ°í »óÇÑ °ªÀº ³ªÁß¿¡ ¸í½ÃÇÔÀ» ¸í½ÉÇϽʽÿÀ. Å×ÀÌºí º°ÄªÀº ¸ðÈ£¼ºÀÇ °¡´É¼º ¶§¹®ÀÌ ¾Æ´Ï¶ó ¼º´É ÀÌÀ¯ ¶§¹®¿¡ ¸í½ÃµÇ¾î ÀÖ½À´Ï´Ù.
Outer JoinÀ¸·Î Á÷Á¢ ÀÏÄ¡ÇÏ´Â °ÍÀÌ ¾ø´Â ·¹ÄÚµå ¸®ÅÏ
ÇàÀÌ Á¶ÀÎ
Á¶°ÇÀ» ¸¸Á·ÇÏÁö ¾ÊÀ¸¸é, ÇàÀº ÁúÀÇ °á°ú¿¡ ³ªÅ¸³ªÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¸é, EMP¿Í DEPT Å×À̺íÀÇ equijoin Á¶°Ç¿¡¼ ºÎ¼
OPERATIONS´Â ÇØ´ç ºÎ¼¿¡ ¾Æ¹«µµ ¾ø±â ¶§¹®¿¡ ³ªÅ¸³ªÁö ¾Ê½À´Ï´Ù.
SQL> SELECT e.ename, e.deptno,
d.dname |
ENAME DEPTNO DNAME |
Outer Join À¸·Î Á÷Á¢ ÀÏÄ¡ÇÏ´Â °ÍÀÌ ¾ø´Â ·¹ÄÚµå ¸®ÅÏ
Á¶ÀÎ Á¶°Ç¿¡
outer join ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¸é ºüÁ³´ø Çàµéµµ ¸®Åϵ˴ϴÙ. ¿¬»êÀÚ´Â °ýÈ£·Î µÑ·¯½ÎÀÎ ´õÇϱ⠱âÈ£(+) À̸ç, Á¤º¸°¡ ºÎÁ·ÇÑ Á¶ÀÎÂÊ¿¡
À§Ä¡ÇÕ´Ï´Ù. ÀÌ ¿¬»êÀÚ´Â ÇÑ °³ ÀÌ»óÀÇ null ÇàÀ» »ý¼ºÇÏ°í, Á¶ÀÎ °¡´ÉÇÑ °áÇÔÀÌ ¾ø´Â Å×À̺íÀÇ Çϳª ÀÌ»óÀÇ ÇàµéÀÌ ÀÌ·± null Çà¿¡
Á¶Àε˴ϴÙ.
±¸¹®Çü½Ä¿¡¼:
table1.column = table2.column
(+)
Å×À̺íÀ» ÇÔ²² Á¶ÀÎ(¶Ç´Â °ü·Ã)½ÃÅ°´Â Á¶°ÇÀÔ´Ï´Ù. outer join ½Éº¼ÀÔ´Ï´Ù. WHERE Àý Á¶°ÇÀÇ ¾çÂÊÀÌ ¾Æ´Ï¶ó
¾î´À ÇÑÂÊ¿¡ µÑ ¼ö ÀÖ½À´Ï´Ù. ÀÏÄ¡ÇÏ´Â ÇàÀÌ ¾ø´Â Å×À̺íÀÇ ¿ À̸§ µÚ¿¡ outer join ¿¬»êÀÚ¸¦ µÓ´Ï´Ù.
Outer JoinÀ¸·Î Á÷Á¢ ÀÏÄ¡ÇÏ´Â °ÍÀÌ ¾ø´Â ·¹ÄÚµå ¸®ÅÏ
(°è¼Ó)
À§ÀÇ ¿¹´Â ¸ðµç ºÎ¼ÀÇ ¹øÈ£¿Í À̸§À» µð½ºÇ÷¹ÀÌ ÇÕ´Ï´Ù. Á¾¾÷¿øÀÌ
¾ø´Â OPERATIONS ºÎ¼µµ ¸¶Âù°¡Áö·Î µð½ºÇ÷¹ÀÌ µË´Ï´Ù.
Outer
Join Á¦¾à»çÇ×
ÀÚüÀûÀ¸·Î Å×À̺í Á¶ÀÎ
¶§¶§·Î ÀÚüÀûÀ¸·Î Å×À̺íÀ» Á¶ÀÎÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. °¢ Á¾¾÷¿øÀÇ °ü¸®ÀÚ ¸íÀ» ¾Ë±â À§Çؼ ÀÚüÀûÀ¸·Î EMP Å×À̺íÀ»
Á¶ÀÎÇÏ´Â°Ô ÇÊ¿äÇÕ´Ï´Ù. ¿¹¸¦ µé¸é, BlakeÀÇ °ü¸®ÀÚ ¸íÀ» ¾Ë·Á¸é, ´ÙÀ½ÀÌ ÇÊ¿äÇÕ´Ï´Ù:
ÀÌ Ã³¸®¿¡¼´Â Å×À̺íÀ» µÎ ¹ø °Ë»çÇÕ´Ï´Ù. ù ¹ø°´Â Å×ÀÌºí¿¡¼ ENAME ¿ÀÌ BlakeÀÌ°í MGR °ªÀÌ 7839ÀÎ °ÍÀ» ã±â À§Çؼ °Ë»çÇÕ´Ï´Ù. µÎ ¹ø°´Â EMPNO ¿ÀÌ 7839ÀÌ°í ENAME ¿ÀÌ KingÀÎ °ÍÀ» ã½À´Ï´Ù.
ÀÚüÀûÀ¸·Î Å×À̺í Á¶ÀÎ (°è¼Ó)
À§ÀÇ ¿¹´Â, ÀÚüÀûÀ¸·Î EMP Å×À̺íÀ»
Á¶ÀÎÇÕ´Ï´Ù. °°Àº Å×À̺í EMP¿¡ ´ëÇØ µÎ °³ÀÇ º°Äª WORKER¿Í MANAGER¸¦ »ç¿ëÇÔÀ¸·Î½á FROM Àý¿¡ µÎ °³ÀÇ Å×À̺íÀ» »ç¿ëÇÏ´Â °Í°ú
°°½À´Ï´Ù.
ÀÌ ¿¹¿¡¼ WHERE ÀýÀº ¡°workerÀÇ °ü¸®ÀÚ ¹øÈ£°¡ managerÀÇ Á¾¾÷¿ø ¹øÈ£¿Í ÀÏÄ¡ÇÏ´Â »óȲ¡± À» ÀǹÌÇÏ´Â
Á¶ÀÎÀ» Æ÷ÇÔÇÕ´Ï´Ù.
µÎ Å×ÀÌºí °£¿¡ self joinÀ» ÇÏ´Â SELECT¹®ÀÎ °ÍÀº?
A. SELECT e.ename, e.sal, d.dname
FROM emp e, dept d WHERE e.deptno = d.deptno;
B. SELECT e.ename, e.job,
e.sal, s.grade FROM emp e, salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal;
C. SELECT e.ename, e.sal, d.dname FROM emp e, dept d WHERE e.deptno =
d.deptno(+);
D. SELECT w.ename, m.ename FROM emp w, emp m WHERE w.mgr =
m.empno;
´ä