LoginSignup
4
3

More than 5 years have passed since last update.

SQL SELECT基礎(1) データと表

Last updated at Posted at 2017-05-15

この記事は「SQL SELECT基礎」の第1回目です。
SQL SELECT基礎 目次
→次の記事はSQL SELECT基礎(2) スカラ値いろいろ

データと表

検索や蓄積が容易にできるよう整理された情報の集まり。
データベース - Wikipedia

超巨大なデータを、どのような概念で扱うべきか。色々なモデルが考案されてきましたが、主流の1つとしてリレーショナルデータベース(RDB)というものがあります。

SQLはこのタイプのデータベースで使われる、データを作成したり抽出するための言語です。

昨今はSQLを学べば、様々な製品を使いこなせるようになりました。実装がRDBとは言えなくても、SQLが使える製品が非常にたくさんあります。

小さなデータであれば、手元にコピーして全件見ていってもよいでしょう。Excelにまとめられた住所録なんかが良い例です。

しかしデータが数GBになったら? データが常に追加されている状況だったら? Excelで収まる限界のデータ量もありますし、そのうちコピーするだけで時間がかかるようになります。効率的ではありません。

SQLは「どういうデータが欲しいのか」をデータベースに直接指示することができます。データベース自身がその場にあるデータを検索し、絞り込んだ結果だけを返すため、高速に探索できるのです。

"テーブル"という概念

tableとは「表」という意味ですね。見た目通り、こういう表のことです。

id name gender birthday
1 佐藤陽子 女性 1990-01-01
2 鈴木花子 女性 1995-12-02
3 田中次郎 男性 2000-10-25
... ... ... ...

SQLの世界では、どんな複雑なデータであろうと、必ずテーブルの形にして保存されます。
↑のようなユーザー情報もそうですし、アクセスログのような情報もテーブルの形式に作れますよね。

time status path remote_ip
2017-01-01 01:00:01 200 /login 192.0.2.1
2017-01-01 01:00:02 200 /item/123 192.0.2.2
2017-01-01 01:00:03 403 /mypage/123 192.0.2.3
... ... ... ...

テーブルについてもう少し

  • 行と列があります。
    • 1列1列をカラム、フィールドなどと呼ぶこともあります。
    • 1行1行をロウ、レコードなどと呼ぶこともあります。
      • 結構あやふやです。
  • それぞれの枠には、スカラ(scalar)と呼ばれる単純な数字や文字列が入っています
    • 詳しくは次回書きます。
  • 表は入れ子にできません。
    • 表の1カラムに入っているのは、必ずスカラです。別の表をそのまま保存することはできません。
    • 複雑なデータは、テーブルを分割することで表現します。

「テーブルを分割すると複雑なデータも表現できる」ですが、例えば以下のようなイメージです。

SNSのデータを考えてみます。Twitterでもマストドンでもよいです。
SNSにはユーザーが登録し、何か投稿を複数回行います。

ユーザーがそれぞれ複数の投稿をしているのだから、、こんな風にイメージする人がいるかもしれません。

ユーザー名 投稿一覧
taro
タイトル 内容
4/1の日記 ...
4/2の日記 ...
... ...
hanako
タイトル 内容
4/1の日記 ...
4/2の日記 ...
... ...
jiro
タイトル 内容
4/1の日記 ...
4/2の日記 ...
... ...

しかしRDBではこのような構造は許されません。枠の中に入れられるのは単純な文字列や数字だけです。そこで、テーブルを分割し、ユーザー情報と投稿を別々に保存します。

ユーザー名はたぶん変更されることがあるので、変更されないidを適当に発番しておき、投稿にもそのユーザーのidを保存しておきます。

ユーザーid ユーザー名
1 taro
2 hanako
3 jiro
投稿id ユーザーid タイトル 本文
1 1 4/1の日記 ...
2 1 4/2の日記 ...
3 2 5/5の日記 ...
4 3 1/9の日記 ...
... ... ... ...

投稿だけが固まって保存されていますが、それぞれを投稿したユーザーがわかります。なので、実質同じデータを表現できています。

このように似たような情報をまとめた概念として保存することで、分析しやすくなるなどのメリットもあります。

  • 「4/1にSNS全体でいくつ投稿があったのか?」を数えられる
  • 「ユーザーごとにいくつ投稿しているのか?」を数えられる
  • 「投稿数の多いユーザーは誰?」を調べられる

などなど。DBがこのような構造になっていれば、SELECT文で一瞬で調べることができます。

RDBで検索しやすい・保存できるようなテーブル構造を考えることを正規化と言います。この講座はSELECT文を対象としているので説明しませんが、テーブルの中が単純なデータに限られているのはこんな理由によるものです。


この記事は「SQL SELECT基礎」の第1回目です。
SQL SELECT基礎 目次
→次の記事はSQL SELECT基礎(2) スカラ値いろいろ

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3