SQLの基礎まとめ【DDL・DML・SELECT文・副問合せまでを解説】

SQLに関するブログのアイキャッチ画像 データベース
広告

 SQL(Structured Query Language)は,関係データベースを操作するための言語であり,基本情報技術者試験をはじめとする情報処理技術者試験で必須となる重要分野です。関係モデルで設計したデータベースに対して,データの定義や検索,追加,更新などの操作を行う際にSQLが使用されます。

SQL=関係データベースを操作するための言語

 SQLでは,テーブルの作成や削除などを行うDDL(データ定義言語)と,データの検索・追加・更新・削除などを行うDML(データ操作言語)を中心に学習します。特に,データを検索するSELECT文は試験でも頻出であり,WHERE句やGROUP BY句,HAVING句などの使い方を理解することが重要です。

 このページでは,SQLの基本的な位置づけを整理したうえで,DDL(データ定義言語)とDML(データ操作言語)の基本,そして試験で特に重要となるSELECT文や副問合せの使い方について,例を交えながらシンプルに解説します。

 初学者の方や,SQLの基本を整理して理解したい方に向けたまとめページです。

  1. SQL(Structured Query Language)とは
    1. DDL(Data Definition Language;データ定義言語)とは
    2. DML(Data Manipulation Language;データ操作言語)とは
    3. 表の定義(表の構造と制約)
      1. データ型とは
      2. 列制約とは
      3. 表制約とは
      4. 表定義の例
    4. 表の削除(表を安全に削除)
    5. ビューの定義(仮想表の作成)
      1. ビュー定義の例
    6. ビューの削除
    7. 定義域(ドメイン)の定義(値の範囲制約)
    8. 定義域(ドメイン)の削除
    9. 権限の付与(アクセス制御)
      1. 権限の種類
    10. 権限の取消し(削除)
    11. データの検索(SELECT文)とは
      1. 抽出条件とは(検索条件の基本)
        1. 比較述語(比較演算子,論理演算子)とは
        2. BETWEEN述語とは
        3. LIKE述語とは
        4. NULL述語とは
        5. IN述語とは
      2. 表の結合(JOIN の種類と用途)
        1. 相関名(別表名)とは
        2. 外部結合とは
      3. グループ化と集合関数とは(集計処理の基本)
      4. 並べ替えとは
      5. SELECT句とは
        1. 別名(エイリアス)とは
      6. 副問合せとは
        1. 副問合せが単一行を返す場合とは
        2. IN述語(副問合せが複数行を返す場合)とは
        3. 限定述語(ANY,ALL)(副問合せが複数行を返す場合)とは
      7. 相関副問合せとは
    12. 行の挿入(追加)(INSERT文)
    13. 値の更新(変更)(UPDATE文)
    14. 行の削除(DELETE文)
    15. 埋込みSQL
      1. 埋込み変数(ホスト変数)とは
      2. カーソルとは
  2. まとめ
    1. 基本情報技術者試験の学習におすすめの参考書
    2. 学習のお役に立ちましたら
広告

SQL(Structured Query Language)とは

 SQLは,関係データベースの管理や操作をするために使用する世界標準のデータベース言語です。

DDL(Data Definition Language;データ定義言語)とは

 DDLは,データベースのデータ構造を定義する言語です。

テーブル(実表)の定義CREATE TABLE文
テーブル(実表)の削除DROP TABLE文
ビュービュー(仮想表)の定義CREATE VIEW文
ビュー(仮想表)の削除DROP VIEW文
定義域定義域(ドメイン)の定義CREATE DOMAIN文
定義域(ドメイン)の削除DROP DOMAIN文
権限権限の付与GRANT文
権限の取消し(削除)REVOKE文

※ 各文の詳細は後述

これ以降,テーブル(実表)は,ビュー(仮想表)はビューとします。

DML(Data Manipulation Language;データ操作言語)とは

 DMLは,データベースの表やビューに対して,各操作を行うための言語です。

データ操作データの検索SELECT文
データの挿入(追加)INSERT文
データの更新(変更)UPDATE文
データの削除DELETE文

※ 各文の詳細は後述

表の定義(表の構造と制約)

 表には,実際にデータを格納します。「CREATE TABLE文」を使用して定義します。

