プログラミング言語

SQL

IBM(Donald Chamberlin・Raymond Boyce) / 1974年登場

リレーショナル DB を操作する宣言型のクエリ言語。「どう取るか」ではなく「何が欲しいか」を書く。DB を扱うなら言語を問わず必須の共通スキル。

3つの要点
TL;DR
  1. RDB を操作する宣言型クエリ言語。
  2. 「何が欲しいか」を書けば DB が最適化して取得。
  3. DB を触るなら言語問わず必須の共通スキル。

基本情報

仕様と特徴

製品・技術の概要SQLリレーショナル DB を操作する宣言型のクエリ言語。「どう取るか」ではなく「何が欲しいか」を書く。DB を扱うなら言語を問わず必須の共通スキル。
型付け
宣言型クエリ言語)
実行方式
DB エンジンが解釈最適化
パラダイム
宣言型集合志向)
登場
1974年IBM(Donald Chamberlin・Raymond Boyce)
この言語の強み
宣言的で簡潔にデータを操作できるほぼ全 RDB 共通の必須スキル
活躍する領域
データの検索集計分析業務システムの DB 操作 / BI・レポーティング

選定ガイド

選定ポイント

採用する理由と、事前に受け入れるべきトレードオフを分けて確認します。

採用に向く条件

選ぶ理由

  1. 宣言的で簡潔にデータを操作できる
  2. ほぼ全 RDB 共通の必須スキル
  3. 集計・結合・分析に強い

事前に確認する条件

考慮すべき点

  1. 方言が多い(製品ごとの差)
  2. 手続き的な処理は不得手
  3. 複雑なクエリは可読性が落ちる

向いている用途

こんな用途に向く

データの検索・集計・分析業務システムの DB 操作BI・レポーティング

詳しい解説

もっと詳しく

どんな言語か

SQL は、リレーショナルデータベース(表の形でデータを保つ DB)を操作するための問い合わせ言語です。1974 年に IBM の研究から生まれました。Python や Java のような汎用プログラミング言語ではなく、「データに問い合わせる」ことに特化した専用言語である点が出発点になります。

横にスクロール

SQL が構文解析、名前解決、書き換え、コスト最適化を経て実行計画となり、実行器がバッファ、索引、表、WAL を使う経路と、EXPLAIN、統計、MVCC、ロックの確認点
SQL は欲しい結果を宣言し、DB が統計と索引から実行計画を選びます。性能は EXPLAIN と実測を対応させ、更新の整合性はトランザクション、MVCC、ロック、WAL の役割を分けて確認します。

「何が欲しいか」を書く宣言型

SQL の核心は宣言型であることです。「どういう手順で取り出すか」ではなく、「どんな結果が欲しいか」を書きます。実際の取得手順(どの索引を使い、どう結合するか)は DB のオプティマイザが統計情報をもとに最適化して決めます。

-- 注文に顧客名を結合し、東京の分だけ取得
SELECT c.name, o.amount
FROM orders AS o
JOIN customers AS c ON o.customer_id = c.id
WHERE c.city = 'Tokyo';

仕組み・特徴

  • 集合指向: 行を 1 件ずつではなく、条件に合う集合として一括処理する。JOIN・GROUP BY・集計関数・ウィンドウ関数がその代表。
  • 索引(インデックス): 検索を速くする仕組みで、性能は索引設計と実行計画(EXPLAIN で確認)に大きく左右される。
  • トランザクションと ACID: 複数の更新をまとめて「全部成功か全部なかったことに」でき、整合性を保つ。
  • 役割で分かれる文: 問い合わせ(SELECT)、更新(INSERT/UPDATE/DELETE)、定義(CREATE 等の DDL)、権限(GRANT 等)。

得意・不得意

  • 得意: 複数表をまたぐ結合や、合計・件数などの集計、大量データからの絞り込みが簡潔に書ける。
  • 不得意: 「変数に入れて順に処理する」ような手続き的ロジック。書けなくはないが本来の土俵ではない。

RDB / NoSQL の位置づけ

観点SQL(リレーショナル)NoSQL
データモデル表・スキーマ・関係文書/KV/列/グラフ など
問い合わせSQL(宣言的・JOIN 強い)製品ごとに多様
整合性ACID トランザクション結果整合が多い(製品次第)
得意集計・結合・整合性スケール・柔軟なスキーマ

つまずきやすいところ

方言とインジェクション

SQL には標準規格がありますが、製品ごとに方言(文法や関数の差)が多く、PostgreSQL で動いた書き方が MySQL や SQL Server でそのまま通るとは限りません。またアプリから使う際は、文字列連結でクエリを組み立てると SQL インジェクションの危険があるため、必ずプレースホルダ(バインド変数)を使います。

総じて SQL は、宣言的にデータへ問い合わせる集合指向の専用言語で、Web からデータ分析までデータを扱うあらゆる場面の土台となる必須の道具です。

言語選定

SQLを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

データの検索・集計・分析

比較で見る軸

型付け: —(宣言型クエリ言語) / 実行方式: DB エンジンが解釈・最適化 / パラダイム: 宣言型(集合志向)

導入後に効く点

ほぼ全 RDB 共通の必須スキル

先に潰すリスク

方言が多い(製品ごとの差)

数字・仕様の読み方
型付け
—(宣言型クエリ言語)
実行方式
DB エンジンが解釈・最適化
パラダイム
宣言型(集合志向)
登場
1974年
IBM(Donald Chamberlin・Raymond Boyce)

判断チェックリスト

  • 自社の用途が「データの検索・集計・分析 / 業務システムの DB 操作」に近いか確認する。
  • 強みである「宣言的で簡潔にデータを操作できる」が本当に評価軸になるか確認する。
  • 注意点の「方言が多い(製品ごとの差)」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

データの検索・集計・分析業務システムの DB 操作BI・レポーティング

最初の一歩

Hello, World!

SELECT 'Hello, World!';
公式ドキュメント