← 語彙帳トップに戻る
🗄️

SQL

データベース専用言語。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の組み合わせが広がっている。

💬 よくある会議での質問と答え方
Q.このクエリ、なぜ遅いですか?
A.EXPLAINコマンドで実行計画を確認します。多くの場合、適切なINDEXがない(フルスキャン)か、JOINで大量のデータを結合している場合です
Q.NoSQLじゃなくSQLを使う理由は?
A.データ間の関係が複雑でJOINが必要なら、RDBが有利です。NoSQLはスキーマが柔軟でスケールしやすい反面、複雑なクエリが書きにくい。用途に応じて使い分けます
🌐 エコシステム

パッケージマネージャ:—(SQLは言語仕様・各DBMSが実装)

主要フレームワーク

  • PostgreSQL — OSS RDBMS・拡張性高・pgvector等・Web系で普及
  • MySQL — 普及RDBMS・LAMPスタックの標準・Web系
  • SQLite — 軽量組込RDBMS・モバイル/組み込み/プロトタイプ

主要ライブラリ

  • pgvector — PostgreSQL拡張・ベクトル検索(AI/RAG)
  • pg_stat_statements — クエリ統計・パフォチューーン必須
  • dbt — データ変換フレームワーク・SQLのモジュール化

ランタイム

  • PostgreSQL — OSS・本番向け
  • MySQL — OSS・Web系
  • SQLite — 組込・軽量
💻 コード例

基本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週間)

  • CRUD基本文法 — SELECT/INSERT/UPDATE/DELETE・リテラル・演算子
  • フィルタ・ソート・集計 — WHERE / ORDER BY / GROUP BY / 集計関数
  • テーブル設計の基礎 — 正規化・主キー・外部キー・インデックスの存在

中級(目安: 〜1-2ヶ月)

  • JOIN と集合演算 — INNER/LEFT/RIGHT/FULL JOIN・UNION/INTERSECT/EXCEPT
  • インデックスと実行計画 — EXPLAIN・B-Tree・複合インデックス・カーディナリティ
  • トランザクション基本 — BEGIN/COMMIT/ROLLBACK・ACID・ロック

上級(目安: 〜3-6ヶ月)

  • ウィンドウ関数・CTE(WITH) — ROW_NUMBER/LAG/LEAD・再帰CTE・分析クエリ
  • トランザクション分離レベル — READ COMMITTED/REPEATABLE READ/SERIALIZABLE・ファントム/ダーティリード
  • パフォチューーン・分散 — パーティショニング・マテリアライズドビュー・Read Replica・pgvector(AI/RAG)