CREATE TABLE 表名 (
列名1 データ型 [ 列制約 ],
列名2 データ型 [ 列制約 ],

[ 表制約 ] )

※ [  ]は省略可能

データ型とは

 表を定義する場合,各列にはデータ型を指定する必要があります。よく使用されるデータ型は,次のとおりです。

文字型CHAR(n)英数字などの,長さnバイトの固定長文字列
VARCHAR(n)英数字などの,最大nバイトの可変長文字列
漢字型NCHAR(n)漢字などの,長さn文字の固定長文字列
数値型INTEGER整数値
NUMERIC(m,n)全桁数がm,小数部の桁数がnの数値
※ nを省略した場合は,整数値となる
FLOAT単精度浮動小数点数
DOUBLE倍精度浮動小数点数
日付型DATE「yy-mm-dd」形式の日付
TIME「hh-mm-ss」形式の時刻

列制約とは

 列制約は,1つの列(属性)に対する制約です。次のようなものがあります。

一意性制約PRIMARY KEY主キーとなる列に指定する
UNIQUE重複を許可しない列に指定する
非NULL制約NOT NULL空値を許可しない列に指定する
参照制約REFERENCES 被参照表名 [(列名)]外部キーに指定する

※ 被参照表の主キーを参照する場合,列名は省略可

検査制約CHECK (条件)格納される値が満たすべき条件を指定する
既定値DEFAULT デフォルト値値が指定されない場合の既定値を指定する

※ 複数の制約を指定する場合は,カンマで区切り指定する

表制約とは

 表制約は,主キーや外部キーが複数の列(属性)から構成される場合に使用します(主キーや外部キーが1つの列から構成される場合でも使用できます)。

※ 列制約は,1つの列に対する制約なので,主キーや外部キーが複数の列から構成される場合は定義できない

一意性制約(主キー)PRIMARY KEY (主キーを構成する列名のリスト)
参照制約(外部キー)FOREIGN KEY (外部キーを構成する列名のリスト)
REFERENCES 被参照表名 [(列名のリスト)]

表定義の例

 たとえば,「選手表」を定義するSQL文は,次のようになります。

※ データ型や列制約の記述方法にも注目!!

 また,「投手別球種別球速表」を定義するSQL文は,次のようになります。

※ 列制約や表制約の記述方法にも注目!!

表の削除(表を安全に削除)

 表を削除する場合は,「DROP TABLE文」を使用します。

DROP TABLE 表名

 たとえば,「選手表」を削除するSQL文は,次のようになります。

DROP TABLE 選手表

 この場合,「選手表」が存在していれば削除されますが,存在していなければエラーになってしまいます。これに対応するためには,「IF EXISTS」を使用して表の存在確認を行い,表が存在する場合にだけ削除するようにします。

DROP TABLE IF EXISTS 選手表

ビューの定義(仮想表の作成)

 ビューは,表から作成される仮想的な表です。仮想的な表ですので,データは持ちません。「CREATE VIEW文」を使用して定義します。

CREATE VIEW ビュー名 [(列名1,列名2,…)]
AS SELECT …

※ ビューの列名は,AS句のSELECT文の列名と一致しなければならない(ビューの列名を省略すると,SELECT文の列名がビューの列名となる)

※ SELECT文の詳細は後述

 ビューは,仮想的な表ではありますが,内容を更新すれば表(実表)にも反映されます(次の条件を満たす場合)。

  • 1つの表から作成されている
  • SELECT句に,算術式,集合関数を含まず,DISTINCTの指定がない
  • WHERE句に副問合せがない
  • GROUP BY句やHAVING句を含まない

ビュー定義の例

ビューの定義に関する説明画像

よくわからない場合は,とりあえず先(特にSELECT文)に進んで,また,戻ってきてみてください。

ビューの削除

 ビューを削除する場合は,「DROP VIEW文」を使用します。

DROP VIEW ビュー名

 たとえば,「合計本塁打数表」を削除するSQL文は,次のようになります。

DROP VIEW 合計本塁打数表

定義域(ドメイン)の定義(値の範囲制約)

 定義域(ドメイン)とは,列(属性)が取り得る値の集合のことをいいます。「CREATE DOMAIN文」を使用して定義します。

