SQL入門! SELECT 編


SQLの基本のキ

  • SELECT 項目名1,項目名2,… FROM テーブル名 WHERE 条件;
  • INSERT INTO テーブル名 VALUES(値1,値2…);
  • UPDATE テーブル名 SET 項目名 = 値 WHERE 条件;
  • DELETE FROM テーブル名 WHERE 条件;

※文の終わりに「;」を付けるのをお忘れなく!


環境
 Windows 10
 MySQL : version(5.7.28)
使用アプリ
 コマンドプロンプト(Windowsマーク押して「cmd」って打ったら出てくるやつ)


MySQLサーバーに接続

mysql -u root -p

上記のコマンドを入力すると、パスワードを求められるのでパスワードを入れる。(MySQLインストール時に設定したパスワードを使います)

接続成功

MySQLの終了

quit;

上記のコマンドを入力し、Enterを押すだけ

「Bye」と表示され、そのあとの行で通常のコマンド入力待機位置になっていれば成功です。

データベースの操作

MySQLが無料で公開しているデータを拝借して、テーブルの操作をしていきたいと思います。

MySQLが無料公開しているデータのDL方法は下記の記事を参考にしました。

【SQL】MySQL公式サンプルでデータベースを使う

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| world              |
+--------------------+
9 rows in set (0.00 sec)

データベース名 : world

mysql> SHOW TABLES;
+-----------------+
| Tables_in_world |
+-----------------+
| city            |
| country         |
| countrylanguage |
+-----------------+
3 rows in set (0.00 sec)

テーブル名 : city

mysql> SELECT * FROM city LIMIT 10;
+----+----------------+-------------+---------------+------------+
| ID | Name           | CountryCode | District      | Population |
+----+----------------+-------------+---------------+------------+
|  1 | Kabul          | AFG         | Kabol         |    1780000 |
|  2 | Qandahar       | AFG         | Qandahar      |     237500 |
|  3 | Herat          | AFG         | Herat         |     186800 |
|  4 | Mazar-e-Sharif | AFG         | Balkh         |     127800 |
|  5 | Amsterdam      | NLD         | Noord-Holland |     731200 |
|  6 | Rotterdam      | NLD         | Zuid-Holland  |     593321 |
|  7 | Haag           | NLD         | Zuid-Holland  |     440900 |
|  8 | Utrecht        | NLD         | Utrecht       |     234323 |
|  9 | Eindhoven      | NLD         | Noord-Brabant |     201843 |
| 10 | Tilburg        | NLD         | Noord-Brabant |     193238 |
+----+----------------+-------------+---------------+------------+
10 rows in set (0.00 sec)

「city」テーブルを使ってSELECT文を実行していきたいと思います。
※数が多いので10個まで表示するというオプションを付けています

SELECT

SELECT カラム名 FROM テーブル名;

SELECT ⇒ 「どのカラムのデータを?」
FROM ⇒ 「どのテーブルの?」

実行例 :「city」テーブルの「Name」カラムのデータを10件抽出

※データ数が多いので「10個だけデータを抽出する」というオプションを付けています

複数のカラムデータを取得する

SELECT カラム名, カラム名 FROM テーブル名;
複数のカラムデータを取得するときはカラム名を「,」で区切ります。

実行例 :「city」テーブルの「Name」と「Population」カラムのデータを10件抽出

※データ数が多いので「10個だけデータを抽出する」というオプションを付けています

すべてのカラムデータを取得する

SELECT * FROM テーブル名;
全カラムデータを取得するときは「*」を使います。

実行例 : 「city」テーブルの全カラムデータを10件抽出

※データ数が多いので「10個だけデータを抽出する」というオプションを付けています

WHERE句

SELECT * FROM テーブル名 WHERE 条件式;
WHERE 〇〇 = △△ ⇒ WHEREのあとに「=」を付けて、「〇〇が△△である」という条件にマッチしたデータを取得することができます。

実行例 :「city」テーブルの「ID」カラムの「IDが33」のデータを抽出

※ *△△を指定する際の注意点として、数値データはそのまま数字を指定し、テキストデータや日付データの場合は「''」もしくは「""」で指定部分を囲まなくてはいけない。

主なデータ型

  • テキストデータ ⇒ WHERE 〇〇 = "名前";
  • 整数値 ⇒ WHERE 〇〇 = 11111
  • 日付データ ⇒ WHERE 〇〇 = "2020-01-01"

比較演算子

SELECT * FROM テーブル名 WHERE 条件式;
WHERE 〇〇 >= △△ ⇒ WHEREのあとに「>=」を付けて、「〇〇が△△以上であるもの」という条件に当てはまったデータを取得することができる。

実行例 :「city」テーブルの「Population」カラムのデータで「25万人以上」のデータを10件抽出

比較演算子の種類

  • a = b ⇒ a と b が等しい
  • a < b ⇒ a が b より小さい
  • a <= b ⇒ a が b より小さいまたは、a が b と等しい
  • a > b ⇒ a が b より大きい
  • a >= b ⇒ a が b より小さいまたは、a が b と等しい
  • a <> b ⇒ a が b と等しくない(!=も一緒の意味)

LIKE演算子

SELECT カラム名 FROM テーブル名 WHERE 〇〇 LIKE 文字列;
LIKE 文字列 ⇒ 「~のような(~を含む)」

実行例 : 「city」テーブルの「Name」カラムで"Tir"が含まれているデータを抽出

