一言で!
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」)。
会社が違っても、同じ言葉で頼めるようになった。
いま進んでいる開発
- 2023年、SQLの規格の最新版、ISO/IEC 9075:2023(SQL:2023)が出た(PostgreSQL「SQL Conformance」)。
- 2026年10月、PostgreSQL 19の最初のリリース候補が公開された(PostgreSQL(2026年10月15日))。
この先
自然な言葉の問いかけを、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:2023 | ISO/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/) |