##はじめに
インターネット検索やSNS、また物流や金融機関といった情報システムの多くのは「データベース」を使用しています。
この記事ではデータベースの表を定義したり、データを操作したりするときに最も多く使用されてる「SQL(Structured Query Language)」という言語について基本的な用法をまとめていきます。
SQLには、データの抽出や挿入、更新、削除などを行う「データ操作言語(DML:Data Manipulation Language)」や、データベースや表などを定義する「データ定義言語(DDL:Data Definition Language)」などがありますが、今回はデータ操作言語とデータ定義言語それぞれの基本にあたる「SELECT文」と「CREATE文」を取り扱います。
##目次
##SELECT文(データ操作言語)
関係データベースの表からSQLで必要なデータを抽出するには、「SELECT文」を使います。
データを抽出することは問合せ(クエリ)と呼ばれています。
「SELECT文」では、どの列を、どの表から、どういう条件で抽出するかを記述し、これにより、射影・選択・結合の関係演算を行うことができます。
###SELECTの基本形
SELECT 列名1, 列名2 ・・・・・・・・・・抽出する列(射影すべき列)を指定する
FROM 表名1, 表名2・・・・・・・・・・対象となる表を指定する
WHERE 条件式 ・・・・・・・・・・・・抽出条件(選択すべき行の条件)を指定する
###関係演算
関係演算は、関係データベースの表から目的のデータを取り出す演算のことです。
次のデータ操作を行うことができます。
射影(Projection) - 表の中から特定の列を抽出する
選択(Selection) - 表の中から条件に合致した行を抽出する
結合(Join) - 二つ以上の表を結合して、一つの表を生成する
####射影
表の中から特定の列を抽出します。
SELECT 品名 FROM 商品表
####選択
表の中から条件に合致した行を抽出します。
「WHERE条件式」には、次の比較演算子や論理演算子を指定します。
比較演算子
A = B - AはBと等しい
A <> B - AはBと等しくない
A > B - AはBより大きい
A < B - AはBより小さい(AはB未満)
A >= B - AはB以上
A <= B - AはB以下
論理演算子
A AND B - AかつB
A OR B - AまたはB
NOT A - Aではない
例1)商品表から番号が1,2,3の商品情報(全ての列)を抽出する
SELECT * FROM 商品表
WHERE 番号='1' OR 番号='2' OR 番号='3'
例2)商品表から,価格が1万円以上5万円以下の商品情報を抽出する
SELECT * FROM 商品表
WHERE 価格 >= 10000 AND 価格 <= 50000
####結合
二つ以上の表を結合して、一つの表を生成します。FROM
で抽出対象となる表を複数指定し、「WHERE条件式」で表間をどの列で結合するかを指定します。
ここで、指定した複数の表に同じ列名がある場合は、表名.列名
で区別します。例えば、受注表.商品番号
とは、受注表にある商品番号を、商品表.商品番号
とは、商品表にある商品番号をそれぞれ意味します。
受注表と商品表を結合し、顧客名と商品名、単価を抽出する
SELECT 顧客名, 商品名, 単価
FROM 受注表, 商品表
WHERE 受注表.商品番号 = 商品表.商品番号
または
SELECT 顧客名, 商品名, 単価
FROM 受注表
JOIN 商品表
ON 受注表.商品番号 = 商品表.商品番号
##CREATE文(データ定義言語)
###表の定義
表を定義するには、次の「CREAT TABLE文」を使います。
CREATE TABLE 表名 (列名 データ名 [オプション],・・・) - 表を作成する
FOREIGN KEY (列名) REFERENCE 表 (列名) - 外部キーを設定し参照制約をつける
PRIMARY KEY - 主キー(重複を禁止,NULLを許容しない)を設定する。
UNIQUE (列名) - 重複を禁止する
CHECK (列名 条件) - 値に条件をつける
NOT NULL - NULLを許容しない
次に**社員表
**という名称でテーブルを定義してみます。
主キーは重複が禁止であるため、名前(同姓同名があり得る)よりも
今回でいう社員コード
のような個別のIDを使用することが多いです。
また、参照制約を用いて他の表データとの関連付けを行います。
今回は外部の部署表
というテーブルと部署コード
を関連させます。
CREATE TABLE 社員表 (
社員コード CHAR(5) PRIMARY KEY,
名前 VARCHAR(20),部署コード CHAR(3),給料 NUMERIC,
FOREIGN KEY(部署コード) REFERENCE 部署表(部署コード) )
CHAR(5)は固定長5バイトの文字データ、
VARCHAR(20)は可変長の10バイトの文字データ、
NUMERICは数値データを定義しています。
###ビューの作成
ビューは、実際に存在する実表から必要な部分を取り出して、一時的に作成した表のことです。利用者に対して、実表を異なる表現で利用者に提示することができます。ビューを定義するには、「CREATE VIEW文」を使います。
例えば、先に定義した社員表から、社員コード
、名前
、給料
の列を取り出した社員給料表を定義してみます。
CREATE VIEW 社員給料表 (社員コード,名前,給料)
AS SELECT 社員コード,名前,給料 FROM 社員表
以下の表が定義されます。(利用者には部署コードは見えません)
参考にした書籍
[栢木先生の基本情報技術者教室]
(https://www.amazon.co.jp/%E4%BB%A4%E5%92%8C03%E5%B9%B4-%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8-%E3%82%AF%E3%83%AC%E3%83%90%E3%83%BC%E6%96%B9%E5%BC%8F%E3%81%A7%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8B-%E6%A0%A2%E6%9C%A8%E5%85%88%E7%94%9F%E3%81%AE%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E6%95%99%E5%AE%A4-%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93/dp/4297117169/ref=sr_1_2_sspa?crid=1D51HD6Z2J968&dchild=1&keywords=%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93&qid=1630744262&sr=8-2-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEzVkpIUUc4WEI3WjJIJmVuY3J5cHRlZElkPUEwMjI0NDAxMkcxQVBLOVU3UVdGTiZlbmNyeXB0ZWRBZElkPUEzRzhISDY4TEdUMTFUJndpZGdldE5hbWU9c3BfYXRmJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==)
スッキリわかるSQL入門
その他SQL初級者に参考になると思われる記事
【これだけ覚えてたらOK!】SQL構文まとめ
以上、間違いや修正点ありましたらご指摘よろしくお願いします。