CREATE DOMAIN ドメイン名 データ型

 たとえば,「身長型」という定義域(ドメイン)を定義して,「選手表」の「身長」のデータ型として使用するSQL文は,次のようになります。

定義域(ドメイン)の削除

 定義域(ドメイン)を削除する場合は,「DROP DOMAIN文」を使用します。

DROP DOMAIN ドメイン名

 たとえば,「身長型」という定義域(ドメイン)を削除するSQL文は,次のようになります。

DROP DOMAIN 身長型

権限の付与(アクセス制御)

 権限を付与する場合は,「GRANT文」を使用します。

GRANT 権限名 ON データベースオブジェクト名
TO ユーザー名
[ WITH GRANT OPTION ]

権限の種類

 権限の種類には,次のようなものがあります。

SELECTデータベースオブジェクトに対してSELECT(検索)を許可する
INSERTデータベースオブジェクトに対してINSERT(行の挿入)を許可する
UPDATEデータベースオブジェクトに対してUPDATE(値の更新)を許可する
DELETEデータベースオブジェクトに対してDELETE(行の削除)を許可する
ALL PRIVILEGES
(または,ALL)
データベースオブジェクトに対して,付与可能な権限をすべて付与する

 たとえば,「ユーザーA」に,「選手表」に対する「SELECT」権限と「UPDATE」権限を付与するSQL文は,次のようになります。

GRANT SELECT,UPDATE ON 選手表 TO ユーザーA

権限の取消し(削除)

 権限を取り消す(削除する)場合は,「REVOKE文」を使用します。

REVOKE 権限名 ON データベースオブジェクト名
FROM ユーザー名

 たとえば、「ユーザーA」から,「選手表」に対するすべての権限を取り消す(削除する)SQLは,次のようになります。

REVOKE ALL ON 選手表 FROM ユーザーA

広告

データの検索(SELECT文)とは

 SELECT文は,表やビューからデータを抽出する場合に使用します。

SELECT [ ALL | DISTINCT ] 選択リスト

FROM
表名リスト
[ WHERE
抽出条件や結合条件 ]
[ GROUP BY
列名リスト ]
[ HAVING
グループ抽出条件 ]
[ ORDER BY
列名 [ ASC または DESC ],… ]

※ | は「または」を意味する

※ [  ]は省略可能

※ 実行順序は,FROM句→WHERE句→GROUP BY句→HAVING句→ORDER BY句→SELECT句

FROM句データを抽出する対象となる表(または,ビュー)を指定する
指定する表(または,ビュー)が1つの場合は,その表(または,ビュー)を次のWHERE句に渡す。複数の場合は,それらの表(または,ビュー)から直積を作成し,次のWHERE句に渡す
WHERE句特定の行を抽出するための抽出条件や,表の結合条件を記述する
(FROM句から)受け取ったデータから抽出条件や結合条件を満たす行を抽出し,次の句に渡す。WHERE句が省略された場合は,すべての行を抽出し,次の句に渡す
※ 抽出条件については後述
GROUP BY句グループ化する列を指定する
受け取ったデータから,指定した列の同じ値を持つ行をグループ化し,次の句に渡す
HAVING句特定のグループを抽出するための抽出条件を記述する
受け取ったグループ化されたデータから,抽出条件を満たす行を抽出し,次の句に渡す
※ 抽出条件については後述
ORDER BY句行(または,グループ)を,昇順(または,降順)に並べ替えるためのキー列(または,グループの代表値)を指定する
受け取ったデータを,昇順(または,降順)に並べ替える
SELECT句受け取ったデータから,抽出する列,算術式,集合関数,定数を指定する。すべての列を抽出する場合は,「*」(アスタリスク)を指定する
重複行(同じ行)の抽出について,
  • 「DISTINCTを指定した場合」⇒重複行を取り除く
  • 「ALL」を指定するか省略した場合⇒重複行を取り除かない
選択リストについて,
  • 列が指定されていれば,その列を,
  • 算術式が指定されていれば,その結果を,
  • 集合関数(列)が指定されていれば,その列で集計した結果を,
  • 定数が指定されていれば,その値を新たな列の値とする

