0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【基礎】SQLについて

Last updated at Posted at 2019-10-05

データベースからデータを取得するには、「データを取得してください」といった、データベースに送る命令(クエリ)が必要。
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;
/* 趣味がギャンブルであるレコードを指定し、年齢が大きい方から小さい方へ並べ替える。
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?