データベース専用言語。JOINやインデックスが重要
データを取り出す・集計する・更新するための専用言語
1970年代から使われ続ける最も普及したデータ操作言語。リレーショナルDBデータを表(テーブル)形式で管理し、テーブル間の関係を定義できるデータベース。PostgreSQL・MySQL・SQLiteなどが代表と組み合わせて使う。 AIがSQLを自動生成するツールが増えているが、生成されたSQLの妥当性を判断するには基礎理解が必要。
SELECT(取得):テーブルからデータを取り出す基本操作。条件(WHERE)・並び替え(ORDER BY)・件数制限(LIMIT)を組み合わせる。
JOIN(結合):複数テーブルを関連付けて一つの結果セットにする。**INNER JOIN**・**LEFT JOIN**の違いを理解することが重要。
INDEX(インデックス):検索を高速化する仕組み。本の索引と同じ原理。大量データのクエリが遅い場合は適切なINDEXが解決策になる。
トランザクション:複数の操作を「全部成功か全部失敗」にまとめる仕組み。銀行の送金(引き落としと入金が必ずセット)が典型例。
| 観点 | 特徴 | 使い道 |
|---|---|---|
| PostgreSQL | 高機能・本番向け | 本番Webサービス・AIアプリのデータストア |
| MySQL | Web定番・シンプル | WordPress・伝統的なWebアプリ |
| SQLite | ファイル1つで完結 | 開発環境・モバイルアプリ・軽量ツール |
| BigQuery | 列指向・大規模分析向け | 数TB超のデータ分析・BIダッシュボード |
選ぶ理由:
自然言語→SQL変換ツールが増えており、生成されたSQLの妥当性を判断するには基礎理解が必須。AIが書いたSQLのレビュー(JOIN方向・インデックス不足)にも知識が必要。pgvectorのようにPostgreSQLでベクトル検索も可能になり、SQL+AIの組み合わせが広がっている。
パッケージマネージャ:—(SQLは言語仕様・各DBMSが実装)
主要フレームワーク:
主要ライブラリ:
ランタイム:
基本SELECT + WHERE
SELECT name, created_at FROM users WHERE active = true ORDER BY created_at DESC;
JOIN(結合)
SELECT u.name, o.total
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.total > 1000;
集計(GROUP BY + HAVING)
SELECT user_id, COUNT(*) AS cnt, SUM(total) AS sum
FROM orders GROUP BY user_id HAVING COUNT(*) > 5;
ウィンドウ関数(ランキング)
SELECT name, total,
ROW_NUMBER() OVER (ORDER BY total DESC) AS rank
FROM orders;
初級(目安: 〜2週間)
中級(目安: 〜1-2ヶ月)
上級(目安: 〜3-6ヶ月)