SQL

リレーショナルデータベースを操作するための言語。データの問い合わせと更新を担う

データベースデータ操作
SQL」の技術書を見る →

SQL とは

SQL (Structured Query Language) は、リレーショナルデータベースを操作するための言語だ。表 (テーブル) の形で整理されたデータに対し、「条件に合うデータを取り出す」「新しいデータを追加する」「既存のデータを更新・削除する」といった操作を、宣言的に記述する。多くのデータベース製品が共通して採用しており、データを扱う仕事の基礎技術になっている。

基本的な操作

命令役割
SELECTデータを取り出す (問い合わせ)
INSERTデータを追加する
UPDATEデータを更新する
DELETEデータを削除する

中でも SELECT は使用頻度が高く、条件指定・並べ替え・集計・複数テーブルの結合など、奥が深い。

この 4 つはデータそのものを読み書きする命令だが、SQL の範囲はそれだけではない。表や列の定義を作り変える CREATE / ALTER / DROP、権限を与え外す GRANT / REVOKE も同じ SQL の一部である。日常的に書くのは前者だが、スキーマ変更や権限設計も SQL で表現されると理解しておくと、データベースの操作全体が 1 つの言語で通ることが見えてくる。

標準と方言 (2026 年 8 月時点)

SQL は ISO/IEC 9075「Database Language SQL」として標準化されている。改訂されるたびに SQL-92、SQL:1999、SQL:2003、SQL:2008、SQL:2011、SQL:2016 と呼ばれてきて、最新の改訂は 2023 年の SQL:2023 である。各版は前の版を置き換える形をとるため、古い版への準拠を主張しても公式には意味を持たない。

「多くの製品が共通して採用している」と言えるのは、SQL:1999 以降の標準が中核機能 (Core) と任意機能を分けており、準拠する実装は中核機能を必ず備えるからだ。逆に方言が生まれるのはその外側で、任意機能をどこまで実装するかが製品ごとに違い、必須の機能でも構文や関数の細部が異なることがある。

分かりやすい例が取得行数の絞り込みである。標準の書き方は SQL:2008 で導入された OFFSET ... FETCH FIRST n ROWS ONLY で、よく見かける LIMIT n は標準構文ではない (PostgreSQL は両方を受け付ける)。別の製品へ移すときに書き換えになるのはこうした周辺構文が中心で、SELECT や WHERE、JOIN といった中核の書き方はおおむねそのまま通る。この境界を知っているかどうかが、移植の見積もりの精度を左右する。

宣言的であること

SQL の特徴は「どう処理するか」ではなく「何が欲しいか」を書く宣言的な言語である点だ。例えば「売上が 1 万円以上の注文を金額順に並べて」と要求を書けば、実際の探索手順はデータベースが最適化して実行する。プログラマは手順ではなく目的に集中できる。

この性質には裏側がある。手順を書いていないので、遅いときに SQL 文をいくら読み返しても原因は書かれていない。実際に何をしたかはデータベースが選んだ実行計画の側にあり、同じ SQL 文でもデータの量や偏りが変わると選ばれる計画が変わる。つまり「昨日まで速かったクエリが今日は遅い」という現象が、文を一切変えなくても起こり得る。だから性能を調べるときは文を睨むのではなく、EXPLAIN などの手段で実行計画を出して、どの表をどう絞り込んだかを見るのが定石になる。

実務での注意点

SQL は強力なぶん、書き方次第で性能が大きく変わる。大量データに対して非効率なクエリを書くと、処理に長時間かかったりシステムを止めたりする。インデックス (索引) の活用や、結合・集計の書き方が性能を左右する。また、外部入力をそのまま SQL に埋め込むと「SQL インジェクション」という深刻な脆弱性を生むため、入力値を安全に扱う書き方 (プレースホルダの利用) が必須になる。UPDATE や DELETE は条件指定を誤ると大量データを一括で壊すため、実行前の確認も欠かせない。

学習には関連書籍が役立つ。

この記事は役に立ちましたか?

関連用語

関連する記事