この表,ぜんぜんシンプルじゃないです…。はじめての人は,見ても分からないと思います…。一度に覚えるのは難しいので,下の例を見ながら,少しずつ(理解しながら)覚えましょう。

抽出条件とは(検索条件の基本)

 抽出条件は,WHERE句やHAVING句に記述します。

比較述語(比較演算子,論理演算子)とは
比較演算子意味
=等しい列a = 100列aの値が100に等しい
<>等しくない列a <> 100列aの値が100に等しくない
>より大きい列a > 100列aの値が100より大きい
<より小さい
(未満)
列a < 100列aの値が100より小さい(未満)
>=以上列a >= 100列aの値が100以上(より大きいか等しい)
<=以下列a <= 100列aの値が100以下(より小さい(未満)か等しい)
論理演算子意味
OR論理和A OR BAを満たすか,または,Bを満たす
AND論理積A AND BAを満たし,かつ,Bも満たす
NOT否定NOT AAではない

 たとえば,次の「選手表」から,「打」が「右」で,「打率」が「.270」以上の行の「選手名」と「打率」を抽出するSQL文は,次のようになります。

比較述語に関する説明画像
BETWEEN述語とは

 BETWEEN述語は,列の値が,ある範囲に含まれているかどうかを調べる場合に使用します。

 たとえば,次の「選手表」から,「打率」が「.270」以上「.290」以下の行の「選手名」と「打率」を抽出するSQL文は,次のようになります。

LIKE述語とは

 LIKE述語は,列の値(文字列)が,指定したパターンに一致するかどうかを調べる場合に使用します。

パターン意味
%任意の0文字以上の文字と一致’麻%’
’%美’
’%友%’
「麻」で始まる(前方一致)
「美」で終わる(後方一致)
「友」を含む(任意一致)
_任意の1文字と一致’麻_ _’「麻」で始まる3文字

 たとえば,次の「2023年度打撃成績(上位5傑)表」から,「選手名」が「あお」で始まる行の「選手番号」と「選手名」を抽出するSQL文は,次のようになります。

NULL述語とは

 NULL述語は,列の値が,NULL値(空値)であるかどうかを調べる場合に使用します。

列名 IS NULL列の値がNULL値(空値)であるかどうかを調べる
列名 IS NOT NULL列の値がNULL値(空値)でないかどうかを調べる

 たとえば,次の「2023年度打撃成績(上位5傑)表」から,「チーム番号」がNULL値(空値)の行(どのチームにも所属していない選手という意味です)の「選手番号」と「選手名」を抽出するSQL文は,次のようになります。

IN述語とは

 IN述語は,列の値が,値リストの,いずれかに一致するかどうかを調べる場合に使用します(副問合せの結果のいずれかに一致するかどうかを調べる場合にも使用できます)。

※ 副問合せについては後述。

列名 IN 値リスト | 副問合せ列の値が値リスト(または,副問合せの結果)のいずれかに一致するかどうか
列名 NOT IN 値リスト | 副問合せ列の値が値リスト(または,副問合せの結果)のいずれとも一致しないかどうか

※ | は「または」を意味する

 たとえば,次の「2023年度打撃成績(上位5傑)表」から,「チーム番号」が「OSA」または「HIJ」の行の「選手番号」と「選手名」を抽出するSQL文は,次のようになります。

表の結合(JOIN の種類と用途)

 複数の表を結合する場合は,WHERE句に結合条件を記述し,FROM句に結合する表を指定します。

※ FROM句に「INNER JOIN」(内部結合)を指定する方法もある

 たとえば,次の「打撃成績表」と「選手表」を結合し,「年」と「選手番号」と「選手名」と「打率」を抽出するSQL文は,次のようになります。

複数の表に同じ列名が存在する場合は,区別するために「表名.列名」と記述します。

相関名(別表名)とは

 FROM句に指定する表名については,「表名 AS 別名」とすることで別名を付けることができます。「AS」は省略可能で,一般的には省略されます。

SELECT 年,P.選手番号,選手名,打率
FROM 打撃成績表 B,選手表 P
WHERE B.選手番号 = P.選手番号

