SQLとは

えすきゅーえる

関係データベースで、表の定義、データの検索・追加・更新・削除、権限の制御などを行うための標準の言語。ISO/IECとJISで規格化されている。SELECT、INSERT、UPDATE、DELETE、CREATE TABLE、GRANTなどの文がある。

「SQL」は、3分野の15問の練習問題に出てきます(データベースの基礎, 情報セキュリティの基礎, LSI設計フロー・EDAなど)。

この用語の分野: データベースの基礎

SQLの文の種類

SQLの文は、役割によって大きく3つに分けられます。データ定義言語(DDL)は、CREATE、ALTER、DROPのように、表やビュー、インデックスなどの構造を定義します。データ操作言語(DML)は、SELECT、INSERT、UPDATE、DELETEのように、表の中のデータを扱います。データ制御言語(DCL)は、GRANTやREVOKEのように権限を制御します。トランザクションを確定するCOMMITや取り消すROLLBACKは、DCLに含めることも、トランザクション制御文として別に分けることもあります。

SELECT文の句と処理の順番

SELECT文は、SELECT 列 FROM 表 WHERE 条件 GROUP BY 列 HAVING 条件 ORDER BY 列 のように句を並べて書きます。書く順番とは異なり、処理は FROM(表を決め、結合する)、WHERE(行を選ぶ)、GROUP BY(グループにまとめる)、HAVING(グループを選ぶ)、SELECT(列を取り出し、集約関数を計算する)、ORDER BY(並べ替える)の順と考えると理解しやすくなります。WHEREに集約関数を書けず、グループの条件をHAVINGに書くのはこのためです。

宣言的な言語とNULLの扱い

SQLは、どんな結果がほしいかを書く宣言的な言語で、結果を得るための手順はDBMSのオプティマイザが決めます。値が未知であることを表すNULLの扱いには注意が必要です。NULLとの比較は真にも偽にもならず(不明)、= NULL ではなく IS NULL で調べます。SUMやAVGなどの集約関数はNULLを無視し、COUNT(*)は行の数を、COUNT(列)はその列がNULLでない行の数を数えます。

SQLの練習問題に挑戦

SQLの文は、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)に分けられる。DDLに分類されるものはどれか。

  1. AUPDATE 社員 SET 部署 = '開発' WHERE 社員番号 = 5
  2. BCREATE TABLE 部署 (部署ID INTEGER PRIMARY KEY, 部署名 CHAR(10))
  3. CGRANT SELECT ON 社員 TO 田中
答えと解説を見る

正解:B. CREATE TABLE 部署 (部署ID INTEGER PRIMARY KEY, 部署名 CHAR(10))

DDL(Data Definition Language)は、表やビュー、インデックスといったデータベースの構造を定義する文で、CREATE、ALTER、DROPがあります。DML(Data Manipulation Language)は、表の中のデータを扱う文で、SELECT、INSERT、UPDATE、DELETEがあります。DCL(Data Control Language)は、権限などを制御する文で、利用者に権限を与えるGRANT、権限を取り消すREVOKEがあります。トランザクションを確定するCOMMITや取り消すROLLBACKは、DCLに含めることも、トランザクション制御文として別に分けることもあります。選択肢のうち、表を作るCREATE TABLEがDDLです。

SQLで DELETE FROM 社員 を、WHERE句を付けずに実行したときの結果として正しいものはどれか。

  1. A社員表のすべての行が削除され、空の表が残る
  2. B表そのものが削除され、表の定義もなくなる
  3. CWHERE句がないので、エラーになって何も削除されない
答えと解説を見る

正解:A. 社員表のすべての行が削除され、空の表が残る

