
3åéããŒã¿ããŒã¹è¬åº§ 第7å: ããŒã¿ããŒã¹ããã£ãšéãïŒïœã€ã³ããã¯ã¹ãšæ§èœæ¹åã®åºæ¬ïœ
ç»å Žäººç©ïŒ
ãã£ããå çïŒéç§°:å çïŒïŒ ãªããžã§ã¯ãæåãã¹ã¿ãŒãæè¿ã¯ããŒã¿ããŒã¹ã®äžçã«ã詳ããã
ããã婿ïŒéç§°:ãããåïŒïŒ ããã°ã©ãã³ã°ãå§ããã°ããã®è¥æãããŒã¿ããŒã¹ã¯ãŸã æªç¥ã®äžçã
ãããåïŒ å çïŒSELECTæãããã䟿å©ã§ããïŒã§ããããŒã¿ãå¢ããŠãããšãæ€çŽ¢ãé ããªãããããªãããšäžå®ã§ãã
å
çïŒ è¯ããšããã«æ°ã¥ãããããããåããã®éããããŒã¿ãå¢ããã°å¢ããã»ã©ãããŒã¿ããŒã¹ã®æ§èœã¯éèŠã«ãªãã仿¥ã®ããŒãã¯ãããŒã¿ããŒã¹ã®æ€çŽ¢é床ãåçã«åäžãããããã®ä»çµã¿ããã€ã³ããã¯ã¹ãã ã
ããã¯ãããŒã¿ã®ä¿¡é Œæ§ãšåããããéèŠãªæŠå¿µã ãã
1. æ¢ãããæ å ±ãç¬æã«èŠã€ããïœã€ã³ããã¯ã¹ãšã¯ïœ
å
çïŒ ã€ã³ããã¯ã¹ãšã¯ãããŒã¿ããŒã¹ã®æ€çŽ¢ãé«éåããããã«äœãããã玢åŒãã®ããšã ã
æ¬ãæ³åããŠã¿ãŠã»ãããæ¬ã®äžããç¹å®ã®ããŒã¯ãŒããæ¢ããšããããŒãžãæåããæåŸãŸã§èªãã®ã§ã¯ãªããå·»æ«ã®ã玢åŒããèŠãŠããã®ããŒã¯ãŒããäœããŒãžã«ãããã確èªããããïŒ
å
çïŒ ããŒã¿ããŒã¹ã®ã€ã³ããã¯ã¹ãåãã ã
æ€çŽ¢ãããåïŒã«ã©ã ïŒã«ãããããã€ã³ããã¯ã¹ãäœæããŠãããšãããŒã¿ããŒã¹ã¯ãã¹ãŠã®è¡ãäžã€ãã€èª¿ã¹ãïŒãã«ã¹ãã£ã³ãšããïŒã®ã§ã¯ãªãããã®ã€ã³ããã¯ã¹ã䜿ã£ãŠãç®çã®ããŒã¿ãã©ãã«ããããç¬æã«èŠã€ãããããã ã
ã€ã³ããã¯ã¹ã®äœæäŸ
-- usersããŒãã«ã®nameåã«ã€ã³ããã¯ã¹ãäœæ
CREATE INDEX idx_users_name ON users(name);
-- ããã§ãnameåã䜿ã£ãæ€çŽ¢ãé«éåããã
SELECT * FROM users WHERE name = 'å±±ç° å€ªé';
2. ã€ã³ããã¯ã¹ã®ã¡ãªãããšãã¡ãªãã
å
çïŒ ã€ã³ããã¯ã¹ã¯éåžžã«äŸ¿å©ã ããå®ç§ãªäžèœè¬ã§ã¯ãªãã
ã¡ãªãããšãã¡ãªãããçè§£ããŠãé©åã«äœ¿ãåããããšãéèŠã ã
ã¡ãªããïŒçŽ¢åŒãä»ãããšéããªãããšïŒ
æ€çŽ¢é床ã®åäž: WHEREå¥ãJOINã§æå®ããåã«ã€ã³ããã¯ã¹ããããšãããŒã¿ã®çµã蟌ã¿ãéåžžã«éããªãã
ããŒã¿ã®ãœãŒããéã: ORDER BYå¥ã«ããããŒã¿ã®äžŠã¹æ¿ããå¹çåãããã
ãã¡ãªããïŒçŽ¢åŒãä»ãããšé ããªãããšïŒ
ããŒã¿æžã蟌ã¿ã®é å»¶: INSERTãUPDATEãDELETEãªã©ã®ããŒã¿æžãèŸŒã¿æäœãè¡ããã³ã«ãããŒã¿æ¬äœã ãã§ãªããã€ã³ããã¯ã¹ãæŽæ°ããå¿ èŠããããããåŠçãé ããªãã
ã¹ãã¬ãŒãžå®¹éã®æ¶è²»: ã€ã³ããã¯ã¹èªäœãããŒã¿ãªã®ã§ããã£ã¹ã¯å®¹éãæ¶è²»ããã
ãããåïŒ ãããéé²ã«ã€ã³ããã¯ã¹ãããããäœãã°ãããããããªããã§ããïŒ
æ€çŽ¢ãå€ãåã«çµã£ãŠäœãå¿
èŠãããã£ãŠããšãïŒ
å
çïŒ ãã®éãïŒéé²ã«ã€ã³ããã¯ã¹ãäœãã®ã¯çŠç©ã ã
ã€ã³ããã¯ã¹ã¯æ€çŽ¢é床ãäžããããã®éæ³ã§ã¯ãªãã
ã©ã®åã«ã€ã³ããã¯ã¹ãäœãã¹ããããããŠã€ã³ããã¯ã¹ãä»ãããããšã©ããªããããšãã£ããã¬ãŒããªããçè§£ããããšãéèŠã ã
3. SQLã®æ§èœãæ¹åããåºæ¬çãªèãæ¹
å çïŒ ã€ã³ããã¯ã¹ã®ä»ã«ããSQLã®æ§èœãæ¹åããããã®åºæ¬çãªãã¯ããã¯ãããã€ãããã
SELECT *ãé¿ãã: å¿ èŠãªåã ããå ·äœçã«æå®ããããšã§ããããã¯ãŒã¯è»¢ééãã¡ã¢ãªæ¶è²»ãæžããããšãã§ããã
ãµãã¯ãšãªãé¿ãã: å¯èœã§ããã°ããµãã¯ãšãªïŒã¯ãšãªã®äžã«ã¯ãšãªãæžãããšïŒãããJOINã䜿ã£ãŠããŒã¿ãçµåããæ¹ããå€ãã®å Žåã§é«éã«å®è¡ã§ããã
ã€ã³ããã¯ã¹ã䜿ãããæ¡ä»¶ã§æ€çŽ¢ãã: WHERE column = '...' ã®ãããªåœ¢åŒã¯ã€ã³ããã¯ã¹ã䜿ãããããããWHERE SUBSTRING(column, 1, 3) = '...' ã®ããã«é¢æ°ãæããšãã€ã³ããã¯ã¹ã䜿ããããã«ã¹ãã£ã³ã«ãªãããšãããã
4. ã¯ãšãªå®è¡èšç»ã®è³¢ãéžæïœã«ãŒã«ããŒã¹ vs. ã³ã¹ãããŒã¹ïœ
å
çïŒ ããŒã¿ããŒã¹ã¯ãã¯ãšãªãå®è¡ããããšãã«ãã©ãããã°æãå¹çããããŒã¿ãååŸã§ãããããèªåçã«å€æããã
ãã®å€ææ¹æ³ã«ã¯ã倧ããåããŠ2ã€ã®ã¢ãããŒãããããã ã
ã«ãŒã«ããŒã¹ã»ãªããã£ãã€ã¶ (RBO):
äºåã«æ±ºããããã«ãŒã«ã«åŸã£ãŠãå®è¡èšç»ã決å®ããã
äŸãã°ããWHEREå¥ã«ã€ã³ããã¯ã¹ãä»ããŠããåãããã°å¿ ã䜿ãããšãã£ãåçŽãªã«ãŒã«ã§å€æãããããããŒã¿ã®åããªã©ã¯èæ ®ããªãã
ã³ã¹ãããŒã¹ã»ãªããã£ãã€ã¶ (CBO):
ããŒã¿ã®éãåããšãã£ãçµ±èšæ å ±ãåºã«ãè€æ°ã®å®è¡èšç»ãæ¯èŒããæãã³ã¹ãïŒåŠçæéãCPUæ¶è²»ãªã©ïŒãäœããã®ãéžæããã
ãããçŸåšã®äž»æµã ã
ã«ãŒã«ããŒã¹ vs. ã³ã¹ãããŒã¹ã®å
·äœçãªäŸ
å çïŒ äŸãã°ãECãµã€ãã®productsããŒãã«ã«ä»¥äžã®2ã€ã®ã€ã³ããã¯ã¹ããã£ããšãããã
ã€ã³ããã¯ã¹AïŒcategory_idåã«äœæããã€ã³ããã¯ã¹
ã€ã³ããã¯ã¹BïŒpriceåã«äœæããã€ã³ããã¯ã¹
ããã§ã以äžã®ãããªã¯ãšãªãçºè¡ãããšããã
SELECT * FROM products
ãWHERE category_id = 1
AND price > 10000;å çïŒ ãã®ã¯ãšãªã«å¯ŸããŠãRBOãšCBOã¯ããããã©ãåããšæãïŒ
RBOã®å Žå:
RBOã¯ããŒã¿ã®åããèæ ®ããªãã
代ããã«ãæ¡ä»¶æã®åœ¢åŒãèŠãŠå€æããã
category_id = 1ãšããçå·ïŒ=ïŒæ¡ä»¶ã¯ãprice > 10000ãšããç¯å²ïŒ>ïŒæ¡ä»¶ããããããå³å¯ã«ããŒã¿ãçµã蟌ããå¯èœæ§ãé«ããšå€æããã
ãã®ãããå ã«æå®ãããŠããcategory_idã®ã€ã³ããã¯ã¹ïŒã€ã³ããã¯ã¹AïŒã䜿ã£ãŠããŒã¿ãçµã蟌ãããšããèšç»ãç«ãŠãã ããã
CBOã«ã®å Žå:
CBOã¯ããŸãããŒã¿ã®çµ±èšæ å ±ã確èªããããããcategory_id = 1ã®ããŒã¿ãå šäœã®90%ãå ããŠããããããã®æ¡ä»¶ã§çµã蟌ãã§ãããŸãå¹çãè¯ããªããªâŠããšå€æããã
äžæ¹ã§ãprice > 10000ã®ããŒã¿ãå šäœã®2%ãããªãã£ããã
ãpriceã®ã€ã³ããã¯ã¹ïŒã€ã³ããã¯ã¹BïŒã䜿ã£ãã»ãããå§åçã«æ©ãããŒã¿ãèŠã€ããããïŒããšå€æããã€ã³ããã¯ã¹Bãåªå ããŠäœ¿ãããšããèšç»ãç«ãŠããã ã
ãã®ããã«ãCBOã¯ããŒã¿ã®ãçŸå®ã®ç¶æ³ããèæ
®ããŠãæãè³¢ãæ¹æ³ãèªåçã«éžãã§ããããã ã
çµ±èšæ å ±ã®æŽæ°ããªãéèŠãïŒ
å
çïŒ CBOã¯ãçµ±èšæ
å ±ããé Œãã«æé©ãªå®è¡èšç»ãç«ãŠãã
ã€ãŸããçµ±èšæ
å ±ãå€ããªããšãééã£ã倿ãããŠããŸãå¯èœæ§ãããã
äŸãã°ãprice > 10000ã®ååã¯å
ã
2%ãããªãã£ãã®ã«ãæè¿ã§æ¥ã«å¢ããŠ50%ã«ãªã£ãŠãããšããã
å€ãçµ±èšæ
å ±ããæã£ãŠããªãCBOã¯ãçžå€ããããpriceã®ã€ã³ããã¯ã¹ãå¹ççã ããšå€æãç¶ããã
ããããå®éã«ã¯ãã®ã€ã³ããã¯ã¹ã䜿ã£ãŠãããŒã¿ã®çµã蟌ã¿å¹çã¯æªããªã£ãŠããŸããããã£ãŠé
ããªãå¯èœæ§ããããã ã
å
çïŒ ã ãããããããŒã¿ãé »ç¹ã«æŽæ°ãããããŒãã«ã§ã¯ãçµ±èšæ
å ±ã宿çã«æŽæ°ããéçšãå¿
èŠã«ãªãã
çµ±èšæ
å ±ã®æŽæ°ã¯ãæ¥æ¬¡ã鱿¬¡ãææ¬¡ãªã©ãããŒã¿æŽæ°ã®é »åºŠã«åãããŠèšç»çã«è¡ãã®ãäžè¬çã ã
5. è€åã€ã³ããã¯ã¹ãšWHEREå¥ã®æ¯ãèã
å çïŒ ããã§ãã€ã³ããã¯ã¹ã®äžã§ãç¹ã«éèŠãªãè€åã€ã³ããã¯ã¹ããšãè€éãªWHEREå¥ã§ã®åäœã«ã€ããŠãããã«è©³ããèŠãŠãããã
è€åã€ã³ããã¯ã¹ã¯ãè€æ°ã®åãçµã¿åãããã€ã³ããã¯ã¹ã ã
äŸãã°ãECãµã€ãã®ordersããŒãã«ã§ããŠãŒã¶ãŒIDããæ³šææ¥æããã¹ããŒã¿ã¹ãã®é ã§è€åã€ã³ããã¯ã¹ãäœæããå Žåãã€ã³ããã¯ã¹ãæå¹ã«æ©èœããã®ã¯ãWHEREå¥ã®æ¡ä»¶ãã€ã³ããã¯ã¹ã®é çªã«æ²¿ã£ãŠã巊端ããé£ç¶ããŠæå®ãããŠããå Žåã«éãããã
ãã®ååãã巊端ãã¬ãã£ãã¯ã¹ïŒleftmost prefixïŒã«ãŒã«ããšããã
ãããåïŒ WHEREå¥ã«
ãããuser_id = 123 AND order_date = '2023-10-26'
ãšæžãã°ãã€ã³ããã¯ã¹ã¯user_idãšorder_dateãŸã§å¹ãã£ãŠããšã§ããïŒ
å
çïŒ ãã®éããã§ã¯ãå°ãè€éãªãã¿ãŒã³ã§èããŠã¿ããã
è€éãªWHEREå¥ã®äŸïŒ
user_idãorder_dateãstatusã®è€åã€ã³ããã¯ã¹ãããç¶æ ã§ã以äžã®ãããªã¯ãšãªãçºè¡ããå Žåãã€ã³ããã¯ã¹ã¯ã©ããŸã§äœ¿ããããšæãïŒ
SELECT * FROM orders
WHERE user_id = 123
ãAND order_date BETWEEN '2023-10-01' AND '2023-10-31'
AND status = 'shipped';
å
çïŒ çµè«ããèšããšããã®å Žåã
ã€ã³ããã¯ã¹ã¯user_idãšorder_dateãŸã§ããæå¹ã«æ©èœããªããã ã
ãã®çç±ã¯ã
order_dateã«ç¯å²æå®ïŒBETWEENïŒãããããã
ããŒã¿ããŒã¹ã¯user_idãšorder_dateãŸã§ã¯ã€ã³ããã¯ã¹ã䜿ã£ãŠå¹ççã«çµã蟌ãããšãã§ããã
ããããç¯å²æå®ã®åŸãã«ç¶ãstatusã®æ¡ä»¶ã¯ãuser_idãšorder_dateã§çµã蟌ãŸããçµæã«å¯ŸããŠå床ãã£ã«ã¿ãªã³ã°ããå¿
èŠããããããã€ã³ããã¯ã¹ããã«æŽ»çšã§ããªããã ã
ãããåïŒ ç¯å²æå®ã§ããã€ã³ããã¯ã¹ã®é£ç¶æ§ãéåããŠããŸããã§ããïŒ
ããã¯ã€ã³ããã¯ã¹èšèšã§æ°ãã€ããªããš...ã
å çïŒ ãŸãã«ãã®éããè€éãªWHEREå¥ãæžãéã¯ãã©ã®ã€ã³ããã¯ã¹ãã©ã䜿ãããããæèããããšããæ§èœæ¹åã®éµã«ããããªãã
ãŸãšããšæ¬¡åã®äºå
å çïŒ ä»æ¥ã®ãŸãšãã ã
ã€ã³ããã¯ã¹: ããŒã¿ããŒã¹ã®æ€çŽ¢é床ãé«éåããããã®çŽ¢åŒã
ã€ã³ããã¯ã¹èšèšã®ãã¬ãŒããªã: ã€ã³ããã¯ã¹ã¯æ€çŽ¢ãéãããããæžã蟌ã¿ãé ããã容éãæ¶è²»ããããã®ãã©ã³ã¹ãèããããšãéèŠã ã
ãªããã£ãã€ã¶: ã¯ãšãªã®å®è¡èšç»ã決å®ããè³¢ãä»çµã¿ã
çŸåšã¯ã³ã¹ãããŒã¹ãäž»æµãæ§èœæ¹åã®åºæ¬: éé²ã«ã€ã³ããã¯ã¹ãäœãã®ã§ã¯ãªããSELECT *ãé¿ããããJOINãããŸã䜿ã£ããããããšã倧åã
è€åã€ã³ããã¯ã¹ã®ã«ãŒã«: 巊端ããé£ç¶ããåã«ããé©çšãããªãã
ORå¥ãç¯å²æå®ãªã©ãå«ãŸãããšãã€ã³ããã¯ã¹ã®é©çšãéåããå¯èœæ§ãããã
ããŒã¿ããŒã¹ã®æ§èœæ¹åã¯å¥¥ãæ·±ãåéã ãã仿¥ã®è©±ã¯ãšãŠãéèŠã ã
ããŒã¿ããŒã¹ã®ããã©ãŒãã³ã¹ãã¢ããªã±ãŒã·ã§ã³å
šäœã®ãŠãŒã¶ãŒäœéšã«çŽçµããããšãå°ãªããªããããã
å çïŒ æ¬¡åã¯ãããŒã¿ããŒã¹ã«ãããäžãäžã«åãããããã¯ã¢ãããšé害察çãã«ã€ããŠåŠãã§ãããã
次åïŒç¬¬8å: DBã¯ãã€å£ããïŒã©ãå®ãïŒïœããã¯ã¢ãããšé害察çïœ
#ããŒã¿ããŒã¹ #SQL #ã€ã³ããã¯ã¹ #æ§èœæ¹å #ã¯ãšãªæé©å #ãã«ã¹ãã£ã³