【SQL】SQLについての要点まとめ【基礎】

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 ba 以上 b 以下
INいずれかを含む
LIKE文字列の1部を含むパターン

% = 0文字以上の任意の文字列
_ = 任意の1文字
IS NULLNULL値のフィールド
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句

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次