下記の記事でSQL文の基礎について投稿しました。
(https://qiita.com/yyy752/items/78896d2af72edf318c87)
SQL文にWHERE 条件式
を加えることで、条件を絞ってデータを取得できるのですが、他にも複雑なデータを取得する方法があるので、今回はそれを紹介します。
複雑なデータを取得できるSQL文
文法 | 意味 |
---|---|
AND, OR | 取得するデータの条件同士をつなげる |
BETWEEN | 指定した値の範囲と比較する |
IN | 指定したリストの値が含まれるか比較する |
LIKE | パターンに合致するか比較する |
LIMIT | 取得するデータの行数の上限を設定する |
GROUP BY | データをグループ化する |
HAVING | グループ化したデータに対して取得する条件を設定する |
今回は例文は除いて基本文のみ紹介します。
AND,OR 取得するデータの条件同士をつなげる
AND:かつ
OR:もしくは
という意味です。
SELECT カラム名 FROM データベース名.テーブル名 WHERE 条件式① ANDもしくはOR 条件式②
BETWEEN 指定した値の範囲と比較する
指定の範囲に含まれるデータを抽出
したい時に使用します。
SELECT カラム名①,② FROM DB名.テーブル名 WHERE カラム名 BETWEEN 最小値 AND 最大値
最初に取得したいカラム名
を指定して、WHEREから条件を絞りたいカラム名と範囲
を指定します。
IN 指定したリストの値が含まれるか比較する
指定したリストに含まれるデータを抽出
したい時に使用します。
SELECT カラム名 FROM DB名.テーブル名 WHERE カラム名 IN ('値','値','値')
最初に取得したいカラム名を指定して、WHEREから条件を絞りたいカラム名と取得したい値を指定します。
また、NOT IN
にすることで指定した値に該当しないデータ
を取得できます。
LIKE パターンに合致するか比較する
特定の文字列パターンに合致するデータを抽出したい
時に使用します。
SELECT カラム名① FROM DB名.テーブル名 WHERE カラム名 LIKE 'パターン%もしくは_'
%
:任意の0文字以上の文字列
→A%Bの場合、AB、ACB、ADDB、ACHDBのように'Aで始まり、Bで終わるデータ'を取得する。
_
:任意の1文字
→A_Bの場合、ASB、ADB、AFBのように'AとBの間に一文字のみ入るデータ'が取得される。
LIMIT 取得するデータの行数の上限を設定する
抽出できるレコード数の上限を設定
したい時に使用します。
SELECT カラム名 FROM DB名.テーブル名 LIMIT 最大件数
GROUP BY データをグループ化する
特定のカラムの値を基準にグループ化してデータを抽出
したい時に使用します。
SELECT カラム名 FROM DB名.テーブル名 GROUP BY カラム名,カラム名
SELECT文を使ってグループ単位のデータを取得
するとき、SQLに用意されている関数
を使用して、集計などの計算結果
も抽出することができます。
SELECT name, sum(sales) FROM shop.users group by name;
例えば、これでname(従業員)ごとのsales(売上)の合計値
を抽出できます。
HAVING グループ化したデータに対して取得する条件を設定する
グループ化したデータに対して更に条件を指定してデータを絞り込みたい
時に使用します。
SELECT カラム名 FROM DB名.テーブル名 GROUP BY カラム名 HAVING 条件式
SELECT カラム名 FROM DB名.テーブル名 WHERE 条件式① GROUP BY カラム名 HAVING 条件式
HAVINGの後に記述する条件式は、WHEREの場合と同様に記述可能
。
SELECT name, sum(sales) FROM shop.users group by name HAVING sum(sales) >= 2000;
例えば、これでname(従業員)ごとのsales(売上)の合計が2000以上
のデータを取得できます。