外部結合とは

 外部結合の場合,2つの表に存在するレコード同士は結合して抽出し,基準となる表にだけ存在するレコードについては,そのまま抽出します。

LEFT OUTER JOIN
(左外部結合)
FROM句で左側に指定する表を基準として結合する
例)A表を基準としてB表と結合する
FROM A LEFT OUTER JOIN B
RIGHT OUTER JOIN
(右外部結合)
FROM句で右側に指定する表を基準として結合する
例)A表を基準としてB表と結合する
FROM B RIGHT OUTER JOIN A
FULL OUTER JOIN
(完全外部結合)
FROM句で指定する両方の表を基準として結合する
例)A表とB表の両方を基準として結合する
FROM A FULL OUTER JOIN B

 たとえば,次の「選手表」を基準として「打撃成績表」と結合し,「選手名」と「打率」を抽出するSQL文は,次のようになります。

グループ化と集合関数とは(集計処理の基本)

 同じ値でグループ化して1つにまとめる場合は,グループ化する列をGROUP BY句に指定します。GROUP BY句を使用した場合,SELECT句には,GROUP BY句に指定した列名,集合関数,定数のみ指定できます。また,グループの中から特定のグループを抽出する場合は,HAVING句に抽出条件を記述します。

 集合関数は,抽出されたグループに対して集計します。HAVING句とSELECT句に指定することができます。

SUM(列名)指定した列でグループごとに合計を求める
AVG(列名)指定した列でグループごとに平均を求める
MAX(列名)指定した列でグループごとに最大値を求める
MIN(列名)指定した列でグループごとに最小値を求める
COUNT(*)行の総数(データの件数)を求める
COUNT(列名)指定した列でグループごとにNULL値(空値)でない行の総数(データの件数)を求める

※ 集合関数を入れ子にすることはできない

※ SUM関数とAVG関数に指定する列のデータ型は数値型でなければならない

※ NULL値(空値)は,集計の対象にならない

※ 「列名」だけでなく,算術式を指定することもできる

 たとえば,次の「年度別打撃成績(本塁打)表」から,「選手番号」と「選手名」でグループ化し,「本塁打の合計」が「30」以上のグループの,「選手番号」,「選手名」と「本塁打の合計」を抽出するSQL文は,次のようになります。

 GROUP BY句を使用した場合,SELECT句には,

  • GROUP BY句に指定した列
  • 集合関数
  • 定数

のみ指定できます。

並べ替えとは

 抽出した行やグループを並べ替える場合は,並べ替え対象の列をORDER BY句に指定します。

※ 昇順に並べ替える場合は「ASC(または省略)」,降順に並べ替える場合は「DESC」を指定する

 たとえば,次の「年度別打撃成績(打率)表」を「打率」の降順に並べ替えて,「年」と「打率」を抽出するSQL文は,次のようになります。

SELECT句とは

 SELECT句には,受け取ったデータから,抽出する列,算術式,集合関数,定数を指定します。すべての列を抽出する場合は,「*」(アスタリスク)を指定します。

※ 「DISTINCT」を指定した場合,重複行は取り除かれる(「ALL」を指定するか省略した場合は取り除かれない)

  • 「DISTINCT」を指定した場合 ⇒ 重複行は取り除かれる
  • 「ALL」を指定するか省略した場合 ⇒ 重複行は取り除かれない
別名(エイリアス)とは

 SELECT句に指定する列については,「列名 AS 別名」とすることで別名を付けることができます。集合関数で集計した列についても,「集合関数(列名) AS 別名」とすることで別名を付けることができます。ASは省略可能ですが,一般的には省略しません。

※ 「グループ化と集合関数」の例を参照

関係演算とSELECT文

選択行を抽出する。抽出条件は,WHERE句に記述する
射影列(属性)を抽出する。列(属性)は,SELECT句に指定する
結合結合する表をFROM句に「,」(カンマ)で区切って指定し,結合条件をWHERE句に記述する
内部結合の場合は,結合する表をFROM句で「INNER JOIN」を使用して指定し,結合条件をON句に記述する
外部結合の場合は,結合する表をFROM句で「[LEFT | RIGHT | FULL] OUTER JOIN」を使用して指定し,結合条件をON句に記述する

