0
1

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 3 years have passed since last update.

mySQLのコマンドあれこれ

Posted at

データベースとテーブルの違い

どちらもデータを入れる箱には違いないが、実際にデータを入れておく箱が「テーブル」に該当する。

イメージとしてデータベースが銀行、テーブルが銀行の中にある金庫にあたる。

銀行はお金をしまっておく以外にも、いろいろとやることがあり、実際にお金をしまっておくのは、銀行の中にある金庫である。

同様にデータベースは、データをしまっておく以外にも色々とやることがあり、実際にデータをしまっておくのは、データベースの中にあるテーブルである。

データベース確認・選択コマンド

#確認
mysql> show databases; 

#上記の確認画面からデータベースを選択
mysql> use データベース名;

テーブル一覧

mysql> show tables;

カラム確認

mysql> DESC テーブル名;

テーブル内に関するコマンド

SELECT

*を指定することですべてのカラムを取得する。nameを指定することでnameカラムだけを取得することもできる

mysql> SELECT * FROM users;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | キツネ    |
|    2 | タヌキ    |
|    3 | ネコ      |
|    4 | イヌ      |
|    5 | ヒツジ    |
+------+-----------+
5 rows in set (0.00 sec)

mysql> SELECT name FROM users;
+-----------+
| name      |
+-----------+
| キツネ    |
| タヌキ    |
| ネコ      |
| イヌ      |
| ヒツジ    |
+-----------+
5 rows in set (0.00 sec)

WHERE

SELECTコマンドで、条件に一致したレコードだけを取得したいときは、WHERE句を使う。

mysql> SELECT * FROM users WHERE name = 'ヒツジ';
+------+-----------+
| id   | name      |
+------+-----------+
|    5 | ヒツジ    |
+------+-----------+
1 row in set (0.00 sec)

GROUP BY

グループ化を行うために使用される。
GROUP BY [グループ化するカラム名]で絞れる。

mysql> SELECT team, COUNT(team) FROM user GROUP BY team;
+------------+-------------+
| team       | COUNT(team) |
+------------+-------------+
| チームA    |           3 |
| チームB    |           2 |
+------------+-------------+

注意点として、今回はteamでグループ化を行ったので、teamとそのカウントのみを、selectの表示対象とする必要がある。

例えばteamでグループ化しているのに、nameを表示しようとしたなんて場合はエラーとなる。

またグループ化した後に、さらにデータ検索をHAVINGで行うことができる。WHEREと同じ作用をしてくれるもの。
WHEREHAVINGの違いは、GROUP BYの影響の前後に条件が適応されるかの違いである。

WHEREGROUP BYの影響のに条件が適応され、
HAVINGGROUP BYの影響のに条件が適応される。

つまりWHEREは「グループ化される前に、特定ユーザーを省く」時などに使用することになり、逆に HAVINGはグループ化された後に反映されるため「人数の少ないグループを表示から省く」なんてことに利用できる。

mysql> SELECT team,COUNT(team) AS team_num FROM user GROUP BY team HAVING 3 <= team_num;
+------------+----------+
| team       | team_num |
+------------+----------+
| チームA    |        3 |
+------------+----------+

OEDER BY

昇順・降順に並び替える時に使う。
ORDER BY [並び替えるカラム名] [昇順・降順の指定];で使用できる。
ASCが昇順、DESCが降順となる。

mysql> SELECT * FROM user ORDER BY id DESC;
+------+--------------+
| id   | name         |
+------+--------------+
|    5 | ワタナベ     |
|    4 | タカハシ     |
|    3 | タナカ       |
|    2 | スズキ       |
|    1 | ヤマダ       |
+------+--------------+

WHEREも同時に指定できる。同時に使用する場合の注意点としては、先にWHEREを書く必要がある。例えば上記の命令に「idが3より大きい」という条件を付け加えら場合、以下のようになる。

mysql> SELECT id,name FROM user WHERE 3 < id  ORDER BY id DESC;
+------+--------------+
| id   | name         |
+------+--------------+
|    5 | ワタナベ     |
|    4 | タカハシ     |
+------+--------------+

GROUP BYとも同時に使用が可能。例えば、同一名ごとにグループ化して、その数を表示かつ、その数でソートをしたい場合は、以下のようになる。

mysql> SELECT name,count(name) as name_num FROM game_character GROUP BY name ORDER BY name_num DESC;

DISTINCT

SELECT文の実行結果の重複レコード(データ行)を1つにまとめるに使う。
SELECT DISTINCT カラム名 FROM テーブル名で使える。

+-----------+------------+
| last_name | first_name |
+-----------+------------+
| 鈴木       | 太郎       |
| 鈴木       | 花子       |
| 鈴木       |  次郎       |
+-----------+------------+

mysql> SELECT DISTINCT last_name from sample1_employees;
+-----------+
| last_name |
+-----------+
| 鈴木       |
+-----------+
1 row in set (0.00 sec)

DISTINCTして検索したレコード件数を数えるCOUNT関数を併用することができる。
SELECT COUNT(列名) FROM テーブル名で使用できる。

mysql> SELECT COUNT(DISTINCT last_name) from sample1_employees;
+---------------------------+
| COUNT(DISTINCT last_name) |
+---------------------------+
|                         1 |
+---------------------------+
1 row in set (0.00 sec)

日付検索

年月での抽出

SELECT * FROM テーブル名 WHERE DATE_FORMAT(カラム名, '%Y%m')=201901;

年での抽出

SELECT * FROM テーブル名 WHERE DATE_FORMAT(カラム名, '%Y')=2019;

月での抽出

SELECT * FROM テーブル名 WHERE DATE_FORMAT(カラム名, '%m')=7;

参考記事

「データベース」と「テーブル」の違い
【初心者でも簡単】MySQLコマンドの使い方!DBやテーブルをSQLで操作しよう!
SQLで並び替え!ORDER BYを基礎から応用まで学ぼう!
【SQL】GROUP BYで自在に集計!集計関数やHAVINGと合わせて使おう
【SQL入門】DISTINCTで重複行をまとめる方法をわかりやすく解説
[MySQL]月・年単位でデータを抽出する方法 (DATE_FORMAT)

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?