はじめに
こんにちは、にゃるしざです。
以前、SQLのJOINの方法についてこのような記事をまとめました。
最後に触れた「なぜ未だにカンマ区切りでテーブル結合する人がいるのか(暗黙の結合)」という疑問。
これを腹落ちするには、SQLが歩んできた50年の歴史を知る必要があります。
ただ年表を眺めるのは眠くなるので、今回は「もしもSQLの歴史を見守る掲示板があったら」という体(てい)でお送りします。
※イメージが付きづらい部分は、GeminiやChatGPTも用いて調べています。誤った記載や、曖昧な表現があればコメントいただけると助かります🙇
【歴史スレ】SQLの進化を見守るスレ
【1970年代:黎明期】
1: E. F. コッド 1970年
世界を変える論文書いたけど質問ある?
2: 名無しさん 1970年
誰?
3: E. F. コッド 1970年
IBMで研究員やってる。 今のデータベース使いづらすぎるから、リレーショナルモデルって理論作ったった。まあ、未来の「データベースの父」とでも呼んでくれ
4: 名無しさん 1970年
研究員?ちょっと調べたけど、実用化はむずそうじゃない?
5: チェンバリン&ボイス 1974年
>>1 の理論を操作する言語作りましたー。英語っぽく書けるから、COBOLよりわかりやすいはず^^名前は「SEQUEL(シークェル)」とかどう?これで特許取ろうと思ってますw
6: IBM社員 1979年
>>5 悪い、その名前申請しようとしたんだけど航空機メーカーに商標取られてたわ 1
7: チェンバリン&ボイス 1974年
(´・ω・`)
8: IBM社員 1979年
代わりに「SQL」で登録しといたw母音抜いただけだけどまあいけるやろ
9: 名無しさん 1979年
飛行機に取られてるのワロタ
10: 名無しさん 1979年
これ読み方はそのままシークェル?
11: 名無しさん 1979年
いやエスキューエルだろJK
12: ラリー・エリソン 1979年
IBMがモタモタしてる間に、世界初の商用RDB「Oracle 2」リリースしましたw BMが論文公開してるの見て、売れそうだなーって思ったんで、CIAのツテで
13: 名無しさん 1979年
すげー、でもOracle 2?1って出てたっけ?
14: ラリー・エリソン 1979年
1で出したらバグ出るかもって買ってくれない人いるかもしれないのでw 2っていえば信頼感出るかなと思いましてね2
【1980年代~90年代:標準化、「結合」の登場】
15: 名無しさん 1986年
【朗報】SQL-86としてANSIで標準化開始
メーカーごとにバラバラだった書き方が統一される模様
16: 名無しさん 1986年
ありがてー
17: 名無しさん 1986年
Oracle2出た後もいろんな製品があったけど、メーカーによって書き方違うのガチでやりづらかったからな
Oracle方言、DB2方言、全部覚えろとか無理ゲー
18: 名無しさん 1986年
標準化って言っても最低限だけだろ?どうせ各社また独自拡張するんだろうけど
19: 名無しさん 1986年
でも共通語ができただけマシ。移植の目安になるだけでも全然違う
20: 名無しさん 1992年
【朗報】SQL-92登場 JOIN句誕生
「何を結合するか(ON)」と「何で絞り込むか(WHERE)」を明確に分離
21: 名無しさん 1992年
おおお!
22: 名無しさん 1992年
JOINで「テーブル同士の関係」、WHEREで「条件」を分けるんだって
23: @古参エンジニア 1992年
カンマで結合する書き方に慣れてたのになーorz3
まあ、慣れたらJOINの方が事故らないのは分かるけどさ・・・
24: 名無しさん 1992年
外部結合もLEFT / RIGHTで意味がはっきりしたしな
記号っぽい書き方より圧倒的に可読性いい
25: 名無しさん 1999年
【朗報】SQL:1999登場
・再帰クエリ(WITH RECURSIVE)
・トリガー
・オブジェクト指向っぽい拡張
この辺が一気に入った
26: 名無しさん 1999年
再帰クエリって何が嬉しいん?
27: 名無しさん 1999年
身近な例だと、組織図みたいに社員テーブルに「社員ID」「上司ID」がある場合、昔はループ回すとか、一段ずつSQLを投げたりしてた。
でもWITH RECURSIVE 使えば「この人の部下を全部」って感じでいっぺんに取得できるらしい
28: 名無しさん 1999年
トリガーも地味にいいな、INSERTしたら自動でログ残すとか
在庫更新したら履歴テーブルに書くとか。できること増えて頼もしい
【2000年代:分析の進化とNoSQLの脅威】
29: 名無しさん 2003年
SQL:2003 でウィンドウ関数来たな
OVER句とかいうやつ
30: 名無しさん 2003年
ウィンドウ関数 キタ━(゚∀゚)━!
今まで累計とか順位つけるのに苦労してたけど関数で済むのは神アプデ
31: 名無しさん 2003年
ふーん。正直あんま使い所わからんな
普通のCRUDなら要らなくね?
32: 名無しさん 2003年
業務アプリだけ見てるとそうかもな
経理とか分析チームに投げるSQLだと結構使う
33: 名無しさん 2008年
でも最近JSONとか流行ってきてない?
スキーマガチガチに決めなくていいのは正直うらやましい
34: 名無しさん 2008年
RDBだとカラム増やすたびに会議だからめんどいしなー
35: @SQLアンチ 2010年
まだここのヤツらはSQLに頼ってんの?
時代はWeb 2.0、ビッグデータ、NoSQLだろ
SQL is Deadww3
36: 名無しさん 2010年
まあ気持ちは分かる
JSONの柔軟さは魅力的だしスキーマレスは正義に見えるな
37: 名無しさん 2010年
でも結局整合性とか考えたらSQL欲しくなってくんのよ
【2010年代~現在:SQLの逆襲】
38: 名無しさん 2016年
【朗報】SQL:2016 標準SQLでJSONを公式サポート!!
これなら 「JSON保存して、SQLで集計」が出来るじゃん
39: 名無しさん 2019年
SQL:2019で、さらに多次元データの扱いが強化されたな。
もはやDBは単なる箱じゃなくて、計算機になってる
40: 名無しさん 2023年
さらにSQL:2023がきたぞ!
今回の目玉は「SQL/PGQ (Property Graph Queries)」
ついにSQLで「グラフデータベース」的なクエリが書けるようになった。
「友達の友達の友達」みたいな探索が標準機能になる。
41: 名無しさん 2023年
SQL進化止まらなすぎ
42: 名無しさん 2023年
>>35 見てる〜〜??w
43: 名無しさん 2025年
でもここまできたらもうアプデすることないでしょw
44: 名無しさん 2025年
AIとかと絡めてアップデートしてほしいけどね。ベクター検索をSQLでも使えるようになったらアツい
45: 名無しさん 2025年
お〜AI入ってくるのはありそう
46: 名無しさん
初めはデータを管理する箱ってだけでも便利だったのに感慨深いわ
51: 名無しさん
SQL is Dead
(ただし何度でも蘇る)
52: 名無しさん 2025年
当分SQLは使われ続けるだろうね。苦手だけどやっぱ勉強しよ・・・。
おわりに
いかがでしたでしょうか。
少し駆け足になった部分もありましたが、SQLの歴史を大まかに見ることができました。
今の形のSQLになるまで、いくつもアップデートを重ねていたんですね。
さて、きっかけの 「なぜ未だにカンマ区切りでテーブル結合する人がいるのか(暗黙の結合)」 という疑問に立ち戻ってみます。
>>23 の脚注でも触れましたが、標準化される前の書き方がこの結合方法で、現在のJOIN句の書き方が定着したのはもっと後のことだったのですね。
私が担当している現場のシステムは結構前から開発されている製品ですので、当時の書き方のクセがソースに残っていたのだと思います。
ここまで長々とお付き合いいただきありがとうございました。
これからも引き続きSQLの勉強がんばります!
参考資料:
-
SQLは当初「SEQUEL(Structured English Query Language)」と呼ばれていたが、
「SEQUEL」という名称が英国の航空・防衛関連企業 Hawker Siddeley Dynamics Engineering Ltd. の商標であったため、
IBM内部で正式名称を「SQL(Structured Query Language)」に変更したとされている。出典:https://en.wikipedia.org/wiki/SQL ↩ -
Oracle Database の最初の商用リリースは「Oracle Version 2」であり、Version 1 は一般向けには提供されていない。 ラリー・エリソンは後年のインタビューにおいて、
「完成度や信頼性への懸念を避けるため、Version 2 とした」と語っている。(出典:https://en.wikipedia.org/wiki/Oracle_Database) ↩