SQLとは
SQLは、データベース管理システム(RDBMS)でデータベースの定義や操作を行うためのデータベース言語です。
また、プログラミング言語と併用してデータベースにアクセスするためには利用されます。
SQLの標準規格は、ANSI(米国規格協会)やISO(国際標準化機構)といった標準化団体によって標準化されており、一度学習すればあらゆるデータベースでほぼ同じような操作が可能になります。
SQLの4大データ操作言語(SELECT,UPDATE,DELETE,INSERT)
SQLの操作言語は、主に4つの操作言語を利用します。
- SELECT
- UPDATE
- DELETE
- INSERT
SELECT
SELECTは、データの検索で利用します。
SQLの命令で、一番よく利用される文です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
/* 基本的な書き方 */ SELECT * FROM テーブル名 (WHERE 条件文) (ORDER BYなどの修飾) /* 例 */ SELECT * FROM 都道府県; /* 列を絞りたい場合の書き方 */ SELECT 列名1,列名2,・・・ FROM テーブル名 (WHERE 条件文) (ORDER BYなどの修飾) /* 例 */ SELECT 都道府県コード,都道府県名 FROM 都道府県; /* 列名を変更したい場合の書き方 */ SELECT 列名1 AS 列名1の別名,列名2 AS 列名2の別名,・・・ FROM テーブル名 (WHERE 条件文) (ORDER BYなどの修飾) /* 例 */ SELECT 都道府県コード AS コード,都道府県名 AS 名 FROM 都道府県; /* 条件を絞りたい場合の書き方 */ SELECT 列名1,列名2,・・・ FROM テーブル名 WHERE 条件文 (ORDER BYなどの修飾) /* 例 */ SELECT 都道府県コード,都道府県名 FROM 都道府県 WHERE 都道府県名 = '東京都'; |
SELECTの実行順序
①FROM
②JOIN
③WHERE
④GROUP BY
⑤HAVING
⑥SELECT
⑦ORDER BY
⑧LIMIT
SUM関数など集約関数が利用できるのは、⑤以降。
ASによる別名が利用できるのは、⑥以降。
UPDATE
UPDATEは、データの更新で利用します。
WHERE条件をつけないと、データが全件更新されますので、気をつけましょう。
1 2 3 4 5 6 7 8 9 |
/* 基本的な書き方 */ UPDATE テーブル名 SET 列名1=値1,列名2=値2,… (WHERE 条件文) /* 例 沖縄県の人口を更新する */ UPDATE 都道府県 SET 都道府県名='沖縄県' WHERE 都道府県コード=47; |
DELETE
DELETEは、データの削除で利用します。
WHERE条件をつけないと、データが全件削除されますので、気をつけましょう。
1 2 3 4 5 6 7 8 9 |
/* 基本的な書き方 */ DELETE FROM テーブル名 (WHERE 条件文) /* 例 都道府県コードが47のデータを削除する */ DELETE FROM 都道府県 WHERE 都道府県コード=47; |
INSERT
INSERTは、データの追加で利用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* 全列にデータを追加する場合 */ INSERT INTO テーブル名 VALUES (値1,値2,…) /* 例 都道府県が47のデータを追加する */ INSERT INTO 都道府県 VALUES (47,'沖縄県'); /* 列指定して追加する場合 */ INSERT INTO テーブル名 (列名1,列名2,…) VALUES (値1,値2,…) /* 例 都道府県が47のデータを列指定して追加する */ INSERT INTO 都道府県 (都道府県コード,都道府県名) VALUES (47,'沖縄県'); |
データの絞り込みはWHERE
対象データを絞り込みたい場合は、WHEREを利用します。
WHEREでは、さまざまな演算子を利用して検索します。
SELECT,UPDATE,DELETEで利用可能です。
演算子
比較演算子
比較演算子は、以下の演算子が利用可能です。
= | < | > |
<= | >= | <> |
IS NULL | LIKE | BETWEEN 開始値 AND 終了値 |
IN (値1,値2,…) | ANY (値1,値2,…) | ALL (値1,値2,…) |
論理演算子
論理演算子は、3つの演算子が利用可能です。
AND | OR | NOT |
論理演算子の優先順位は、NOT > AND > OR
NULLの判定
NULLの判定は、2通りの判定が利用可能です。
IS NULL | IS NOT NULL |
検索結果を加工する
検索した結果を、わかりやすく加工したいときに利用します。
例えば、検索結果を並べ替えたり、複数の検索結果を足し合わせたりすることができます。
DISTINCT
データの重複を削除するときに利用します。
1 2 3 4 5 |
SELECT DISTINCT * FROM テーブル名; SELECT DISTINCT 列名1,列名2,… FROM テーブル名; |
ORDER BY
指定した列を基準に並び替えるときに利用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/* 昇順(ASC) */ SELECT DISTINCT 列名1,列名2,… FROM テーブル名 ORDER BY 列名 ASC; /* 省略した場合はASCと同じ */ SELECT DISTINCT 列名1,列名2,… FROM テーブル名 ORDER BY 列名; /* 降順(DESC) */ SELECT DISTINCT 列名1,列名2,… FROM テーブル名 ORDER BY 列名 DESC; /* 複数の列を並び変え */ SELECT DISTINCT 列名1,列名2,… FROM テーブル名 ORDER BY 列名 DESC, 列名 ASC,…; |
UNION
テーブル名1とテーブル名2を足し合わせるときに利用します。
最後のテーブルの並び替えができます。
1 2 3 4 5 6 7 8 9 10 |
/* UNIONの使い方 */ SELECT * FROM テーブル名1 UNION SELECT * FROM テーブル名2; /* ORDER BYを含むUNIONの使い方 */ SELECT * FROM テーブル名1 UNION SELECT * FROM テーブル名2 ORDER BY 列名1,列名2 DESC; |
EXCEPT
テーブル名1からテーブル名2のデータを取り除きたいときに利用します。
1 2 3 4 |
/* EXCEPTの使い方 */ SELECT * FROM テーブル名1 EXCEPT SELECT * FROM テーブル名2; |
INTERSECT
テーブル名1とテーブル名2が重複するデータを取得したいときに利用します。
1 2 3 4 |
/* INTERSECTの使い方 */ SELECT * FROM テーブル名1 INTERSECT SELECT * FROM テーブル名2; |
OFFSET, FETCH(SQL Server)
先頭よりm+1番目からn数件のデータを取得したいときに利用します。
1 2 3 4 5 |
/* m行飛ばしてm+1行目からn行分を取得する */ SELECT * FROM テーブル名1 OFFSET m ROWS FETCH NEXT n ROWS ONLY; |
集計とグループ化
データベースでは、SELECTを利用しながらデータを集計することもできます。
集計で利用する関数
集計については、列名の値が数値であれば、以下の5つの関数を利用して集計できます。
COUNT | 選択したデータをカウントします。 |
SUM | 選択したデータの列名から合計を求めます。文字列や日付は不可です。 |
MAX | 選択したデータの列名のうち最大値を求めます。 |
MIN | 選択したデータの列名のうち、最小値を求めます。 |
AVG | 選択したデータの列名の平均を求めます。文字列や日付は不可です。 |
1 2 3 4 5 6 7 8 9 10 11 |
SELECT COUNT(*) AS 行数 FROM テーブル (WHERE 条件文); SELECT SUM(列名1) AS 列名1の合計 MAX(列名1) AS 列名1の最大 MIN(列名1) AS 列名1の最小 AVG(列名1) AS 列名1の平均 FROM テーブル (WHERE 条件文); |
集計のグループ化
集計する際、列名を基準としてグループ化して集計することもできます。
グループ化して集計するには、GROUP BYを利用します。
1 2 3 4 5 6 7 8 9 |
SELECT 集計関数 FROM テーブル名 (WHERE 条件文) GROUP BY グループ化対象列名; /* 例.都道府県別に人口を集計する */ SELECT 都道府県名,SUM(人口) FROM 都道府県 GROUP BY 都道府県コード; |
集計後の絞り込み(HAVING)
集計関数を利用して集計が終わったあとに絞り込みを行うこともできます。
絞り込みは、HAVINGを利用します。
1 2 3 4 5 6 7 8 9 10 11 |
SELECT 集計関数 FROM テーブル名 (WHERE 条件文) GROUP BY グループ化対象列名 HAVING 集計結果の絞り込み; /* 例.人口が200万人以上の都道府県を昇順で抽出する */ SELECT 都道府県名,SUM(人口) FROM 都道府県 GROUP BY 都道府県コード HAVING SUM(人口) >= 2000000; |