~/VibeHandbook
$39

言語

iso.org

SQL

概要

SQL(Structured Query Language)は、PostgreSQL、MySQL、SQLite、SQL Server といったリレーショナルデータベースを照会・操作するための標準言語です。宣言的であり、どんな結果が欲しいかを記述すると、データベースエンジンがそれを効率的に取得する方法を考えてくれます。

強み

  • 宣言的: 行をどうループするかではなく、何が欲しいかを述べる。
  • 数十年にわたって実証され、成熟したエンジンと強い一貫性保証を備える。
  • 集合ベースの操作(join、集約、ウィンドウ関数)が簡潔かつ高速。
  • 移植性がある — 中核的な SQL はほとんどのリレーショナルデータベースで動く。

トレードオフ

  • 方言が異なる(Postgres と MySQL と SQLite)ため、移植性は完全ではない。
  • 遅いクエリを書きやすく、性能はインデックスとクエリプランに依存する。
  • 汎用言語ではなく、制御フローやロジックは扱いにくい。
  • スキーマ変更(マイグレーション)は本番環境では慎重さが必要。

使いどころ

データがリレーショナルで構造によって照会される場合はいつでも SQL を選びましょう。レポーティング、分析、アプリケーションのバックエンド、データの整合性と join が重要なあらゆるシステムに向いています。構造化データに対する集約やアドホックな問いには最適なツールであり、ほぼすべてのバックエンド言語と組み合わせられます。

バイブコーディングとの相性

AI アシスタントは SQL が得意で、平易な英語の質問を驚くほどうまくクエリに翻訳できますが、スキーマを推測してしまうことがあります。実際のテーブル定義(CREATE TABLE 文)を貼り付け、使用する具体的なデータベース(Postgres、SQLite など)を伝えて、正しい方言と関数を使うよう AI を誘導しましょう。クエリの説明を求め、遅いクエリにはインデックスを提案させ、ユーザー入力は値の文字列連結ではなく常にパラメータ化させましょう。これが SQL インジェクションを防ぎます。生成されたクエリは、本番環境に対して実行する前に小さなサンプルで検証してください。

SELECT u.name, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE u.active = true
GROUP BY u.name
HAVING COUNT(o.id) > 5
ORDER BY order_count DESC;