Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ビジネスサイド向け SQL 講座資料(株式会社トラーナ)

Avatar for memory memory
November 24, 2021

ビジネスサイド向け SQL 講座資料(株式会社トラーナ)

社内勉強会として SQL 講座をビジネスサイド向けに行った際の資料です。

Avatar for memory

memory

November 24, 2021
Tweet

More Decks by memory

Other Decks in Business

Transcript

  1. @2020 Torana, Inc. ؆୯ͳσʔλΛࢀর  .Z42-͔ΒσʔλΛࢀর͢Δͱ͖ʹ࢖ΘΕΔͷ͸ʮ4&-&$5จʯ<> ͱݺ͹Ε͍ͯ·͢ɻ  ͦͯ͠ɺ4&-&$5จʹ͸৭ʑͳ۟ DMBVTF

    ͕͋Γ·͢ɻ  '30.۟ɺ+0*/۟ɺ8)&3&۟ɺ)"7*/(۟ɺ(3061#:۟ɺ 03%&3#:۟ɺ-*.*5۟  ͜ΕΒͷ۟͸සग़͢ΔͷͰɺ֮͑·͠ΐ͏ɻ [1]: https://dev.mysql.com/doc/refman/8.0/ja/select.html
  2. @2020 Torana, Inc. SELECT * FROM ςʔϒϧA INNER JOIN ςʔϒϧB

    ON ςʔϒϧA.id = ςʔϒϧB.xxx_id INNER JOIN ςʔϒϧC ON ςʔϒϧB.id = ςʔϒϧC.xxx_id WHERE ςʔϒϧA.ΧϥϜ໊ = "จࣈྻ" AND ςʔϒϧA.ΧϥϜ໊ IN (1, 2, 3, ...) HAVING COUNT(ςʔϒϧA) > 0 ORDER BY id DESC, created_at ASC LIMIT 100 OFFSET 100 ͜ͷܗࣜΛ֮͑·͠ΐ͏ʂ
  3. @2020 Torana, Inc. SELECT * FROM ςʔϒϧA INNER JOIN ςʔϒϧB

    ON ςʔϒϧA.id = ςʔϒϧB.xxx_id INNER JOIN ςʔϒϧC ON ςʔϒϧB.id = ςʔϒϧC.xxx_id WHERE ςʔϒϧA.ΧϥϜ໊ = "จࣈྻ" AND ςʔϒϧA.ΧϥϜ໊ IN (1, 2, 3, ...) HAVING COUNT(ςʔϒϧA) > 0 ORDER BY id DESC, created_at ASC LIMIT 100 OFFSET 100 SELECT ͷ͋ͱͷ * ͸දࣔ͢ΔΧϥϜΛ 
 ఆٛ͢ΔͨΊͷ΋ͷͰ͢ɻ ΧϥϜ໊ΛߜΔ͜ͱʹΑΓɺऔಘ͢Δ σʔλྔ͕ݮΔͨΊɺ৔߹ʹΑͬͯ͸ܰ͘ͳΓ·͢ ·ͨɺFROM ۟͸࣮͸ඞਢͰ͸ͳ͘ɺ SELECT (1 + 1) AS `calculated` ͷΑ͏ʹ͢Δͱ 
 ԋࢉ݁ՌΛฦ͠·͢ɻ
  4. @2020 Torana, Inc. SELECT * FROM ςʔϒϧA INNER JOIN ςʔϒϧB

    ON ςʔϒϧA.id = ςʔϒϧB.xxx_id INNER JOIN ςʔϒϧC ON ςʔϒϧB.id = ςʔϒϧC.xxx_id WHERE ςʔϒϧA.ΧϥϜ໊ = "จࣈྻ" AND ςʔϒϧA.ΧϥϜ໊ IN (1, 2, 3, ...) HAVING COUNT(ςʔϒϧA) > 0 ORDER BY id DESC, created_at ASC LIMIT 100 OFFSET 100 σʔλΛऔಘ͍ͨ͠ςʔϒϧΛબ୒͠·͢ɻ 
 ฐࣾͷ৔߹ family_customers ΍ shipments ౳Ͱ͢ɻ
  5. @2020 Torana, Inc. SELECT * FROM ςʔϒϧA INNER JOIN ςʔϒϧB

    ON ςʔϒϧA.id = ςʔϒϧB.xxx_id INNER JOIN ςʔϒϧC ON ςʔϒϧB.id = ςʔϒϧC.xxx_id WHERE ςʔϒϧA.ΧϥϜ໊ = "จࣈྻ" AND ςʔϒϧA.ΧϥϜ໊ IN (1, 2, 3, ...) HAVING COUNT(ςʔϒϧA) > 0 ORDER BY id DESC, created_at ASC LIMIT 100 OFFSET 100 ଞͷςʔϒϧͷσʔλΛࢀর͢Δࡍʹ࢖༻͠·͢ɻ INNER JOIN Ҏ֎ʹ΋ LEFT JOIN ͳͲ͕͋Γ·͢ɻ INNER JOIN ͱ LEFT JOIN ͷҧ͍͸ 
 NULL Λڐ༰͢Δ͔Ͳ͏͔Ͱ͢ ࣍ͷηΫγϣϯͰ΋͏গ͠ৄ͘͠ղઆ͠·͢
  6. @2020 Torana, Inc. SELECT * FROM ςʔϒϧA INNER JOIN ςʔϒϧB

    ON ςʔϒϧA.id = ςʔϒϧB.xxx_id INNER JOIN ςʔϒϧC ON ςʔϒϧB.id = ςʔϒϧC.xxx_id WHERE ςʔϒϧA.ΧϥϜ໊ = "จࣈྻ" AND ςʔϒϧA.ΧϥϜ໊ IN (1, 2, 3, ...) HAVING COUNT(ςʔϒϧA) > 0 ORDER BY id DESC, created_at ASC LIMIT 100 OFFSET 100 σʔλΛநग़͢Δࡍͷ৚݅Λࢦఆ͢Δͱ͜ΖʹͳΓ·͢ɻ ৚݅จʹ͸৭ʑͳࢦఆํ๏͕͋Γ·͕͢ɺ֓ͶҎԼΛ֮͑Δͱྑ͍͔ͳ ͱࢥ͍·͢ɻ ·ͨɺ৚݅෼Λͭͳ͛Δͱ͖͸ AND ·ͨ͸ OR Ͱܨ͛·͢ɻ 
 ৚݅จ͸ݪଇࠨ͔Βࢦఆํ๏ͷॲཧͷ༏ઌ౓ʹΑͬͯ 
 ॲཧ͞Ε·͕͢ɺ਺ֶͱಉ༷ʹʮ(ʯͱʮ)ʯ 
 Ͱғ͏ࣄʹΑΓɺͦͷΧοί಺͕༏ઌ౓͕ߴ͘ͳΓ·͢ɻ ྫ͑͹ (A OR B) AND C ͱͨ࣌͠ɺ A OR B ΛධՁͨ݁͠Ռʹରͯ͠ AND C ΛධՁ͢Δ͜ͱ͕Ͱ͖·͢ɻ ࢦఆํ๏ ҙຯ = ಉҰ != ಉҰͰ͸ͳ͍ IS NULL NULL Ͱ͋Δ NOT IS NULL NULL Ͱ͸ͳ͍ IN (...) ͍ͣΕ͔ΛؚΉ NOT IN (...) ͍ͣΕ͔Λؚ·ͳ͍
  7. @2020 Torana, Inc. SELECT * FROM ςʔϒϧA INNER JOIN ςʔϒϧB

    ON ςʔϒϧA.id = ςʔϒϧB.xxx_id INNER JOIN ςʔϒϧC ON ςʔϒϧB.id = ςʔϒϧC.xxx_id WHERE ςʔϒϧA.ΧϥϜ໊ = "จࣈྻ" AND ςʔϒϧA.ΧϥϜ໊ IN (1, 2, 3, ...) HAVING COUNT(ςʔϒϧA) > 0 ORDER BY id DESC, created_at ASC LIMIT 100 OFFSET 100 WHERE ۟ͱྨࣅ͍ͯ͠·͕͢ɺ 
 HAVING ۟͸άϧʔϐϯάͨ݁͠Ռʹର࣮ͯ͠ߦ͢Δ఺͕ WHERE ۟ͱ͸ҟͳΓ·͢ɻ
  8. @2020 Torana, Inc. SELECT * FROM ςʔϒϧA INNER JOIN ςʔϒϧB

    ON ςʔϒϧA.id = ςʔϒϧB.xxx_id INNER JOIN ςʔϒϧC ON ςʔϒϧB.id = ςʔϒϧC.xxx_id WHERE ςʔϒϧA.ΧϥϜ໊ = "จࣈྻ" AND ςʔϒϧA.ΧϥϜ໊ IN (1, 2, 3, ...) HAVING COUNT(ςʔϒϧA) > 0 ORDER BY id DESC, created_at ASC LIMIT 100 OFFSET 100 ORDER BY ۟͸औಘͨ͠ϨίʔυͷιʔτΛߦ͏۟Ͱ͢ɻ 
 ෳ਺ࢦఆ͢Δ͜ͱ͕Ͱ͖·͢ɻ
  9. @2020 Torana, Inc. SELECT * FROM ςʔϒϧA INNER JOIN ςʔϒϧB

    ON ςʔϒϧA.id = ςʔϒϧB.xxx_id INNER JOIN ςʔϒϧC ON ςʔϒϧB.id = ςʔϒϧC.xxx_id WHERE ςʔϒϧA.ΧϥϜ໊ = "จࣈྻ" AND ςʔϒϧA.ΧϥϜ໊ IN (1, 2, 3, ...) HAVING COUNT(ςʔϒϧA) > 0 ORDER BY id DESC, created_at ASC LIMIT 100 OFFSET 100 LIMIT ۟͸ɺऔಘ͢ΔϨίʔυͷ਺Λ੍ݶ͢Δͱ͜ΖͰ͢ɻ 
 ੍ݶ͠ͳ͚Ε͹͍͍͡Όͳ͍͔ɺͱࢥ͏͔΋஌Εͳ͍Ͱ͕͢ɺجຊ తʹฐࣾ͸σʔλྔ͕ଟ͘ɺσʔλྔ͕ଟ͍ͱऔಘʹ࣌ؒɺαʔ όʔ΁ෛՙ͕͔͔ΔͷͰɺͳΔ΂͘ࢦఆ͢ΔΑ͏ʹ͍ͯͩ͘͠͞ɻ OFFSET ͸ɺͲͷϨίʔυ͔Βࢀর͢Δ͔Λࢦఆ͢Δ͜ͱ͕Ͱ͖· ͢ɻ
  10. @2020 Torana, Inc. ଞͷςʔϒϧΛ૊Έ߹Θͤͨࢀর SELECT * FROM ςʔϒϧ A INNER

    JOIN ςʔϒϧ B ON ςʔϒϧ A.id = ςʔϒϧ B.{ςʔϒϧ A ͷ୯਺ܗ}_id
  11. @2020 Torana, Inc. ଞͷςʔϒϧΛ૊Έ߹Θͤͨࢀর SELECT * FROM ςʔϒϧ A INNER

    JOIN ςʔϒϧ B ON ςʔϒϧ A.id = ςʔϒϧ B.{ςʔϒϧ A ͷ୯਺ܗ}_id ฐࣾͷ৔߹ɺςʔϒϧ໊͸ݪଇෳ਺ܗͰ͢ɻ
  12. @2020 Torana, Inc. ଞͷςʔϒϧΛ૊Έ߹Θͤͨࢀর SELECT * FROM ςʔϒϧ A INNER

    JOIN ςʔϒϧ B ON ςʔϒϧ A.id = ςʔϒϧ B.{ςʔϒϧ A ͷ୯਺ܗ}_id جຊతʹ͸͜ͷܗͰ֮͑Ε͹ OK! ෳ਺ͷςʔϒϧΛܨ͍͛ͨ৔߹͸͜ΕΛ૿΍ͤ͹ OK
  13. @2020 Torana, Inc. ଞͷςʔϒϧΛ૊Έ߹Θͤͨࢀর  ྫ͑͹ൃૹ৘ใ͔Βސ٬؅ཧΛࢀর͢Δ৔߹ SELECT * FROM ൃૹ৘ใ

    INNER JOIN ސ٬ͷܖ໿৘ใ ON ސ٬ͷܖ໿৘ใ.id = ൃૹ৘ใ.ސ٬ͷܖ໿৘ใ_id INNER JOIN ސ٬৘ใ ON ސ٬৘ใ.id = ސ٬ͷܖ໿৘ใ.ސ٬৘ใ_id
  14. @2020 Torana, Inc. ଞͷςʔϒϧΛ૊Έ߹Θͤͨࢀর id ސ٬ͷܖ໿৘ใ_id ൃૹ೔ 1 1 2021-11-20

    2 2 2021-11-21 ൃૹ৘ใ ൃૹࡁΈ͓΋ͪΌ id ൃૹ৘ใ_id ͓΋ͪΌ৘ใ_id ࡞੒೔࣌ 1 1 1 2021-11-20 2 1 2 2021-11-20 3 1 3 2021-11-20 4 1 4 2021-11-20 5 1 5 2021-11-20 6 1 6 2021-11-20 7 2 1 2021-11-21 8 2 2 2021-11-21 9 2 3 2021-11-21 10 2 4 2021-11-21 11 2 5 2021-11-21 12 2 6 2021-11-21 ͜ͷ 2 ͭͷςʔϒϧΛ ݁߹ͯ͠ΈΔͱ
  15. @2020 Torana, Inc. ଞͷςʔϒϧΛ૊Έ߹Θͤͨࢀর ൃૹࡁΈ͓΋ͪΌ id ސ٬ͷܖ໿৘ใ_id ൃૹ೔ id ൃૹ৘ใ_id

    ͓΋ͪΌ৘ใ_id ࡞੒೔࣌ 1 1 2021-11-20 1 1 1 2021-11-20 1 1 2021-11-20 2 1 2 2021-11-20 1 1 2021-11-20 3 1 3 2021-11-20 1 1 2021-11-20 4 1 4 2021-11-20 1 1 2021-11-20 5 1 5 2021-11-20 1 1 2021-11-20 6 1 6 2021-11-20 2 2 2021-11-21 7 2 1 2021-11-21 2 2 2021-11-21 8 2 2 2021-11-21 2 2 2021-11-21 9 2 3 2021-11-21 2 2 2021-11-21 10 2 4 2021-11-21 2 2 2021-11-21 11 2 5 2021-11-21 2 2 2021-11-21 12 2 6 2021-11-21 ൃૹ৘ใ
  16. @2020 Torana, Inc. ଞͷςʔϒϧΛ૊Έ߹Θͤͨࢀর ൃૹࡁΈ͓΋ͪΌ id ސ٬ͷܖ໿৘ใ_id ൃૹ೔ id ൃૹ৘ใ_id

    ͓΋ͪΌ৘ใ_id ࡞੒೔࣌ 1 1 2021-11-20 1 1 1 2021-11-20 1 1 2021-11-20 2 1 2 2021-11-20 1 1 2021-11-20 3 1 3 2021-11-20 1 1 2021-11-20 4 1 4 2021-11-20 1 1 2021-11-20 5 1 5 2021-11-20 1 1 2021-11-20 6 1 6 2021-11-20 2 2 2021-11-21 7 2 1 2021-11-21 2 2 2021-11-21 8 2 2 2021-11-21 2 2 2021-11-21 9 2 3 2021-11-21 2 2 2021-11-21 10 2 4 2021-11-21 2 2 2021-11-21 11 2 5 2021-11-21 2 2 2021-11-21 12 2 6 2021-11-21 ൃૹ৘ใ ൃૹ৘ใ͕ൃૹࡁΈ͓΋ͪΌͷ 
 Ϩίʔυ਺෼͚ͩ૿͑ΔΑ͏ʹͳΓ·͢ɻ 
 ͜Ε͸࢓༷Ͱ͢ɻ
  17. @2020 Torana, Inc. ଞͷςʔϒϧΛ૊Έ߹Θͤͨࢀর ൃૹࡁΈ͓΋ͪΌ id ސ٬ͷܖ໿৘ใ_id ൃૹ೔ id ൃૹ৘ใ_id

    ͓΋ͪΌ৘ใ_id ࡞੒೔࣌ 1 1 2021-11-20 1 1 1 2021-11-20 1 1 2021-11-20 2 1 2 2021-11-20 1 1 2021-11-20 3 1 3 2021-11-20 1 1 2021-11-20 4 1 4 2021-11-20 1 1 2021-11-20 5 1 5 2021-11-20 1 1 2021-11-20 6 1 6 2021-11-20 2 2 2021-11-21 7 2 1 2021-11-21 2 2 2021-11-21 8 2 2 2021-11-21 2 2 2021-11-21 9 2 3 2021-11-21 2 2 2021-11-21 10 2 4 2021-11-21 2 2 2021-11-21 11 2 5 2021-11-21 2 2 2021-11-21 12 2 6 2021-11-21 ൃૹ৘ใ ྆ํͷςʔϒϧʹ id ͕ଘࡏ͢ΔͨΊ WHERE ۟ͳͲͰ `id = 1234` ͳͲͱͯ͠΋ɺͲͷςʔϒϧͷ id ͳͷ͔൑ผ͕͔ͭͳ͍Α͏ʹͳΓ·͢ɻ 
 ͦͷͨΊ `ൃૹ৘ใ.id = 1234` ͷΑ͏ʹɺςʔϒϧ໊Λ໌ࣔͯ͋͛͠Δඞཁ͕͋Γ·͢ɻ ͜Ε͸શͯͷ۟Ͱಉ༷Ͱ͢ɻ
  18. @2020 Torana, Inc. ଞͷςʔϒϧΛ૊Έ߹Θͤͨࢀর  ͓΋ͪΌͷ఺਺͸ҎԼͷΑ͏ʹ਺͑ΒΕ·͢ɻ SELECT ൃૹ৘ใ.*, COUNT(ൃૹࡁΈ͓΋ͪΌ.id) AS

    "͓΋ͪΌͷ఺਺" FROM ൃૹ৘ใ INNER JOIN ൃૹࡁΈ͓΋ͪΌ ON ൃૹࡁΈ͓΋ͪΌ.ൃૹ_id = ൃૹ৘ใ.id GROUP BY ൃૹࡁΈ͓΋ͪΌ.ൃૹ৘ใ_id LIMIT 100
  19. @2020 Torana, Inc. ؔ਺ͱ৚݅จ SELECT COUNT(*) FROM ςʔϒϧ A GROUP

    BY ςʔϒϧA.xxx_id SELECT COUNT(*) FROM ςʔϒϧ A
  20. @2020 Torana, Inc. ؔ਺ͱ৚݅จ SELECT COUNT(*) FROM ςʔϒϧ A GROUP

    BY ςʔϒϧA.xxx_id SELECT COUNT(*) FROM ςʔϒϧ A άϧʔϐϯά͞ΕͨϨίʔυͷ COUNT άϧʔϐϯά͞Ε͍ͯͳ͍Ϩίʔυͷ COUNT
  21. @2020 Torana, Inc. ؔ਺ͱ৚݅จ SELECT (CASE ΧϥϜ໊ WHEN ஋1 THEN

    ݁Ռ1 WHEN ஋2 THEN ݁Ռ2 ELSE ͦͷଞ END) AS `ΧϥϜ໊` FROM ςʔϒϧ A
  22. @2020 Torana, Inc. ؔ਺ͱ৚݅จ SELECT (CASE ΧϥϜ໊ WHEN ஋1 THEN

    ݁Ռ1 WHEN ஋2 THEN ݁Ռ2 ELSE ͦͷଞ END) AS `ΧϥϜ໊` FROM ςʔϒϧ A ͜ͷఆܗΛ֮͑Ε͹ OK
  23. @2020 Torana, Inc. αϒΫΤϦ SELECT * FROM ςʔϒϧ A WHERE

    ͓΋ͪΌ৘ใ_id IN ( SELECT id FROM toys WHERE id >= 1234 )
  24. @2020 Torana, Inc. αϒΫΤϦ SELECT * FROM ςʔϒϧ A WHERE

    ͓΋ͪΌ৘ใ_id IN ( SELECT id FROM toys WHERE id >= 1234 ) ҎԼͷΑ͏ʹ࢖༻Ͱ͖·͢
  25. @2020 Torana, Inc. αϒΫΤϦ SELECT * FROM ςʔϒϧ A WHERE

    ͓΋ͪΌ৘ใ_id IN ( SELECT id FROM toys WHERE id >= 1234 AND status = ςʔϒϧA.xxx_status )
  26. @2020 Torana, Inc. αϒΫΤϦ SELECT * FROM ςʔϒϧ A WHERE

    ͓΋ͪΌ৘ใ_id IN ( SELECT id FROM toys WHERE id >= 1234 AND status = ςʔϒϧA.xxx_status ) ςʔϒϧ A ͷΧϥϜ΋ 
 ࢖༻ՄೳͰ͢