ãåå¿è åããSQLã«ãããOUTER JOINïŒå€éšçµåïŒãåããããã解説
ããŒã¿ããŒã¹ã«ãããŠSQLã䜿çšããŠç°ãªãããŒãã«éã§æ å ±ãçµã³ã€ããããšã¯ãããããŸãããå šãŠã®ããŒã¿ãå¿ ãããäžèŽããããã§ã¯ãããŸãããããã§æŽ»çšãããã®ãOUTER JOINïŒå€éšçµåïŒã§ãããã®èšäºã§ã¯äž»ã«åå¿è ã®æ¹ã«åããŠãOUTER JOINã®åºæ¬çãªæŠå¿µããäœ¿ãæ¹ãæŽ»çšã·ãŒã³ãŸã§ã詳ãã解説ããŸããOUTER JOINïŒå€éšçµåïŒãšã¯äœã
OUTER JOINã¯ã2ã€ä»¥äžã®ããŒãã«ãããŒãšãªãã«ã©ã ïŒåïŒãåºã«çµåããäžèŽããè¡ã ãã§ãªãäžèŽããªãè¡ãå«ããŠçµæã«è¡šç€ºããææ³ã§ãã
çµåããã«ã©ã ã®å€ãäžèŽããªãå Žåã§ããé¢é£æ§ãæã£ãããŒã¿ãçµåããããšãã§ããŸããããã«ãããæ¬ æããŒã¿ãè£å®ããªããæ
å ±ãååŸããããšãå¯èœã§ãã
OUTER JOINïŒå€éšçµåïŒã®åºæ¬çãªæ§æ
OUTER JOINã䜿çšããéã®åºæ¬çãªæ§æã¯ä»¥äžã®éãã§ãã
SELECT åå
FROM ããŒãã«1
LEFT/RIGHT/FULL OUTER JOIN ããŒãã«2
ON ããŒãã«1.ããŒãšãªãåå = ããŒãã«2.ããŒãšãªãåå;
ãã®äŸã§ã¯SELECTã§ååŸããåãæå®ããããŒãã«1ãšããŒãã«2ãçµåããããŒãã«ã瀺ããON以äžã«çµåæ¡ä»¶ãæå®ããŸããçµåæ¡ä»¶ã¯ãããŒãšãªãåå士ã®äžèŽã倿ããåºæºã§ãããŸããLEFT/RIGHT/FULL OUTER JOINã®ãããããéžã¶ããšã§ãå·Šå€éšçµåãå³å€éšçµåãå®å šå€éšçµåãè¡ãããšãã§ããŸãã
å·Šå€éšçµåãå³å€éšçµåãå®å
šå€éšçµåã«ã€ããŠã¯ä»¥äžã«è§£èª¬ããŸãã
ãããã®å€éšçµåã¯ããŒã¿ã®è£å®ãæ¬ æããŒã¿ã®ç¢ºèªãé¢é£ããŒã¿ã®çµ±åãªã©ãããŸããŸãªåæãæäœã«æŽ»çšãããŸãã®ã§ãå®éã®æäœããããæ¢åã®ã¯ãšãªãšå®è¡çµæãåç
§ããªããèŠããŠãããŸãããã
å·Šå€éšçµåïŒLEFT OUTER JOINïŒ
å·Šå€éšçµåã¯ãæå®ããããŒãã«ïŒå·ŠåŽã®ããŒãã«ïŒã®å
šãŠã®è¡ãå«ã¿ãå
±éã®ããŒã«åºã¥ããŠçµåæ¡ä»¶ãæºããè¡ãããå Žåã«ã¯ãããçµåããŸãã
äžèŽããªãå Žåã¯å³åŽã®ããŒãã«ã®è©²åœç®æã«ã¯NULLãå
¥ããŸããå·Šå€éšçµåã¯å·ŠåŽã®ããŒãã«ã®ãã¹ãŠã®æ
å ±ãç¶æããªãããå³åŽã®ããŒãã«ã®ããŒã¿ãçµåããéã«äœ¿çšãããŸãã
å·Šå€éšçµåã®æ§æ
SELECT åå
FROM ããŒãã«1
LEFT OUTER JOIN ããŒãã«2
ON ããŒãã«1.å
±éã®ã«ã©ã = ããŒãã«2.å
±éã®ã«ã©ã ;
å³å€éšçµåïŒRIGHT OUTER JOINïŒ
å³å€éšçµåã¯æå®ããããŒãã«ïŒå³åŽã®ããŒãã«ïŒã®å
šãŠã®è¡ãå«ã¿ãå
±éã®ããŒã«åºã¥ããŠçµåæ¡ä»¶ãæºããè¡ãããå Žåã«ã¯ãããçµåããŸãã
äžèŽããªãå Žåã¯å·ŠåŽã®ããŒãã«ã®è©²åœç®æã«ã¯NULLãå
¥ããŸããå³å€éšçµåã¯å³åŽã®ããŒãã«ã®ãã¹ãŠã®æ
å ±ãç¶æããªãããå·ŠåŽã®ããŒãã«ã®ããŒã¿ãçµåããéã«äœ¿çšãããŸãã
å³å€éšçµåã®æ§æ
SELECT åå
FROM ããŒãã«1
RIGHT OUTER JOIN ããŒãã«2
ON ããŒãã«1.å
±éã®ã«ã©ã = ããŒãã«2.å
±éã®ã«ã©ã ;
å®å šå€éšçµåïŒFULL OUTER JOINïŒ
å®å
šå€éšçµåã¯ãæå®ãã2ã€ã®ããŒãã«ã®å
šãŠã®è¡ãå«ã¿ãå
±éã®ããŒã«åºã¥ããŠçµåæ¡ä»¶ãæºããè¡ãããå Žåã«ã¯ãããçµåããŸãã
äžèŽããªãå Žåã¯ã©ã¡ããã®ããŒãã«ã®è©²åœç®æã«ã¯NULLãå
¥ããŸããå®å
šå€éšçµåã¯äž¡æ¹ã®ããŒãã«ã®ãã¹ãŠã®æ
å ±ãç¶æããªãããããŒã¿ã®é¢é£æ§ã確èªããéã«äœ¿çšãããŸãã
å®å šå€éšçµåã®æ§æ
SELECT åå
FROM ããŒãã«1
FULL OUTER JOIN ããŒãã«2
ON ããŒãã«1.å
±éã®ã«ã©ã = ããŒãã«2.å
±éã®ã«ã©ã ;
åçµåã®éããŸãšã
- å·Šå€éšçµå: å·ŠåŽã®ããŒãã«ã®å šãŠã®è¡ãå«ã¿ãäžèŽããè¡ãããå Žåã¯å³åŽã®ããŒãã«ã®å¯Ÿå¿ããè¡ãçµåããŸããäžèŽããªãå Žåã¯ãå³åŽã®ããŒãã«ã®å¯Ÿå¿ããè¡ã«NULLãå ¥ããŸãã
- å³å€éšçµå: å³åŽã®ããŒãã«ã®å šãŠã®è¡ãå«ã¿ãäžèŽããè¡ãããå Žåã¯å·ŠåŽã®ããŒãã«ã®å¯Ÿå¿ããè¡ãçµåããŸããäžèŽããªãå Žåã¯ãå·ŠåŽã®ããŒãã«ã®å¯Ÿå¿ããè¡ã«NULLãå ¥ããŸãã
- å®å šå€éšçµå: äž¡æ¹ã®ããŒãã«ã®å šãŠã®è¡ãå«ã¿ãäžèŽããè¡ãããå Žåã¯ãããçµåããŸããäžèŽããªãå Žåã¯ãã©ã¡ããã®ããŒãã«ã®å¯Ÿå¿ããè¡ã«NULLãå ¥ããŸãã
OUTER JOINã®äœ¿ãæ¹
ããã§ã¯å®éã®ããŒãã«ãããŒã¿ã亀ããŠOUTER JOINã®ãµã³ãã«ã³ãŒãã瀺ããŸããããå ·äœçãªOUTER JOINã®äœ¿ãæ¹ãã€ã¡ãŒãžããŠã¿ãŠãã ããã
ãã®äŸã§ã¯é¡§å®¢æ å ±ãæ ŒçŽããCustomersããŒãã«ãšæ³šææ å ±ãæ ŒçŽããOrdersããŒãã«ã䜿çšããŸãã
Customers ããŒãã«
| CustomerID | CustomerName | City |
|------------|--------------|-----------|
| 1 | Alice | Tokyo |
| 2 | Bob | Osaka |
| 3 | Carol | Aichi |
Orders ããŒãã«
| OrderID | CustomerID | OrderDate |
|---------|------------|------------|
| 101 | 1 | 2023-07-15 |
| 102 | 2 | 2023-07-16 |
| 103 | 4 | 2023-07-17 |
以äžã®ã¯ãšãªã¯ãCustomersããŒãã«ãšOrdersããŒãã«ãCustomerIDåãåºæºã«LEFT OUTER JOINããŠããŸãã
SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
LEFT OUTER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
ãã®ã¯ãšãªã®çµæã¯ä»¥äžã®éãã§ãã
| CustomerName | OrderDate |
|--------------|------------|
| Alice | 2023-07-15 |
| Bob | 2023-07-16 |
| Carol | NULL |
ãã®çµæã¯é¡§å®¢IDã軞ã«ããŠé¡§å®¢ã®ååãšæ³šææ¥ãæœåºãããäžèŽããªãïŒããŒã¿ãååšããªãïŒé¡§å®¢ã®å Žåã«ã¯NULLã衚瀺ãããŠããããšãåãããŸãã
ïŒã€ä»¥äžã®ããŒãã«ã§OUTER JOINïŒå€éšçµåïŒã䜿çšããå Žå
3ã€ä»¥äžã®ããŒãã«ã§OUTER JOINã䜿çšããéã«ã¯ããŒãã«ãçµåããé çªã«æ³šæããå¿
èŠããããŸãã
çµåããããŒãã«ã®é åºã«ãã£ãŠçµæãç°ãªãããšãããããã§ãã
ãŸãã3ã€ä»¥äžã®ããŒãã«ãçµåããå Žåãéäžã®ããŒãã«ã®çµæã«åºã¥ããŠããã«å¥ã®ããŒãã«ãçµåããããšãã§ããŸãã
äŸãšããŠCustomersããŒãã«ãOrdersããŒãã«ããããŠProductsããŒãã«ãçµåããã±ãŒã¹ãèããŠã¿ãŸãããã
Customers ããŒãã«
| CustomerID | CustomerName | City |
|------------|--------------|-----------|
| 1 | Alice | Tokyo |
| 2 | Bob | Osaka|
| 3 | Carol | Aichi |
Orders ããŒãã«
| OrderID | CustomerID | OrderDate |
|---------|------------|------------|
| 101 | 1 | 2023-07-15 |
| 102 | 2 | 2023-07-16 |
| 103 | 3 | 2023-07-17 |
Products ããŒãã«
| ProductID | ProductName | Price |
|-----------|-------------|---------|
| 1 | Laptop | 1000 |
| 2 | Smartphone | 800 |
| 3 | Tablet | 500 |
以äžã®ã¯ãšãªã¯CustomersããŒãã«ãOrdersããŒãã«ãProductsããŒãã«ã®3ã€ã®ããŒãã«ãçµåããŠã顧客ããšã®æ³šææ å ±ãšååæ å ±ãååŸããäŸã§ãã
SELECT Customers.CustomerName, Orders.OrderDate, Products.ProductName
FROM Customers
LEFT OUTER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
LEFT OUTER JOIN Products
ON Orders.ProductID = Products.ProductID;
ãã®ã¯ãšãªã§ã¯ããŸãCustomersããŒãã«ãšOrdersããŒãã«ãCustomerIDåãåºæºã«LEFT OUTER JOINããŠããã®çµæãããã«ProductsããŒãã«ãšProductIDåãåºæºã«LEFT OUTER JOINããŠããŸãã
çµæã¯é¡§å®¢ããšã®æ³šææ¥ãšãã®æ³šæã§è³Œå
¥ãããåååã衚瀺ãããŸãã
ãã ããç¹å®ã®é¡§å®¢ãååã賌å
¥ããŠããªãå Žåããç¹å®ã®æ³šæãååæ
å ±ãšé¢é£ä»ããããŠããªãå Žåã«ã¯å¯Ÿå¿ããåã«ã¯NULLã衚瀺ãããŸãã
3ã€ä»¥äžã®ããŒãã«ã§OUTER JOINã䜿çšããéã«ã¯ãçµåããé åºãšçµåæ¡ä»¶ãæ³šææ·±ãèšå®ããå¿
èŠããããŸããããŸã掻çšããããšã§è€æ°ã®ããŒãã«ãçµåããŠããŒã¿ã®ååŸãã§ããŸãã
OUTER JOINã䜿ãã¡ãªãã
OUTER JOINã䜿çšããããšã§äžèŽããªãããŒã¿ãå«ããŠé¢é£æ§ã®ããããŒã¿ãååŸã§ããŸãã
ããŒã¿ã®è£å®ãæ¬ æããŒã¿ã®ç¢ºèªã«åœ¹ç«ã¡ãŸããäŸãã°ã顧客æ
å ±ãšæ³šææ
å ±ãçµåããŠãé¡§å®¢ã®æ³šæç¶æ³ãææ¡ããããšãã§ããŸãã
OUTER JOINã䜿ãå Žé¢
OUTER JOINã¯ã以äžã®ãããªå Žé¢ã§æŽ»çšãããŸãã
- æ¬ æããŒã¿ã®ç¢ºèª: ããŒã¿ããŒã¹å ã®æ¬ æããŒã¿ãç¹å®ããéã«äœ¿çšãããŸããçµåããŠäžèŽããªãè¡ã«ã¯NULLã衚瀺ãããŸãã
- ããŒã¿ã®è£å®: æ¬ æããŒã¿ãä»ã®ããŒãã«ããè£å®ããéã«OUTER JOINãæçšã§ããäŸãã°ã顧客æ å ±ã«æ³šææ å ±ãçµåããŠé¡§å®¢ã®æ³šæç¶æ³ã確èªããããšãã§ããŸãã
OUTER JOINã䜿ããªãã»ããè¯ãå Žé¢
OUTER JOINã¯äžèŽããªãããŒã¿ãå«ããŠçµåãããããããŒã¿ããŒã¹ã倧ããå Žåãçµåæ¡ä»¶ãè€éãªå Žåã«ã¯ãšãªã®ããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸãã
ãã®éã«ã¯ã€ã³ããã¯ã¹ã®æé©åãã¯ãšãªã®å·¥å€«ãå¿
èŠã§ãã
å€éšçµåãšå éšçµåã®éã
SQLã«ã¯INNER JOINïŒå
éšçµåïŒãšããæ§æãååšããŸããå
éšçµåã¯å€éšçµåãšã¯å¯Ÿç
§çã«ãäžèŽããããŒã¿ã®ã¿ãçµåããŸãã
å
éšçµåãšæ¯ã¹ãŠOUTER JOINã¯äžèŽããªãããŒã¿ãå«ããŠçµæãååŸã§ãããããããŒã¿ã®è£å®ãæ¬ æããŒã¿ã®ç¢ºèªã«é©ããŠããŸãã
å éšçµåã«ã€ããŠã¯ããåå¿è åããSQLã«ãããINNER JOINïŒå éšçµåïŒãåããããã解説 ã§è©³ãã解説ããŠããŸãã
ãŸãšã
OUTER JOINã¯äžèŽããªãããŒã¿ãå«ããŠçµåããææ³ã§ãããããŒã¿ã®è£å®ãæ¬ æããŒã¿ã®ç¢ºèªã«åœ¹ç«ã¡ãŸãã
æ¬ æããŒã¿ãè£å®ããããé¢é£æ§ã®ããæ
å ±ãååŸããéã«æŽ»çšã§ãããããããŒã¿ããŒã¹ã®å¹æçãåæã«ã¯æ¬ ãããªãæ§æã§ãã
ãã ããè€æ°ã®ããŒãã«ãçµåããå Žåã«ã¯çµåé ã«æ³šæããå¿
èŠãããã倧ããªããŒãã«ãçµåããå Žåã«ã¯ããã©ãŒãã³ã¹ã®äœäžã«ã泚æããå¿
èŠããããŸãã
èšè¿°ããã¯ãšãªãæ£ããããããŒã¿ã®å°ãªãããŒãã«ã§éæç¢ºèªããªããèšè¿°ãé²ããŠããã®ãè¯ãã§ãããã