LIKE演算子を使う際に覚えておく必要があるもの

  • ワイルドカード「%

    "%東京%" ⇒「東京」の前後のワイルドカードにより、「東京」を含むデータが取得できる(テキストデータや日付データは「%」の外を「"」または「'」で囲む)

    "東京%" ⇒ 前方一致。「東京」で始まるデータを取得できる

    "%東京" ⇒ 後方一致。「東京」で終わるデータを取得できる

  • BINARY

    大文字小文字を区別したい場合はLIKE演算子のあとに付ける「BINARY」を付ける

  • 任意の一文字を表す「_
    実行例 : 「Name」カラムで「〇〇c(任意の二文字がcの前に入る都市名)」で始まる名前のデータを5件抽出

  • エスケープ「\

文中に%_が入ったデータを抜き出したい場合は\%_の前に付けてあげる
例 :

SELECT * FROM テーブル名 WHERE カラム名 LIKE "%\%%";
SELECT * FROM テーブル名 WHERE カラム名 LIKE "%\_%";

NOT演算子

SELECT * FROM テーブル名 WHERE NOT 条件;
WHERE NOT 条件 ⇒ 「条件を満たさないデータ」
WHERE NOT カラム名 LIKE "%△△%" ⇒ 「カラム名の△△と一致しないデータ」

実行例 :「city」テーブルの「Population」カラムで「800万人」より少なくないデータを抽出

IS NULL

SELECT * FROM テーブル名 WHERE 〇〇 IS NULL;
IS NULL ⇒ 「~がNULLである」
WHERE 〇〇 IS NULL ⇒ 指定した〇〇(カラム)のデータが「NULL」であるものを取得する

IS NOT NULL

SELECT * FROM テーブル名 WHERE 〇〇 IS NOT NULL;
IS NOT NULL ⇒ 「~がNULLではない」
WHERE 〇〇 IS NOT NULL ⇒ 指定した〇〇(カラム)のデータが「NULL」ではないものを取得する

「NULL」に関連するデータを取得する際に、「=」は使えないので注意してください。

AND演算子

SELECT * FROM テーブル名 WHERE 条件1 AND 条件2;
WHERE 条件1 AND 条件2 ⇒ 「条件1と条件2、どちらの条件も満たすデータを取得する」

実行例 :「city」テーブルの「CountyrCode」が"USA"かつ、「Population」が"9万人以下"のデータを抽出

BETWEEN

「〇〇以上〇〇以下」という条件の場合のみ、BETWEENを使って書き換えることができる
実行例 : 「Population」カラムで10000以上30000以下のデータだけを5件抽出

実行例 : 「Population」カラムで10000以上30000以下ではないデータを5件抽出

OR演算子

SELECT * FROM テーブル名 WHERE 条件1 OR 条件2;
WHERE 条件1 OR 条件2 ⇒ 「条件1と条件2、どちらかの条件を満たすデータを取得する」

実行例 :「city」テーブルの「CountyrCode」が"AUS"もしくは、「Population」が"100万人以上"のデータを抽出

IN

=で判定する条件をORで繋いだ場合、INを使って書き換えるできる
実行例 : 「Population」カラムで237500もしくは127800であるデータを抽出

実行例 : 「Population」カラムで237500もしくは127800ではないデータを5件抽出

ORDER BY

SELECT * FROM テーブル名 ORDER BY 並べたいカラム名 並べ方;
SELECT * FROM テーブル名 WHERE 条件 ORDER BY 並べたいカラム名 並べ方;
ORDER BY ⇒ 「~順に並べる」
並べ方
「ASC (昇順) 」⇒ 1, 2, 3...99 (小さい数から大きい数に向かって並べる)
「DESC (降順) 」⇒ 99...3, 2, 1 (大きい数から小さい数に向かって並べる)

実行例 :「city」テーブルの「CountryCode」が"USA"かつ、「Population」が"100万以上"のデータを「ASC(昇順)」に並べて抽出

LIMIT

SELECT * FROM テーブル名 LIMIT 数字;
SELECT * FROM テーブル名 WHERE 条件 LIMIT 数字;
LIMIT データの件数; ⇒ 「取得するデータの件数を指定する」

実行例 :「city」テーブルの全カラムデータを10件抽出

ORDER BY と LIMIT の組み合わせ

SELECT * FROM テーブル名 ORDER BY 並べたいカラム名 並べ方 LIMIT 数字;

実行例 :「city」テーブルの「ID」カラムを「DESC(降順)」に並べて10件抽出

WHERE, LIKE, ORDER BY, LIMITを使った組み合わせ順

SELECT * FROM テーブル名 WHERE カラム名 LIKE "◯%" ORDER BY 並べたいカラム名 並べ方 LIMIT 件数;

OFFSET

SELECT * FROM テーブル名 ORDER BY 並べたいカラム名 並べ方 LIMIT 数字 OFFSET 数字(先頭から除外したい件数);
実行例 :「city」テーブルの「ID」カラムを「DESC(降順)」に並べて、先頭の2件を除外した10件を抽出

終わりに

ここの実行例で書いたクエリですが、もっと簡潔に書けたりするのかもしれません。
そこら辺も、これから勉強を続けていけば見えてくるかも知れないので楽しみです。
まだまだSQLの入り口的な内容かと思いますが、SQLの奥の深さとデータを抽出する楽しさが知れたような気がします。
引き続き、基礎をやっていきたいと思います。

※9/18 加筆

  • BINARY
  • _
  • BETWEEN
  • IN
  • \
  • OFFSET

SQL(MySQL)関連の投稿
1. SQL入門! CREATE 編(データベース)
2. SQL入門! テーブル作成・削除・変更 編