[基本情報技術者試験] SQLの基礎的な構文まとめ

# はじめに
新人エンジニアのしゅんやです！
今回は、今私が勉強している基本情報技術者試験によく出題されるSQLの基礎的な構文をまとめたので簡単に紹介していきます。

# 基礎的な構文一覧
基本情報技術者試験に出題されるSQLの基礎的な構文は次のものがあります。
- SELECT
- FROM
- WEHRE
- ORDER BY
- SUMなどの関数
- BETWEEN
- LIKE
- GROUP BY
- HAVING
- DISTINCT
- レコードの操作
- 比較演算子
- 論理演算子

# それぞれの構文の動き

それぞれのSQL構文の動きを簡単に説明していきます。

#### SELECT

SELECT文は、テーブルからデータを抽出するときに使います。
あるテーブルからどのような条件でデータを抽出して欲しいかを表した命令文です。
またこの構文に、複数のテーブルを結合、列と列の結合、演算子を使用して計算などのさまざまに加工してSELECT文を作成することが出来ます。

 [構文] 　**SELECT**（列名1）,（列名２）,... FROM（テーブル名）；


#### FROM

FROM句は、操作対象のテーブルなどを指定する句で、SELECT文の中で使われます。
SELECT文でデータを抽出することができ、どこからそのデータを取り出すかをこのFROM句で指定してあげます。

[構文] 　SELECT （列名1）,（列名２）,... 　**FROM** （テーブル名）；

#### WEHRE

WHERE句は、テーブルデータの検索条件を指定するためのSQL構文になります。
WHEREの後に条件式を指定することにより、その条件にマッチしたレコードだけを選択することができます。条件式は、検索対象となるフィールド名と演算子、関数などを使って表現します。

[構文]　　SELECT（列名1）,（列名２）,... FROM（テーブル名）**WHERE**演算子を使って条件を指定；

#### ORDER BY

ORDER BY句はソートを行う仕組みです。
「ORDER BY　列名　ASC」で指定の列の値を小さい順　（昇順）に、ASCの代わりにDESCを利用すると大きい順（降順）に整列することが出来ます。

[構文]　　SELECT（列名1）,（列名２）,... FROM（テーブル名）**ORDER BY** [ASC/DESC]

#### SUMなどの関数

SQLには、データを取り出す際に集計を行う、様々な関数が用意されています。この関数を用いると、列の合計値や最大値、レコードの件数などを求めることができます。

関数は次のようなものがあります。
- MAX (列名)でその列の最大値を求めます
- MIN (列名)でその列の最小値を求めます
- AVG （列名）でその列の平均値を求めます
- SUM （列名）でその列の合計を求めます
- COUNT （＊）で行数を求めます
- COUNT (列名)でその列の「値が入っている（空じゃない）」行数を求めます

[構文]　SELECT　**COUNT** * FROM (テーブル名)；

#### BETWEEN

BETWEENを和訳すると「〜の間に」となり、機能も、意味そのままの機能をしています。WHEREの抽出条件の中に、「A地点からB地点の間」のような条件として使用が出来るわけです。

[構文]　SELECT（列名1）FROM（テーブル名）**BETWEEN** 下限値　AND　上限値；

#### LIKE

LIKE句は、主に曖昧検索を行う場合に使用するクエリです。SQLでLIKE句を使用すると、対象のカラムに対して文字列検索をかけることが出来ます。検索条件にワイルドカードを用いることで、○○を含む文字列を検索するという処理が可能となります。

[構文]SELECT（列名）FROM（テーブル名） WHERE （列名）**LIKE** '検索文字'；

#### GROUP BY

GROUP BY句を使用することで、同じ値同士のデータをグループ化することができます。
グループ化とは、特定の列を指して、その中身が一致する項目をひとまとめにして扱うことを言います。

[構文]SELECT（列名） FROM（テーブル名）　**GROUP BY** (グループ化する列名)；

#### HAVING

グループ化をした際に、条件を付けて取り出すグループを絞り込むことが出来ます。
このような絞り込みを行う際に、HAVING句を利用します。

[構文]SELECT (列名1),(列名2)　FROM　(テーブル名) WHERE (条件) GROUP BY (列名1),(列名2) **HAVING** 絞り込み条件；

#### DISTINCT

DISTINCTとは、SELECT文の実行結果の重複レコードを1つにまとめるための便利な構文です。
例えば、従業員テーブルに「姓、名」の項目があるとして、同姓同名が複数行ある場合にDISTINCTを使うと1レコードになります。
重複を削除する際にGROUP BYを使用することもありますが、DISTINCTとGROUP BYには次の違いがあります。
- DISTINCTは重複削除を行った結果を出力したいときに使用
- GROUP BYは重複削除を行った結果に対して何等かの処理を加えたいときに使用
といった違いがあります。

[構文]SELECT **DISTINCT** (列名1),(列名2),... FROM (テーブル名)；

#### レコードの操作

INSERT文や、UPDATE文、DELETE文の命令文を利用することで、テーブルのデータを自由に追加、更新、削除することができます。
それぞれの動きについて紹介していきます。
- INSERT文は、テーブルにデータを追加するための命令文です
- UPDATE文は、テーブルに登録されているデータを更新するために利用する命令文です
- DELETE文は、指定した一行、もしくは複数行にわたるデータの削除を行うことが出来ます。

[構文]**INSERT** INTO (テーブル名) (列名1),(列名2),... VALUES (値1),(値2),...；
[構文]**UPDATE** (テーブル名) SET (列名1)=(値1) WHERE (条件)；
[構文]**DELETE** FROM (テーブル名) WHERE (列名1)=(値1)；

#### 比較演算子

比較演算子は値と値が等しいか等しくないか、大きいか小さいかなどの比較をするための記号や文字列のことを指します。
WHERE句の検索条件を使用してさまざまな条件式を書くことが出来ます。
比較演算子の例は次のものがあります。
- 「＝」・・・２つの値が等しい
- 「！＝または＜＞」・・・２つの値が等しくない
- 「＜」・・・左辺の値が右辺の値より小さい
- 「＞」・・・左辺の値が右辺の値より大きい
- 「＜＝」・・・左辺の値が右辺の値より小さいか等しい
- 「＞＝」・・・左辺の値が右辺の値より大きいか等しい
- 「IS NULL」・・・NULL値であることを判定
- 「IS NOT NULL」・・・NULL以外の値であることを判定
- 「IN」・・・いずれかの値と等しい
- 「NOT IN」・・・いずれも等しくない

以上のものに加えて、上で紹介したBETWEENやLIKEも比較演算子になります。

[構文]SELECT (列名) FROM (テーブル名) WHERE (値)**=**(条件)；

#### 論理演算子

論理演算子とは、値と値を比較して、真か偽の判別を行う文字列のことをいいます。
論理演算子は主に３つあるので紹介します。
- 「AND」・・・左右の式がTrueの時にTrueを返します 
- 「OR」・・・片方の式がTrueの時にTrueを返します
- 「NOT」・・・左右の式がFalseの時にTrueを返します

[構文]SELECT (列名) FROM (テーブル名) WHERE　A　**AND**　B；


# 最後に
今回は、基本情報技術者試験によく出題されるSQLの基礎的な構文をまとめたので紹介していきました。
また、今回あげたものの以外にも出題される可能性が高い、副問い合わせや条件結合などといったものもあるので、今後紹介していきたいと思います。