ã2026幎çãSQLã®å§ãæ¹ â ããŒã¿ããŒã¹æäœã®åºæ¬ãå®å šã¬ã€ã
SQLã£ãŠããèããã©ãäœããããã®ãªã®ïŒ
SQLã¯ãããŒã¿ããŒã¹ã«å¯ŸããŠè³ªåããããåœä»€ãããããããã®èšèªãã ããããšãã°ããã®ååã®äžèЧãèŠããŠããšããæ°ãããŠãŒã¶ãŒãç»é²ããŠãã¿ãããªããšããæ±ºãŸã£ãæžãæ¹ã§ããŒã¿ããŒã¹ã«äŒãããã ãè±èªã«è¿ãææ³ã§æžãããããããã°ã©ãã³ã°èšèªã®äžã§ãããªãèªã¿ãããéšé¡ã ãã
ãžããŒãããŒã¿ããŒã¹ãšäŒè©±ããèšèªãªãã ãïŒã§ãç·Žç¿ããã«ã¯äœãç°å¢ãããã®ïŒ
ããã€ãæ¹æ³ãããããäžçªãæè»œãªã®ã¯ãã©ãŠã¶ã§äœ¿ãããªã³ã©ã€ã³ã®SQLç·Žç¿ãµã€ãã ããDB Fiddleãsqlitetutorialã®Try SQLãªãããããããããå°ãæ¬æ Œçã«ãããããªããSQLiteãããœã³ã³ã«ã€ã³ã¹ããŒã«ããã®ãããããããã¡ã€ã«1ã€ã§åãããã»ããã¢ããããããç°¡åãªãã ãããã«å®åã«è¿ãç°å¢ãã»ãããã°ãDockerã§MySQLãPostgreSQLãåããæ¹æ³ããããã
ãŸãã¯ãªã³ã©ã€ã³ã§è©ŠããŠã¿ããããªïŒæåã«èŠããããšã¯äœãªã®ïŒ
ãŸãã¯SELECTæã ããããããããŒã¿ãåãåºããåºæ¬ã®åœä»€ã ãããSELECT åå FROM ããŒãã«åããšããåœ¢ã§æžããã ãããšãã°ãSELECT name FROM usersããšæžãã°ãusersããŒãã«ããnameåã®ããŒã¿ãå šéšåãåºããããSELECT ã«ç¶ããŠæ¬²ããåãæžããŠãFROM ã®åŸãã«ããŒãã«åãæžãããšèŠããã°OKã ãã
ãªãã»ã©ãè±èªã®æã¿ããã«èªãããã ãïŒå šéšã®ããŒã¿ãåºãŠãã¡ãã£ãã倧å€ãããªãã®ïŒ
ããã§ç»å Žããã®ãWHEREãORDER BYãLIMITã ããWHEREã¯ãæ¡ä»¶ã§çµã蟌ããæ©èœã§ãããšãã°ãWHERE age ã 20以äžããšæžãã°20æ³ä»¥äžã ãåãåºãããORDER BYã¯ãäžŠã³æ¿ããã§ãååé ãæ¥ä»é ã«ãœãŒãã§ãããLIMITã¯ãä»¶æ°ãå¶éãããæ©èœã§ãäžäœ10ä»¶ã ã衚瀺ãšãã£ãããšãã§ãããã ããã®3ã€ãçµã¿åãããã ãã§ãããªãå®çšçãªæ€çŽ¢ãã§ããããã«ãªããã
ããŒã¿ãåãåºãã ããããªããŠã远å ããã倿Žããããã§ããã®ïŒ
ãã¡ããïŒINSERTæã§æ°ããããŒã¿ã远å ãUPDATEæã§æ¢åããŒã¿ã倿ŽãDELETEæã§ããŒã¿ãåé€ã§ããããããšãã°INSERTãªããINSERT INTO users ã«ååãšã¡ãŒã«ã¢ãã¬ã¹ã®å€ãæå®ããšããåœ¢ã§æžãããã ãUPDATEãšDELETEã¯WHEREæ¡ä»¶ãä»ãå¿ãããšå šä»¶ã«åœ±é¿ãã¡ãããããå¿ ããã©ã®ããŒã¿ã«å¯ŸããŠããæå®ããçãã€ããŠããããã¯å®åã§ãããã©ã³ãããããå®çªãã¹ãªãã ã
ããã£ïŒæ°ãã€ããããã§ãããããããŒãã«èªäœã¯ã©ããã£ãŠäœãã®ïŒ
CREATE TABLEæã䜿ããããCREATE TABLE ããŒãã«åãã®åŸã«ãååãšããŒã¿åãå®çŸ©ããŠãããã ãããŒã¿åã«ã¯æŽæ°ã衚ãINTEGERãæååã衚ãVARCHARãæ¥ä»ã衚ãDATEãªã©ãããããäž»ããŒãšããŠPRIMARY KEYãæå®ãããšãåè¡ãäžæã«èå¥ã§ããããã«ãªããããŒãã«èšèšã¯ããŒã¿ããŒã¹ã®åå°ã ãããæåã®ãã¡ã¯ã·ã³ãã«ãªæ§æã§ç·Žç¿ããã®ãããããã ãã
ããŒãã«ãè€æ°ãããšãã«ãããããã®ããŒã¿ãçµã¿åããããå Žåã¯ã©ãããã®ïŒ
ãããJOINãšããæ©èœã ããããšãã°ã泚æããŒãã«ããšããŠãŒã¶ãŒããŒãã«ãããããšããJOINã䜿ãã°ã誰ãã©ã®ååãæ³šæããããã1ã€ã®çµæãšããŠåãåºãããã ãå ±éã®åïŒããšãã°ãŠãŒã¶ãŒIDïŒã䜿ã£ãŠããŒãã«å士ãã€ãªããã€ã¡ãŒãžã ããæåã¯INNER JOINã ãèŠããã°ååãäž¡æ¹ã®ããŒãã«ã«äžèŽããããŒã¿ã ããçµåããŠããããã
ããŒãã«ãã€ãªããããã®ã¯äŸ¿å©ã ãïŒéèšãšããã§ããã®ïŒ
GROUP BYãšéèšé¢æ°ã䜿ãã°ããããªã ããCOUNTã§ä»¶æ°ãSUMã§åèšãAVGã§å¹³åãèšç®ã§ãããGROUP BYãšçµã¿åããããšãã«ããŽãªããšã®ååæ°ãããæããšã®å£²äžåèšããªãããäžçºã§åºãããã ãããšãã°ãSELECT category ãšCOUNTãproductsããŒãã«ããGROUP BY categoryã§ååŸããšæžãã°ãã«ããŽãªå¥ã®ååæ°ãåºãããããã§ãããšããŒã¿åæã®å ¥ãå£ã«ç«ãŠããã
ããããããããŒã¿åæã£ãœãããšãã§ãããã ãïŒåŠç¿ã®é çªãšããŠã¯ã©ãé²ããã°ããã®ïŒ
ããããã®ããŒããããã¯ããã ãããŸãã¹ããã1ã§SELECTãšWHEREã§æ€çŽ¢ã®åºæ¬ãèŠãããã¹ããã2ã§ORDER BYãšLIMITã§çµæã®æŽåœ¢ãåŠã¶ãã¹ããã3ã§INSERTãUPDATEãDELETEã§ããŒã¿æäœã身ã«ã€ãããã¹ããã4ã§JOINã§è€æ°ããŒãã«ã®çµåã«ææŠãã¹ããã5ã§GROUP BYãšéèšé¢æ°ã§ããŒã¿åæã®å ¥éãåã¹ãããã§å®éã«ããŒã¿ãè§Šããªããé²ããã®ã倧äºã ãã座åŠã ãã ãšçµ¶å¯Ÿã«èº«ã«ã€ããªããããã
å®åã§äœ¿ããšãã«ç¥ã£ãŠãããã»ããããããšã£ãŠããã®ïŒ
ã€ã³ããã¯ã¹ã®éèŠæ§ã¯æ©ãã«ç¥ã£ãŠãããšããããã€ã³ããã¯ã¹ã¯ããŒã¿ããŒã¹ã®ã玢åŒãã§ãæ€çŽ¢ãåçã«éãããŠããããã ã100äžä»¶ã®ããŒã¿ããWHEREã§çµã蟌ããšããã€ã³ããã¯ã¹ããªããšå šä»¶ã¹ãã£ã³ã«ãªããã©ãããã°äžç¬ã§èŠã€ããããã ãä»ãããããšããŒã¿ã®è¿œå ã»æŽæ°ãé ããªããããããæ€çŽ¢ããåã«çµã£ãŠèšå®ããã®ãã³ãã ããããšã¯ãšãªã®å®è¡èšç»ãEXPLAINã§ç¢ºèªããç¿æ £ãã€ãããšãããã©ãŒãã³ã¹åé¡ãèŠæããããã«ãªããã
ORMã¯ããã°ã©ãã³ã°èšèªã®ã³ãŒãã§ããŒã¿ããŒã¹æäœãã§ããããŒã«ã§ãPythonã®SQLAlchemyãJavaScriptã®Prismaãæåã ãã確ãã«äŸ¿å©ã ãã©ãè£åŽã§ã¯çµå±SQLãå®è¡ãããŠãããããSQLã®åºç€ãç¥ããªããšORMãçæããéå¹çãªã¯ãšãªã«æ°ã¥ããªããã ãå®åã§ã¯ãæ®æ®µã¯ORMã§æ¥œãããŠãããã©ãŒãã³ã¹ãåé¡ã«ãªã£ããçSQLã§ãã¥ãŒãã³ã°ããšããã®ãçŸå®çãªã¢ãããŒãã ããSQLã®ã¹ãã«ã¯ãšã³ãžãã¢ãšããŠã®åžå ŽäŸ¡å€ã«ãçŽçµããããããã£ãã身ã«ã€ããŠãããŠæã¯ãªããã