SQLについて自分用の備忘録として残しておくことにします。(適宜更新予定)
基本構文
基本構文についてまとめた表
データベースを操作する | ・SELECT ・UPDATE ・DELETE ・INSERT |
データベースを定義する | ・CREATE ・DROP ・ALTER |
データベースを制御する | ・GRANT ・REVOKE ・COMMIT ・ROLLBACK |
よく使うデータベース操作の構文は下記に詳しく記載
SELECT
SELECT文は、テーブルからデータを抽出するときに使う。とあるテーブル(データの集合体)からどのような条件でデータを抽出してほしいのかを表した命令文のこと。
SELECT 列名
FROM (テーブル名);
FROM句
操作対象のテーブルなどを指定する句。SELECT文の中で用いる。
WHERE句
WHERE句とは、テーブルデータの検索条件を指定するためのSQL構文。
WHERE句を使う目的は、データの検索対象をしぼりこむためにSELECT文と組み合わせたり、データの更新対象を指定するためにUPDATE文と組み合わせて使う。
演算子
データの検索条件を指定するために使う演算子の一覧
演算子 | 意味 | |
---|---|---|
= | 等しい | |
> | 大きい | |
>= | 以上 | |
< | 小さい | |
<= | 以下 | |
!= | 等しくない | |
AND | 左辺 かつ 右辺 | |
OR | 左辺 または 右辺 | |
BETWEEN a AND b | a 以上 b 以下 | |
IN | いずれかを含む | |
LIKE | 文字列の1部を含むパターン ※ % = 0文字以上の任意の文字列 _ = 任意の1文字 | |
IS NULL | NULL値のフィールド | |
IS NOT NULL | 値のあるフィールド |
ORDER BY
SELECT文を使用してレコードを取得する際に、ある値を基に並び替えてデータを表示させたい場合にはORDER BYを使用する。
RDER BYの後ろに並び替えの基準とするカラム名を指定し、最後に並び替えの順序を昇順(ASC
)または降順(DESC
)で指定。
SELECT カラム名 FROM テーブル名 ORDER BY 基準にしたいカラム名 [ASC または DESC];
GROUP BY句
任意のカラムの値に基づいてレコードをグループ化するクエリ。
集計関数(SUMやCOUNTなど)と併用することで「クラスごとの人数を調べる」というように、グループごとの合計値やレコード数を求めることができる。
SELECT 列名 FROM テーブル名 GROUP BY グループ化を行う列名;
対象の「列名」と「グループ化を行う列名」が同じ列(カラム)である必要がある。GROUP BY句で指定カラムを「集約キー」や「グループ化列」という。
NULLも1つのグループとして扱われる。指定したカラムに「NULL」値が含まれている場合、「NULL値グループ」といったように、NULLも1つのグループとして集計される。
集計関数
その項目の合計値や平均値を求めたり、あるいはCOUNT関数のようにデータ件数を取得するなど、その名の通り集計を行う関数のこと。
集積関数 | 用途 |
COUNT | 項目のデータ件数を取得する |
SUM | 項目のデータ合計を取得する |
AVG | 項目のデータ平均値を取得する |
MAX | 項目のデータ最大値を取得する |
MIN | 項目のデータ最小値を取得する |
LIMIT
SELECT文を使用してレコードを取得する際に、特定の行数分のみレコードを取得したい場合があります。この場合はLIMITを使用することで、指定した行数分のレコードを取得することができる。
SELECT カラム名 FROM テーブル名 LIMIT 取得したい行数;
UPDATE
UPDATE文は、データベース内の既存のデータを変更する時に使う。データを指定した値で更新するSQL文。
UPDATE (テーブル名)
SET (列名)=(セットする値)
WHERE (更新する条件);
where以下の部分は、省略できる。省略した場合は、すべての行に対して同じ値がセットされることに注意!!
DELETE
delete文は指定された表を参照し、条件に合致した行を削除するSQL文。該当する行が複数ある場合は、すべて削除されます。また条件を指定しない場合は、表に格納されたすべてのデータが削除される。
delete文の実行により、データ量を減らすことが可能。なお全件削除しても、表の枠組みは残る。表そのものの削除は、drop table文で行なう。
表の全てを削除する場合は以下
DELETE FROM (テーブル名);
条件に合った行を削除する場合は以下
DELETE FROM (テーブル名) WHERE (削除する条件);
INSERT
insert文は、ひとまとまりのデータを持つ行を新たに挿入するSQL文。他のデータから必要な部分を抽出して挿入できる。
INSERT INTO (テーブル名) (カラム名) VALUES (挿入する値);
AS句
カラムやテーブルに別名をつけられる句。
SELECT カラム名 AS 別名 FROM テーブル名;
SELECTで別名を設定し、WHERE句で条件を指定したい場合もあるかと思いうが、WHERE句内では別名は使用できない。
WHERE句では別名の使用ができないが、ORDER BY句は使用できる。
テーブル結合
結合は1つのクエリで複数テーブルのデータを扱いたいときに利用する。
テーブル結合の結合方法は5種類ある。
- 内部結合(INNER JOIN)
- クロス結合(ROSS JOIN)
- 左外部結合(LEFT OUTER JOIN)
- 右外部結合(RIGHT OUTER JOIN)
- 完全外部結合(FULL OUTER JOIN)
それぞれの詳しい説明は下記に・・・
内部結合 = INNER JOIN(JOIN)
内部結合(INNER JOIN)は、joinと短縮して使用することも可能。
INNER JOINでは、条件を指定し、結合するテーブルとテーブルの二つに一致するデータを抽出することができる。
ELECT
テーブル1.列名, テーブル2.列名
FROM
テーブル1
INNER JOIN
テーブル2
ON
テーブル1.列名 = テーブル2.列名 -- 結合条件
クロス結合 = CROSS JOIN
CROSS JOINでは、全ての組み合わせを作成してデータを抽出することができる。
SELECT
テーブル1.列名, テーブル2.列名
FROM
テーブル1
CROSS JOIN
テーブル2
外部結合 = OUTER JOIN
外部結合は、一方のテーブルにマッチするデータが他方のテーブルにない場合でも、そのデータを結果セットに含める方法。
外部結合には「左外部結合(LEFT OUTER JOIN)」、「右外部結合(RIGHT OUTER JOIN)」、「完全外部結合(FULL OUTER JOIN)」の3種類がある。
左外部結合 = LEFT OUTER JOIN
LEFT JOIN とも略される。
左外部結合は、指定したテーブル(左側のテーブル)の全ての行を含み、共通のキーに基づいて結合条件を満たす行がある場合にはそれを結合。
一致しない場合は右側のテーブルの該当箇所にはNULLが入る。
左外部結合は左側のテーブルのすべての情報を維持しながら、右側のテーブルのデータを結合する際に使用されます。
SELECT 列名
FROM テーブル1
LEFT OUTER JOIN テーブル2
ON テーブル1.共通のカラム = テーブル2.共通のカラム;
右外部結合 = RIGHT OUTER JOIN
RIGHT JOIN とも略される。
右外部結合は指定したテーブル(右側のテーブル)の全ての行を含み、共通のキーに基づいて結合条件を満たす行がある場合にはそれを結合。
一致しない場合は左側のテーブルの該当箇所にはNULLが入る。
右外部結合は右側のテーブルのすべての情報を維持しながら、左側のテーブルのデータを結合する際に使用されます。
SELECT 列名
FROM テーブル1
RIGHT OUTER JOIN テーブル2
ON テーブル1.共通のカラム = テーブル2.共通のカラム;
完全外部結合 = FULL OUTER JOIN
完全外部結合は、指定した2つのテーブルの全ての行を含み、共通のキーに基づいて結合条件を満たす行がある場合にはそれを結合。
一致しない場合はどちらかのテーブルの該当箇所にはNULLが入る。
完全外部結合は両方のテーブルのすべての情報を維持しながら、データの関連性を確認する際に使用される。
SELECT 列名
FROM テーブル1
FULL OUTER JOIN テーブル2
ON テーブル1.共通のカラム = テーブル2.共通のカラム;
サブクエリ
SQLの中に書くSQLのこと。「副問合せ」ともいう。
SQL文の中に入れ子になってSQL文が書かれていること。
サブクエリが入っているクエリはまずサブクエリから実行され、実行結果を一つのテーブルと見なしながらメインクエリが実行される。
サブクエリは主にFROM句、WHERE句、SELECT句で記述する場合が多い。
カラムの別名に括弧を使いたい場合、MySQLでは使用可能。
参考:SQL処理の流れ(SELECTの場合)
SQLのSELECTは次の順で処理されます。
FROM・WHERE句の中のサブクエリ
FROM・WHERE句(WHERE句の中の相関サブクエリ)
GROUP BY句
HAVING句の中のサブクエリ
HAVING句(HAVING句の中の相関サブクエリ)
SELECT句
ORDER BY句
コメント