Edited at

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

More than 1 year has passed since last update.

この記事は「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) スカラ値いろいろ