DELETEは、表から行を削除するDMLの文です。WHERE句で条件を付けるとその条件に合う行だけが削除されますが、WHERE句を省略すると、すべての行が削除の対象になります。DELETEで行がなくなっても、表の定義(列の名前や型、制約)は残るので、その後もINSERTで行を追加できます。表そのものを定義ごと削除するのは、DDLの DROP TABLE 社員 です。UPDATEも同じで、WHERE句を付け忘れるとすべての行が書き換わるので、実行する前に条件を確かめることが大切です。トランザクションの中であれば、COMMITする前にROLLBACKで取り消せます。

よくある質問

SQLのWHERE句とHAVING句はどう違いますか?

WHERE句は、グループにまとめる前の1行ずつに対する条件で、集約関数は書けません。HAVING句は、GROUP BYでまとめたあとのグループに対する条件で、HAVING SUM(金額) >= 1000 のように集約関数を使えます。

SQLでNULLの行を探すにはどうしますか?

WHERE 列 IS NULL と書きます。WHERE 列 = NULL は、NULLとの比較が真にならないので、1行も選ばれません。NULLでない行は IS NOT NULL で選びます。

解説の中の「SQL」

「SQL」が出てくる問題(15問)

  1. SQLの文は、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)に分けられる。DDLに分類されるものはどれか。
  2. SQLで DELETE FROM 社員 を、WHERE句を付けずに実行したときの結果として正しいものはどれか。
  3. 社員表(社員番号, 部署, 給与)から、部署ごとの平均給与が300以上の部署と、その平均給与を求めたい。正しいSQL文はどれか。
  4. 顧客表(顧客ID, 氏名)と注文表(注文ID, 顧客ID, 金額)から、一度も注文していない顧客の氏名を求めたい。正しいSQL文はどれか。
  5. SQLの標準規格が定める分離レベルのうち、READ COMMITTED で起こりうる現象の組み合わせとして正しいものはどれか。
  6. RTL設計で主に使われるハードウェア記述言語はどれか。
  7. ログインの画面で、パスワードの欄に ' OR '1'='1 のような文字列を入力されると、パスワードを知らなくてもログインできてしまうWebアプリケーションがある。この攻撃の名前はどれか。
  8. SQLインジェクションへの対策として、プレースホルダを使うプリペアドステートメント(パラメータ化クエリ)が、入力の中の危険な文字を取り除く方法より根本的な対策とされる理由として正しいものはどれか。
  9. 関係データベースの用語で、表(リレーション)の1行に当たるものはどれか。
  10. 関係データベースの表で、主キーに指定する列(または列の組)が満たさなければならない条件はどれか。
  11. 履修表(学生番号, 科目番号, 成績)は、どの学生がどの科目を履修し、どんな成績だったかを記録する。1人の学生は複数の科目を履修し、1つの科目は複数の学生が履修する。同じ学生が同じ科目を2回登録することはないとき、この表の主キーとして適切なものはどれか。
  12. 試験表の点数の列に、80、NULL、70、90 の4つの値がある(NULLは未受験を表す)。SELECT AVG(点数) FROM 試験 の結果はどれか。
  13. 在庫表のある商品の在庫数は10である。トランザクションT1は在庫数を読み出して3を引いた値を書き込み、T2は在庫数を読み出して5を引いた値を書き込む。ロックをかけずに、T1の読み出し、T2の読み出し、T1の書き込み、T2の書き込みの順に実行されたとき、最終的な在庫数はいくつになるか。
  14. トランザクションを同時に実行したときに起きる問題のうち、ダーティリードの説明として正しいものはどれか。
  15. トランザクションT1が SELECT COUNT(*) FROM 注文 WHERE 金額 >= 1000 を実行したところ8件だった。その直後に、T2が金額2000の注文の行をINSERTしてコミットした。T1が同じSELECT文をもう一度実行すると9件になった。この現象はどれか。

データベースの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

半導体・電子回路・情報の計算ツール

関連する用語

トランザクション 分離レベル 主キー SQLインジェクション 関係データベース ビュー インデックス RTL(レジスタ転送レベル) ハードウェア記述言語 Verilog

用語集の一覧へ