ITの教科書検索
入門読了 約8分

SQLの基本 ― SELECT文の書き方

SQLは、リレーショナルデータベースのデータを読み書きする言語です。SELECT文で列と行を指定して取り出す書き方と、処理の順番が分かります。図で結果を確かめられます。

目次
  1. SQLとは
  2. SELECT文の基本構文
  3. SELECT文のパターンを選んで結果を確かめる
  4. INSERT・UPDATE・DELETE文
  5. 練習問題

SQLとは、リレーショナルデータベースを操作するための言語

SQLとは、リレーショナルデータベース(RDB)を操作するための言語です。データを取り出すときも、書き換えるときも、DBMSへの指示はSQLで書きます。画面に並ぶ商品の一覧も、月ごとの売上の集計も、多くはSQLの問合せで取り出しています。

SQLは国際規格ISO/IEC 9075(国内ではJIS X 3005)で定められています。多くのRDBMS(RDBを管理するDBMS)で、この規格をもとにしたSQLを使えます。ただし、細かな書き方や使える機能はDBMSごとに違います。

データベース言語は、DDLとDMLなどに大きく分かれます。DDL(データ定義言語)は、テーブルなどの構造を作ったり変えたりする文です。DML(データ操作言語)は、テーブルの中のデータを読み書きする文です。

データベース言語の分類と、代表的な文
種類役割代表的な文
DDL(データ定義言語)テーブルなどの構造を作る・変えるCREATE TABLE、ALTER TABLE、DROP TABLE
DML(データ操作言語)テーブルの中のデータを読み書きするSELECT、INSERT、UPDATE、DELETE

DMLの中でも、データを取り出すSELECT文は特によく使います。DDLでテーブルを作る文は、CREATE TABLEと制約の記事で説明しています。INSERT文・UPDATE文・DELETE文の概要は、後の節で説明します。SELECT文が返す複数の行をプログラムから1行ずつ読む方法は、カーソルの記事にあります。

SELECT文は、SELECT・FROM・WHERE・ORDER BYの4つで組み立てる

SELECT文は、どの列をどのテーブルから取り出すかを指定する文です。条件や並び順も合わせて指定できます。基本の形は、SELECT句・FROM句・WHERE句・ORDER BY句の4つを組み合わせたものです。

SELECT 列名
FROM テーブル名
WHERE 条件
ORDER BY 並べ替える列名;

SELECT句には、取り出したい列名をカンマで並べます。すべての列を取り出すときは、「*」という記号を使います。FROM句には、データを取り出すテーブルの名前を書きます。

WHERE句は、条件に合う行だけを残します。書かなければ、テーブルの全ての行が対象になります。USBで始まる名前のように文字列の一部で選ぶ書き方は、LIKEの記事で説明しています。値の候補や大小の範囲で選ぶ書き方はINとBETWEENの記事に、条件の列にNULLがある行の扱いはSQLのNULLの記事にまとめました。

ORDER BY句は、結果の行を指定した列の値で並べ替えます。昇順はASC、降順はDESCというキーワードで指定します。どちらも省略すると、既定の昇順になります。複数のSELECT文の結果をUNIONでつないだときは、文の最後に1回だけ書きます。

SELECT文を書くときはSELECTが先頭ですが、処理される順番は違います。先にFROMで対象のテーブルを決め、次にWHEREで行を絞り込みます。列を選ぶSELECTは、その後に処理されます。ただし、これは結果がどう決まるかを説明するための順番です。実際のDBMSは、同じ結果になる範囲で、速く処理できる手順を選びます。

書く順番1. SELECT2. FROM3. WHERE4. ORDER BY処理される順番1. FROM2. WHERE3. SELECT4. ORDER BY処理はここSELECTは書く位置では先頭だが、FROM・WHEREより後に動く
SELECT文を書く順番と、処理される順番(考え方の上での順番)の違いを示す図です。SELECTの処理は、FROMで表を決め、WHEREで行を絞った後になります。

この順番を知っておくと、WHERE句にSELECT句で指定していない列の条件を書ける理由が分かります。WHERE句を処理する時点では、まだ列が絞られていないためです。行を絞るWHERE句と列を選ぶSELECT句の考え方は、関係演算の記事で選択と射影として比べています。

SELECT句には、列名のほかに式も書けます。条件によって表示する値を変えたいときは、CASE式を使います。

SELECT文のパターンを選んで結果を確かめる

次の図でSELECT文のパターンを選ぶと、SQL文と結果の表が変わります。どのパターンも同じ商品の表を使います。図は実際のデータベースには接続しておらず、結果はあらかじめ計算した固定の値です。ORDER BYを付けないときの行の順番は決まっておらず、DBMSによって変わることがあります。図では、ORDER BYが無いパターンは元の表の順に並べています。

元の表(商品)

商品名分類価格在庫
ノート文具12050
消しゴム文具10080
ボールペン文具150200
USBメモリ電子150015
ワイヤレスマウス電子250010
SELECT *
FROM 商品;

「*」は全列を選ぶ記号です。WHEREが無いので、5行すべてが結果になります。

実行結果(5行)
商品名分類価格在庫
ノート文具12050
消しゴム文具10080
ボールペン文具150200
USBメモリ電子150015
ワイヤレスマウス電子250010

INSERT・UPDATE・DELETE文は、行を追加・書き換え・削除する

SELECT文はデータを読み取るだけで、テーブルの内容を変えません。テーブルの内容を変えるDML文には、INSERT文・UPDATE文・DELETE文があります。

INSERT文は、テーブルに新しい行を追加します。UPDATE文は、既存の行の値を書き換えます。DELETE文は、既存の行を削除します。UPDATE文とDELETE文では、WHERE句で対象の行を絞ります。WHERE句を書き忘れると、全ての行が対象になります。どの利用者にこれらの文を許すかはGRANT文・REVOKE文の記事に、各文の詳しい書き方はINSERT・UPDATE・DELETE文の記事にあります。

INSERT INTO 商品 (商品名, 価格) VALUES ('クリップ', 80);
UPDATE 商品 SET 価格 = 130 WHERE 商品名 = 'ノート';
DELETE FROM 商品 WHERE 商品名 = '消しゴム';

SQL文の組み立て方に問題があると、利用者の入力を使ってデータベースを不正に操作されることがあります。仕組みと対策は、SQLインジェクションとXSSの違いの記事で説明しています。

参考にした資料

練習問題(全5問)

Q1SQLの説明として最も適切なものはどれ?
Q2データベース言語の分類として、SELECT文・INSERT文が属する種類はどれ?
Q3次のSELECT文で、先に処理されるのはWHERE句とSELECT句のどちらか?
Q4ORDER BY 価格; と書いたとき、価格の並び順として正しいものはどれ?
Q5テーブルの既存の1行の値を書き換えたいとき、使う文はどれ?

選んでから「採点する」を押すと、解説つきで答え合わせができます。

関連記事

おすすめの本 PR

セキュリティとデータベースは、基本情報技術者試験の対策本でまとめて学べます。

目的別の本の選び方を見る

データベースの記事を続けて読む

データベース 全36本中8本目