YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Japanese subtitles

← PS 08-21 Joins

Get Embed Code
4 Languages

Showing Revision 2 created 03/12/2014 by Fran Ontanaya.

  1. では忘れがちなトピックに移りましょう
  2. 結合についてです
  3. これはSQL上で複数のテーブルを使うためのクエリです
  4. 例えばこの講義でよく使っている
    Linkテーブルを思い出してください
  5. イメージはこんな感じです
  6. ID、投票数、ユーザID、投稿数、
    データ、タイトル、URLの列があります
  7. 一例を記入してみましょう
  8. これから使うのはユーザIDの列です
  9. もしUserという別のテーブルがあれば
  10. このようなイメージです
  11. ID、名前、パスワード、日付などの
    列があります
  12. LinkテーブルのユーザIDは
    UserテーブルのID列を参照しています
  13. システムには一貫性が必要なので
    この2つは常に一致するはずです
  14. ですのでリンクテーブルにある有効なIDは
  15. ユーザテーブルでも同じく有効です
  16. ここでSQLデータベースでよく見かける結合を使用します
  17. 結合とは2つのテーブルを関連づける命令文です
  18. 基本的なSQLの命令文は次のとおりです
  19. SELECT * FROM link WHERE user_id = 22です
  20. これでこのユーザが投稿したリンクをすべて返します
  21. 結果は複数になるでしょう
  22. もしユーザIDが不明な場合や
  23. 特定のユーザが投稿したリンクの中から
    情報を取得したい場合はどうしたらいいでしょうか?
  24. 解決方法はいくつかあります
  25. まず最初にSpezというユーザ名に
    ひもづくIDを確認しましょう
  26. IDを取得してからSQLを実行します
  27. 次のように2つのクエリが必要になります
  28. 最初のクエリでUserテーブルからIDを取得します
  29. 対象のユーザ名はSpezですね
  30. そして次のクエリで取得したIDを使用します
  31. これには別のやり方もあります
  32. 2つのクエリを合体させて1つにするのです
  33. FROM linkの部分をFROM Link, userに変更して
    2つのテーブルをスキャンします
  34. すべての属性は必要ありません
    クエリから取得した結果を保存します
  35. そのためにSELECT FROMを
    SELECT link.
    に変更します
  36. これでリンクテーブルから対象の列だけを返します
  37. 次に2つのデータベースをリンクさせるため
    WHERE句を変更します
  38. where user_id=user.id としましょう
  39. said link.user_id としてもよいでしょう
  40. これですべてのプロパティにテーブル名が含まれます
  41. より分かりやすくなりました
  42. 最後にAND句を追加しましょう
  43. AND user.name = 'Spez' となります
  44. つまりこの命令文ではまずSELECT句が実行され
  45. 次にFROM句でリンクテーブルとユーザテーブルを参照します
  46. その次にWHERE句とAND句が実行されるのです
  47. これがクエリの結合です
  48. テーブルをスキャンする順はSQLエンジンが決めます
  49. この場合はユーザテーブルが先でしょう
  50. 対象のユーザ名を見つけてからリンクテーブルに移り
  51. user_id内でユーザテーブルの対象IDと
    一致するものを探します
  52. とても便利ですよね
  53. 冒頭で"忘れがちなトピック"と言ったのは
  54. Webソフトウェアを作成する際に
    結合をあまり使用しないからです
  55. SQLの講義ではほぼ必ず結合について学びます
  56. ですがこの講義で結合の説明を後回しにしたのは
  57. ソフトウェアの開発中に起こる問題の解決には
    結合があまり役に立たないからです
  58. ですが結合について知っておくことは必要です
  59. このような作業が必要になるかもしれません
  60. 結合を使わない理由と詳しい説明については
    講義の後半でお話しします
  61. 次のトピックに移りましょう