※ 関係演算については,「関係モデルの基礎まとめ」を参照

副問合せとは

 副問合せとは,SELECT文(主問合せ)の中に記述することのできる,もう一つのSELECT文(副問合せ)のことをいいます。

副問合せが単一行を返す場合とは

SELECT 選択リスト FROM 表名1
WHERE 列名1 比較演算子 (SELECT 列名2 FROM 表名2 …)

※ 列名1と列名2は同じ属性でなければならない

※ 副問合せの結果が1行の場合のみ使用可能

 たとえば,次の「チーム表」から「チーム名」が「広島」の行を抽出し,その抽出した行の「チーム番号」と「2023年度打撃成績(上位5傑)表」の「チーム番号」が一致した場合に,その行を抽出するSQL文は,次のようになります。

IN述語(副問合せが複数行を返す場合)とは

 IN述語は,列の値が,副問合せの結果のいずれかに一致するかどうかを調べる場合に使用します。

SELECT 選択リスト FROM 表名1
WHERE 列名1 [NOT] IN (SELECT 列名2 FROM 表名2 …)

※ 列名1と列名2は同じ属性でなければならない

※ 「NOT」を付けると,副問合せの結果のいずれとも一致しないかどうかを調べることができる

 たとえば,次の「試合結果表」から重複なしで「選手番号」を抽出し,その結果のいずれかと「投手表」の「選手番号」が一致した場合に,その行の「選手番号」と「選手名」を抽出するSQL文は,次のようになります。

限定述語(ANY,ALL)(副問合せが複数行を返す場合)とは

 ANYは,副問合せの結果が0行ではなくて,列の値が副問合せの結果の少なくとも1つの値より大きいとか,小さいなどというように,比較の条件を満たしているかどうかを調べる場合に使用します。

SELECT 選択リスト FROM 表名1
WHERE 列名1 比較演算子 ANY (SELECT 列名2 FROM 表名2 …)

※ 列名1と列名2は同じ属性でなければならない

※ 「列名=ANY(副問合せ)」は,「列名 IN(副問合せ)」と同じ意味

 ALLは,副問合せの結果が0行(空)であるか,列の値が副問合せの結果のすべての値より大きいとか,小さいなどというように,比較の条件を満たしているかどうかを調べる場合に使用します。

SELECT 選択リスト FROM 表名1
WHERE 列名1 比較演算子 ALL (SELECT 列名2 FROM 表名2 …)

※ 列名1と列名2は同じ属性でなければならない

※ 「列名<>ALL(副問合せ)」は,「列名 NOT IN(副問合せ)」と同じ意味

相関副問合せとは

 相関副問合せは,主問合せの結果を1行ずつ副問合せに渡して実行し,結果を主問合せに返す副問合せです。

SELECT 選択リスト FROM 表名1
WHERE [NOT] EXISTS (SELECT 列名2 FROM 表名2 …)

※ 列名1と列名2は同じ属性でなければならない

※ EXISTSは,副問合せからの結果が1行でもあれば真,1行もなければ偽と評価する演算子

 たとえば,主問合せで「選手表」から「選手番号」を検索して,その結果を1行ずつ副問合せに渡し,主問合せから渡された(選手表の)「選手番号」と「打撃成績表」の「選手番号」が一致し,かつ,「試合数」が100以上の行が,1行以上あれば真,1行もなければ偽と評価して主問合せに渡し,副問合せからの結果が真の行の「選手番号」を抽出するSQL文は,次のようになります。

相関副問合せに関する説明画像
広告

行の挿入(追加)(INSERT文)

 行を挿入(追加)する場合は,「INSERT文」を使用します。

挿入する値を明示的に指定する場合

INSERT INTO 表名 [(列名リスト)] VALUES (値リスト)

SELECT文で検索した結果を,すべて挿入する場合

INSERT INTO 表名 [(列名リスト)] SELECT文

 たとえば,次の「選手表」に,「選手番号」が「1003」,「選手名」が「さぶろー」,「投」が「右」,「打」が「右」の行を挿入するSQL文は,次のようになります。

 また,次の「殿堂入り選手一覧表」に「2023年度殿堂入り選手表」の,すべての行を挿入するSQL文は,次のようになります。

