一言で!

SQLとは

DBMSへ渡す指示書。

他には?

〇〇テーブルから、これと、これと、こういう条件で、こう並べて。

DBMS「はいはい、了解」

〇〇テーブルと〇〇テーブルをベースに、これとこれとこれをとって、この条件を加えたものを相関ネストして、さらに。。。

DBMS「うっせっ」

SQLとは?

正式名称はStructured Query Language。

読み方は「エスキューエル」が一般的だ。

ディレクターの指示書

DBMSの記事から来た人などは、またこの例えかといわれてしまうが、、

テレビ局で、過去の映像をまとめた番組を作るとする。

ディレクターは、編集担当に指示書を渡す。「この選手の、この大会の場面だけ」。

指示書には決まった書式がある。

DBMS(編集担当)へ渡す指示書の決まった書式。それがSQLだ。

ディレクター (人・アプリ)
     |  指示書 (SQL)
     v
編集担当 (DBMS)
     |  探す・しまう・直す・消す
     v
保管庫 (データ)

SQLは、DBMSへの頼みごとを書くための言葉。

指示書を読んでみる

リレーショナルデータベースの記事で使った、映像の一覧を例にする。

映像番号

内容

選手番号

5001

決勝

101

5002

準決勝

102

5003

予選

101

「選手番号101の映像の内容がほしい」という指示書は、こう書く。

SELECT 内容
FROM 映像の一覧
WHERE 選手番号 = 101
ORDER BY 映像番号;
  • SELECT:何を取り出すか(内容)
  • FROM:どの表から(映像の一覧)
  • WHERE:どんな条件で(選手番号が101)
  • ORDER BY:どう並べるか(映像番号の順)

返ってくるのは「決勝」と「予選」の2つだ。

英語の文に近い形で、何を、どこから、どんな条件で、どう並べて、を並べる。

ポイントは、「何がほしいか」書くだけ。

基本の頼みごとは4つ

DBMSの仕事に合わせて、SQLにも基本の言葉が4つある。

SQLの言葉

頼みごと

テレビ局でいうと

SELECT

取り出す

映像を探して渡す

INSERT

しまう

新しい映像を保管庫へ入れる

UPDATE

直す

映像の情報を書き換える

DELETE

消す

映像を保管庫から外す

しまう、直す、消すも、同じように決まった書式で書く(PostgreSQL「Data Manipulation」)。

番号をたどって、表をつなぐ

映像の一覧には、選手の名前がない。あるのは選手番号だけだ。

名前は、別の表の選手の一覧にある。

SELECT 映像の一覧.内容, 選手の一覧.名前
FROM 映像の一覧
JOIN 選手の一覧
  ON 映像の一覧.選手番号 = 選手の一覧.選手番号;

JOINは、2つの表を番号でつないで1つの答えにする言葉だ(PostgreSQL「Joins Between Tables」)。

「決勝 佐藤」「準決勝 鈴木」「予選 佐藤」のように、名前つきで返ってくる。

テーブルはこうしてつなぐことができる!

どのDBMSにも、ほぼ同じ言葉で頼める

SQLは国際規格で、正式な名前はISO/IEC 9075という(PostgreSQL「SQL Conformance」)。

規格があるので、PostgreSQLでもほかのDBMSでも、基本の書き方は共通している。

ただし、細かいところにはDBMSごとの違いもある。

もう1つ、指示書には守りが要る。入力欄から悪意のある命令を紛れ込ませる手口があり、SQLインジェクションと呼ばれる(OWASP「SQL Injection」)。

対策はDBMSの記事で触れた。

まとめ・私見

ついに来た、SQL。

書式は窮屈だが、「何がほしいか」だけ書けば、探し方は向こうが考えてくれる。

サブクエリ、CTE、ユニオン。

なかなか奥が深い。

サラサラかけたらかっこいいよ👍

私は無理。。。

豆知識

  • SELECT: データを取り出すときに使う、SQLの言葉。
  • JOIN: 2つの表を番号でつないで取り出す、SQLの言葉。
  • ISO/IEC 9075: SQLの国際規格の正式な名前。
  • SQLインジェクション: 入力欄から悪意のある命令を紛れ込ませる攻撃。
  • System R: 1970年代にIBMが作った、表で持つデータベースの試作。

歴史

はじまり:置き場所を知らずに頼みたい

1970年、IBMのエドガー・コッドが、データを表で持つ考えを論文にした(Codd「A Relational Model of Data for Large Shared Data Banks」)。

コッドは、使う人がデータの置き場所を気にせず、自然な言葉に近い形で扱えるべきだと考えた(IBM「The relational database」)。

壁と転換点:考えを、使える言葉に

考えだけでは疑う人が多く、IBMは1973年からSystem Rで実用になるかを試す(IBM「The relational database」)。

このとき、ドナルド・チェンバリンとレイモンド・ボイスが作ったのがSQLだ(IBM「The relational database」)。

1977年にはOracleの前身の会社が、最初の商用のリレーショナルデータベースを出す。1983年にはIBMのDB2が出荷される(IBM「The relational database」)。

SQLはやがて国際規格になり、改訂を重ねていく(PostgreSQL「SQL Conformance」)。

会社が違っても、同じ言葉で頼めるようになった。

いま進んでいる開発

この先

自然な言葉の問いかけを、AIでSQLに翻訳する作り方も紹介されている(Microsoft Learn「Develop intelligent applications with AI frameworks」)。

コッドが目指した「自然な言葉に近い形」に、50年たって近づいている。

人がSQLを書かなくてよくなるのかは、まだ分からない。

年表

年代・年主な出来事主な人物・組織主な国・地域特徴
1970年データを表で持つ考えの論文エドガー・コッドアメリカ(IBM)SQLの土台になった考え。[Codd(1970)](https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf)
1973年System Rの開発が始まるIBMアメリカ表の考えを実用で試し、SQLもここで生まれた。[IBM](https://www.ibm.com/history/relational-database)
1977年最初の商用のリレーショナルデータベースRelational Software(のちのOracle)アメリカ表で持つデータベースが売り物になった。[IBM](https://www.ibm.com/history/relational-database)
1983年DB2が出荷されるIBMアメリカSQLで頼む製品が広がる。[IBM](https://www.ibm.com/history/relational-database)
2023年SQL:2023ISO/IEC国際SQLの規格の最新版。[PostgreSQL](https://www.postgresql.org/docs/current/features.html)
2026年10月PostgreSQL 19の最初のリリース候補PostgreSQL Global Development Group国際正式版の手前の版が公開された。[PostgreSQL](https://www.postgresql.org/about/news/postgresql-19-rc-1-released-3409/)