°úÁ¤ ¸ñÇ¥

º» °úÁ¤Àº ÀÌ¿ë °¡´ÉÇÑ °¢±â ´Ù¸¥ ¹æ¹ýµéÀ» »ç¿ëÇÏ¿© Çϳª ÀÌ»óÀÇ Å×À̺í·ÎºÎÅÍ µ¥ÀÌÅ͸¦ ±¸ÇÏ´Â ¹æ¹ýÀ» ´Ù·ì´Ï´Ù.

 

´ÙÁß Å×À̺í·ÎºÎÅÍ µ¥ÀÌÅÍ È¹µæ

¶§¶§·Î Çϳª ÀÌ»óÀÇ Å×À̺í·ÎºÎÅÍ µ¥ÀÌÅ͸¦ »ç¿ëÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. À§ÀÇ ¿¹¿¡¼­ ¸®Æ÷Æ®´Â µÎ °³ÀÇ Å×À̺í·ÎºÎÅÍ µ¥ÀÌÅ͸¦ µð½ºÇ÷¹ÀÌ ÇÕ´Ï´Ù.

¸®Æ÷Æ®¸¦ ¸¸µé±â À§Çؼ­´Â 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
  2  FROM    emp, dept;


ENAME      DNAME
---------- --------------
KING       ACCOUNTING
BLAKE      ACCOUNTING
...
KING       RESEARCH
BLAKE      RESEARCH
...
56 rows selected.

 

Á¶ÀÎÀÇ À¯Çü

Á¶ÀÎ Á¶°Ç¿¡´Â µÎ °¡ÁöÀÇ Áß¿äÇÑ À¯ÇüÀÌ ÀÖ½À´Ï´Ù:

Ãß°¡ÀûÀÎ Á¶ÀÎ ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù:

 

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
  2  FROM        emp, dept
  3  WHERE       emp.deptno = dept.deptno
  4  AND         INITCAP(ename) = 'King';


    EMPNO ENAME         DEPTNO LOC
--------- ---------- --------- -------------
     7839 KING              10 NEW YORK

 

Å×ÀÌºí º°Äª

Å×À̺í À̸§À¸·Î ¿­ À̸§À» Á¦ÇÑÇÏ´Â °ÍÀº Å×ÀÌºí ¸íÀÌ ±æ °æ¿ì¿¡´Â ¸¹Àº ½Ã°£À» ³¶ºñÇÒ ¼ö ÀÖ½À´Ï´Ù. Å×À̺í À̸§ ´ë½Å¿¡ Å×À̺í 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
  2  FROM   customer c, ord o, item i
  3  WHERE  c.custid = o.custid
  4  AND    o.ordid = i.ordid
  5  AND    c.name = 'TKB SPORT SHOP';


NAME             ORDID    ITEMID   ITEMTOT     TOTAL
------------ --------- --------- --------- ---------
TKB SPORT SHOP     610         3        58     101.4
TKB SPORT SHOP     610         1        35     101.4
TKB SPORT SHOP     610         2       8.4     101.4

 

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
  2  FROM   emp e, dept d
  3  WHERE  e.deptno = d.deptno;


ENAME         DEPTNO DNAME
---------- --------- -------------
KING              10 ACCOUNTING
BLAKE             30 SALES
CLARK             10 ACCOUNTING
JONES             20 RESEARCH
...
ALLEN             30 SALES
TURNER            30 SALES
JAMES             30 SALES
...
14 rows selected.

 

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;
´ä

O


O