値の更新(変更)(UPDATE文)

 値を更新(変更)する場合は,「UPDATE文」を使用します。

UPDATE 表名 SET
列名1 = 変更値,
列名2 = 変更値,

[ WHERE 条件 ]

※ WHERE句の条件に一致した行の値が更新される

※ WHERE句を省略した場合は,すべての行の値が更新される

 たとえば,次の「打撃成績表」で,「選手番号」が「1001」の行の「打数」に5を,「安打」に4を加えるSQL文は,次のようになります。

行の削除(DELETE文)

 行を削除する場合は,「DELETE文」を使用します。

DELETE FROM 表名 [ WHERE 条件 ]

※ WHERE句の条件に一致した行が削除される

※ WHERE句を省略した場合は,すべての行が削除される

 たとえば,次の「選手表」で,「選手番号」が「1002」の行を削除するSQL文は,次のようになります。

広告

埋込みSQL

 埋込みSQLとは,C言語などのホスト言語(親言語)で書かれたソースコードの中にSQL文を記述したものをいいます。

埋込み変数(ホスト変数)とは

 埋込み変数とは,埋込みSQL文で参照されるホスト言語の変数のことをいいます。

※ SQLの列名と区別するために,変数名の手前に「:」を付ける

カーソルとは

 カーソルは,SELECT文の検索結果が複数行の場合に,データを1行ずつ取り出すために使用します。

カーソルの定義DECLARE カーソル名 CURSOR FOR
  SELECT …
カーソルのオープンOPEN カーソル名
データ(行)の取り出しFETCH カーソル名 INTO :埋込み変数
カーソルのクローズCLOSE カーソル名

例)カーソルの使用方法

DECLARE 選手 CURSOR FOR SELECT 選手番号,選手名 FROM 選手表;
EXEC SQL OPEN 選手;
DO WHILE(繰り返す条件)
    EXEC SQL FETCH 選手 INTO :ID,:NAME;
    ループの終了判定
END;
EXEC SQL CLOSE 選手;

1行目:SELECT文から得られる導出表を,カーソル「選手」として定義する

2行目:カーソルをオープンし,SELECT文を実行する

3~6行目:“選手表” から選手データを1行ずつ取り出す

7行目:カーソルをクローズする

まとめ

 今回は,SQL(Structured Query Language)について,DDL(データ定義言語)とDML(データ操作言語)を中心に,基本的な考え方と代表的な文をシンプルにまとめてみました。SQLは,関係データベースを操作するための標準的な言語であり,基本情報技術者試験でも頻出となる重要分野です。

 特に,SELECT文によるデータ検索は試験でも多く出題されるため,WHERE句,GROUP BY句,HAVING句などの働きを例とともに確認しながら理解していくことが大切です。また,副問合せや表の結合(JOIN)などは,SQLの応用としてよく出題されるポイントですので,例を確認しながら少しずつ慣れていきましょう。

 理解が進んだら,基本情報技術者試験の過去問題等にもチャレンジしてみてください。

※ このページでは読みやすさを考慮し「コンピューター」,「サーバー」など長音付きで表記していますが,試験では「コンピュータ」,「サーバ」と表記されます

基本情報技術者試験の学習におすすめの参考書

基本情報技術者試験の合格を目指す方におすすめの参考書です。

令和08年 イメージ&クレバー方式でよくわかる かやのき先生の基本情報技術者教室
基礎理論からコンピュータ・ネットワーク・データベースまで、基本情報技術者試験の全範囲をわかりやすく学べる定番テキストです。図解が豊富で、初学者にもおすすめです。

キタミ式イラストIT塾 基本情報技術者 令和08年
イラストを使った解説が特徴の人気参考書です。基礎理論の考え方や計算問題もイメージで理解しやすく、独学学習との相性が良い一冊です。

令和08年 基本情報技術者 合格教本
試験範囲を体系的に学習したい方におすすめの教科書です。基礎理論の各テーマも丁寧に解説されており、理解を深めながら学習を進められます。

学習のお役に立ちましたら

この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。

よろしければ、このサイトを応援いただけますと嬉しいです。

※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。

広告