🌟

SQLの4大命令

に公開

はじめに

こんにちは。
プログラミング初心者wakinozaと申します。
勉強中に調べたことを記事にまとめています。

十分気をつけて執筆していますが、なにぶん初心者が書いた記事なので、理解が浅い点などあるかと思います。
間違い等あれば、指摘いただけると助かります。

記事を参考にされる方は、初心者の記事であることを念頭において、お読みいただけると幸いです。

記事のテーマ

  • SQLを学習中で、学んだことをアウトプットしています
  • この記事ではSQLの4大命令についてまとめていきます

目次

1. SQLとは
2. SELECT
3. UPDATE
4. DELETE
5. INSERT

1. SQLとは

検索や書き換え、分析などのデータ管理を目的として蓄積された情報を「データベース」と呼びます。
データベースの情報は、データベース管理システム(DBMS : database management system)と呼ばれるプログラムで管理されています。
実際にデータベースの情報を検索・書き換え・分析する場合は、DBMSに命令文を送信します。
この命令文の「SQL」といいます。

DBMSのうち、複数の表のデータを取り扱うものを特にRDMS(relational database management system)といいます。
RDMSは、商用のものから、オープンソースソフトウェアとしてインターネット上で無償で公開されているものまで、さまざまな製品を利用することができます。
製品によって、仕様やSQLの記述方法に違いはありますが、 基本的な構造や考え方は同じです。

この記事では、基本的にANSI(米国国家規格協会:
American National Standard Institute)とISO(国際標準化機構 : Organization for Standardization)で定められたSQLの標準構文に基づいて説明していきます。
各RDMSでの具体的な仕様やSQLの記述方法は、各製品のマニュアルを参照してください。

2. SELECT

SQLでよく使われるのが、SELECT, UPDATE, DELETE, INSERTの4大命令です。
この記事では、SELECTについて説明していきます。

SELECTの役割は、データベースに保存されている情報の表(テーブル)から 目的のデータを指定して取得することです。
基本構造は、以下の通りです。

SELECT 取得したい列名
  FROM テーブル名
  --  (WHERE修飾)
  --  (その他の修飾)

「SELECT」という命令の後に取得したい列名を指定します。

「FROM」という命令の後に、取得したいデータが格納されているテーブル名を指定します。

SELECT文は、基本的に列単位の取得になります。より細やかにデータを取得したい場合は、WHERE修飾句で条件を追加します。

では、具体例で見ていきましょう。

テーブル名:商品テーブル

商品名 個数 価格
商品A 10 500
商品B 5 300
商品C 15 2000
商品D 20 1500

上のようなテーブルがデータベースに格納されているとします。

この商品テーブルから、商品名だけを取得したい場合は、SQLは以下になります。

SELECT 商品名
  FROM 商品テーブル

上のSQL文を実行すると、以下の結果が取得できます。

商品名
商品A
商品B
商品C
商品D

SELECT文では複数の列名を指定することもできます。
この商品テーブルから、商品名と価格を取得したい場合は、SQLは以下になります。

SELECT 商品名, 価格
  FROM 商品テーブル

上のSQL文を実行すると、以下の結果が取得できます。

商品名 価格
商品A 500
商品B 300
商品C 2000
商品D 1500

SELECT文で全てのデータを取得したい場合は、SELECT命令の後に「*(アスタリスク)」を指定します。

SELECT *
  FROM 商品テーブル

上のSQLは、以下のSQLと同じ結果を取得します。

SELECT 商品名, 個数, 価格
  FROM 商品テーブル

*(アスタリスク)による全列検索は、テーブルの全情報を取得したい場合に非常に便利です。
しかし、*とWHEREなど修飾句を併用した取得は、実際の開発環境では推奨されません。
その理由は、主に3つあります。

  • DBサーバからクライアントに転送するデータが、不必要に大きくなってしまう
  • データ量が大きくなるため、メモリやディスクが無駄遣いされる
  • 後から列を追加した場合に、*での全列検索で取得される情報が知れず知らずに変更されてしまう

そのため、実際の開発では極力使用を避けるか、使う場合でも十分に検討した上で利用する必要があります。

3. UPDATE

UPDATE分の役割は、すでにテーブルに存在するデータを書き換えることです。
基本構造は、以下の通りです。

UPDATE  テーブル名
  SET 列名1 =1, 列名2 =2, 列名3 =3・・・
  -- (WHERE修飾)

1行目のUPDATEの直後に、更新したいデータが格納されたテーブル名を記述します。
2行目のSET句に、更新したい列名とその列に書き込む値をイコール記号(=)で対応させて記述します。

この2行だけの命令分では、テーブルの全件が更新されます。

UPDATE 商品テーブル
  SET 価格= 9999

例えば、上記のSQLを実行すると、結果は以下になります。

商品名 個数 価格
商品A 10 9999
商品B 5 9999
商品C 15 9999
商品D 20 9999

もし、特定の行だけを更新したい場合は、WHERE修飾句で更新したい行を指定します。

UPDATE 商品テーブル
  SET 価格= 9999
  WHERE 商品名  = '商品A'

変更したい行をWHERE修飾句で指定すると、結果は以下になります。

商品名 個数 価格
商品A 10 9999
商品B 5 300
商品C 15 2000
商品D 20 1500

4. DELETE

DELETE文の役割は、すでにテーブルに存在する行を削除することです。
基本構造は、以下の通りです。

DELETE
  FROM テーブル名
  -- (WHERE修飾句)

DELETE文では、列名を指定する必要がないため、1行目のDELETEの後ろには何も記述しません。
FROM句の後に、テーブル名を指定します。

DELETE  FROM 商品テーブル

もし、上記のSQLを実行すると、テーブルの前データが消去されてしまいます。
特定の行だけを削除したい場合は、WHERE修飾句で更新したい行を指定します。

DELETE  FROM 商品テーブル
  WHERE  商品名  = '商品A'

5. INSERT

最後にINSERT文です。
INSERT文の役割は、テーブルに新しいデータを追加することです。
基本構造は、以下の通りです。

INSERT INTO テーブル名
            (列名1, 列名2, 列名3・・・)
  VALUES  (1,2,3・・・)

1行目のINSERT文には、INTOのキーワードに続けて、データを追加するテーブル名を記述します。
さらにテーブル名の後に、カッコで括ってデータを追加する列名を指定します。だたし、すべての列に値を追加する場合には、この列名指定は省略可能です。
3行目はVALUES句といい、前の行で指定した列名に対応する値を指定します。

INSERT INTO 商品テーブル
            (商品名, 個数, 価格)
  VALUES  ('商品E', 2, 1000)

例えば、上記のSQLを実行すると、結果は以下になります。

商品名 個数 価格
商品A 10 500
商品B 5 300
商品C 15 2000
商品D 20 1500
商品E 2 1000

テーブルの一番下に、INSERT文で追加したデータが格納されています。


記事は以上です。
最後までお読みいただき、ありがとうございました。

参考情報一覧

この記事は以下の情報を参考にして執筆しました。

GitHubで編集を提案

Discussion