データベースからデータを取得するには、「データを取得してください」といった、データベースに送る命令(クエリ)が必要。
SQLとはクエリを書くための言語。
##テーブル(説明用)
イメージしやすいように、例として以下のテーブルを作成してあるものとします。
(テーブル名:users)
id | name | age | hoby | create_at |
---|---|---|---|---|
0 | yamamoto | 40 | "剣道" | "2018-04-23" |
1 | kawamura | 33 | "スキー" | "2018-05-09" |
2 | tani | 36 | "卓球" | "2018-07-11" |
3 | okajima | 38 | "ギャンブル" | "2018-07-15" |
4 | ogura | 37 | "2018-09-09" | |
5 | uetani | 39 | "野球" | "2019-10-05" |
##SELECT
SELECT = データを取得するために用いる。どのカラムからデータを取得するか決める。
カラム名が「name」の場合↓↓
SELECT name
複数のカラムからデータを取得する場合はカンマ(,)で区切る↓↓
SELECT name,age,birthday
全てのカラムを取得する場合はアスタリスク(*)をつける↓↓
SELECT *
##FROM
FROM = SELECTで選んだカラムがどのテーブルのカラムか指定する。
テーブル名が「users」の場合↓↓
FROM users
クエリの終了をセミコロン(;)で次のように示す。
SELECT *
FROM users;
##【特定のデータを取得する】
##WHERE
WHERE = どこのレコード(横の列)を取得するか。
「age」カラム(縦列)が「33」であるレコード(横列)を取得する場合↓↓
WHERE age = 33;
/* ちなみに、データ型がテキストの場合はダブルorシングルクォーテーションで囲む必要がある。 */
WHERE hoby = "映画鑑賞";
/* データ型が日付データの場合も同様。 */
WHERE users_at = "2019-10-05";
##比較演算子を使用する
SELECT *
FROM users
/* 39歳以上の人のデータを取得する。 */
WHERE age >= 39;
下のように日付データにも使用できる。
/* 2018-07-11以前のデータを取得 */
WHERE create_at <= "2018-07-11";
##LIKE演算子を使用する
○○を含むデータを取得する。
基本形↓↓
SELECT *
FROM users
/* どこのカラムの、〇〇を含むデータを取得する。 */
WHERE カラム LIKE 文字列;
###(補足)ワイルドカードについて
引用元:Wikipedia
コンピュータなどの関連において、ワイルドカードは、検索などグロブの際に指定するパターンに使用する特殊文字の種類で、どんな対象文字、ないし文字列にもマッチするもののことである。カードゲームのワイルドカードに由来する呼称。
SQLの WHERE 句における LIKE predicate 中のパターンでは、長さ0文字以上の任意の文字列が「%」、任意の一文字が「_」である。
正規表現におけるクリーネ閉包とは似て非なるものであり混同してはいけない。
LIKE演算子では、%を使用するとどんな文字列にも一致するようになる。
LIKE演算子の具体例↓↓
SELECT *
FROM users
/* hobyで「球」を含むデータを取得する。 */
WHERE hoby LIKE "%球%";
##LIKE演算子の「前方一致」と「後方一致」
前方
一致の例↓↓
SELECT *
FROM users
/* 「球」が前にある文字列に一致する。「球技」は取得。「卓球」は取得しない。 */
WHERE hoby LIKE "球%";
後方
一致の例↓↓
SELECT *
FROM users
/* 「球」が後にある文字列に一致する。「卓球」は取得。「球技」は取得しない。 */
WHERE hoby LIKE "%球";
##NOT演算子
否定を意味するNOT
でデータを取得する。
SELECT *
FROM users
/* 「球」を含まないデータを取得する。 */
WHERE NOT hoby LIKE "%球%";
SELECT *
FROM users
/* 「ギャンブル」ではないデータを取得する。 */
WHERE NOT hoby = "ギャンブル";
/* ワイルドカードは使用していないことに注目。 */
##空データの取り扱い。「IS NULL」 「IS NOT NULL」
###「IS NULL」で空データを指定して取得
する。
SELECT *
FROM users
/* 指定したhobyカラムがNULLであるデータを取得。 */
WHERE hoby IS NULL ;
/* この場合、id:4のデータを取得。 */
###「IS NOT NULL」空データを除外して取得
する。
SELECT *
FROM users
/* 指定したhobyカラムがNULLではないデータを取得。 */
WHERE hoby IS NOT NULL ;
/* この場合、id:4以外のデータを取得。 */
##AND演算子
複数の条件を満たすデータを指定する。
SELECT *
FROM users
WHERE name = "okajima"
AND hoby = "ギャンブル";
/* 名前がokajimaで、趣味がギャンブルのデータを取得。
##OR演算子
複数の条件を取り扱う意味では、AND演算子と同じ。
「〇〇または〇〇」の条件を満たすデータを指定する。
SELECT *
FROM users
WHERE name = "okajima"
OR hoby = "ギャンブル";
/* 名前がokajimaもしくは、趣味がギャンブルのデータを取得。
##ORDER BY
データを並び替える。
並び替える順番の決め方には、「ASC」と「DESC」がある。
###ASC 、 DESC
ASCは「昇順」・・・小 → → → 大
DESCは「降順」・・・大 → → → 小
SELECT *
FROM users
ORDER BY age ASC;
/* 年齢が小さい方から大きい方へ並べ替える。
###WHEREとの組み合わせ
SELECT *
FROM users
WHERE hoby = "ギャンブル"
ORDER BY age DESC;
/* 趣味がギャンブルであるレコードを指定し、年齢が大きい方から小さい方へ並べ替える。