読者です 読者をやめる 読者になる 読者になる

小さなエンドウ豆

まだまだいろいろ勉強中

MySQL 練習

MySQL

SQL文について練習しようと思って書きました。
自分でも忘れることが多いので記することで忘却を防ぎたい…

インストールとその他設定

Ubuntuの場合で勝手に話を進めます。

$ sudo apt-get install mysql-server  
# ここでrootのパスワードを設定するように言われるので適当なものを設定する。  

次に/etc/mysql/my.cnfに以下を追加する。

[mysqld]
character_set_server=utf8                                            
skip-character-set-client-handshake
default-storage-engine=INNODB 

次にmysqlを走らせます。

$ sudo /etc/init.d/mysql start

startの部分をstop、restartとすることもできる。それぞれサービスの終了、サービスの再起動という意味合いになる。

次に以下を入力しmysqlを起動させます。

$ mysql -u root -p

CRUD(クラット?)

CRUDとは

以下の頭文字をとったものであります。

  • Create
  • Read
  • Update
  • Delete

これらは情報の操作に欠かせない昨日であると定義されているらしい。
MySQLにもCRUD操作ができる機能を揃えている。

次にCRUD操作についてそれぞれをどのように行うか説明します。

Create操作

DB作成

mysql> create database Ebichu_DB; 

Table作成

mysql> create table Ebichu_DB.Ebichu_TB(
    -> name varchar(10),
    -> color varchar(10),
    -> number int(2)
    -> );

データの挿入(insert)

mysql> insert into Ebichu_DB.Ebichu_TB
    -> (name, color, number)
    -> values
    -> ("Mayama", "purple", 3);

Update操作

mysql> update Ebichu_DB.Ebichu_TB
    -> set name="rika";

Read操作

mysql> select *
    -> from Ebichu_DB.Ebichu_TB
    -> ;
+------+--------+--------+
| name | color  | number |
+------+--------+--------+
| rika | purple |      3 |
+------+--------+--------+
1 row in set (0.00 sec)

Delete操作

条件にあうレコードの削除

mysql> delete
    -> from Ebichu_DB.Ebichu_TB
    -> where number=3;

テーブルの削除

mysql> delete
    -> from Ebichu_DB.Ebichu_TB

DBの削除

drop database Ebichu_DB;

他の操作

DB一覧を表示

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Ebichu_DB          |
| SampleDB           |
| mysql              |
| performance_schema |
+--------------------+

Where文について

次の操作は以下のテーブルに対して行うものとする

+---------+------------+--------+
| name    | color      | number |
+---------+------------+--------+
| Mayama  | purple     |      3 |
| Ayaka   | green      |      5 |
| aiai    | gy         |      6 |
| Mirei   | pink       |      7 |
| Rinanan | blue       |      9 |
| Hinata  | orange     |     10 |
| po-chan | yellow     |     11 |
| rittan  | light blue |     12 |
+---------+------------+--------+

null判定

mysql> select name
    -> from Ebichu_DB.Ebichu_TB
    -> where name is not null;
+---------+
| name    |
+---------+
| Mayama  |
| Ayaka   |
| aiai    |
| Mirei   |
| Rinanan |
| Hinata  |
| po-chan |
| rittan  |
+---------+

# is null ならばnullのものを表示する

like演算子

mysql> select name
    -> from Ebichu_DB.Ebichu_TB
    -> where name like '%ai%';
+------+
| name |
+------+
| aiai |
+------+

%が任意の文字列となる

between

mysql> select *
    -> from Ebichu_DB.Ebichu_TB
    -> where number between 6 and 10;
+---------+--------+--------+
| name    | color  | number |
+---------+--------+--------+
| aiai    | gy     |      6 |
| Mirei   | pink   |      7 |
| Rinanan | blue   |      9 |
| Hinata  | orange |     10 |
+---------+--------+--------+

where number>=6 and number<=10と同じ

IN / NOT IN

mysql> select *
    -> from Ebichu_DB.Ebichu_TB
    -> where number in (5, 6, 9, 10)
    -> ;
+---------+--------+--------+
| name    | color  | number |
+---------+--------+--------+
| Ayaka   | green  |      5 |
| aiai    | gy     |      6 |
| Rinanan | blue   |      9 |
| Hinata  | orange |     10 |
+---------+--------+--------+

order byについて

mysql> select *
    -> from Ebichu_DB.Ebichu_TB
    -> order by number
    -> limit 3
    -> ;
+--------+--------+--------+
| name   | color  | number |
+--------+--------+--------+
| Mayama | purple |      3 |
| Ayaka  | green  |      5 |
| aiai   | gy     |      6 |
+--------+--------+--------+

mysql> select * from Ebichu_DB.Ebichu_TB order by name limit 3;
+--------+--------+--------+
| name   | color  | number |
+--------+--------+--------+
| aiai   | gy     |      6 |
| Ayaka  | green  |      5 |
| Hinata | orange |     10 |
+--------+--------+--------+

numberで指定した場合は数字の大小でソートするが、nameで指定した場合はutf-8の順番にしたがってソートするらしいです。
ちなみにLimitは上からn件を表示の意味です。
descをorder byの後ろにつけると降順にすることもできます。デフォルトでは昇順でascをつけても昇順です。

mysql> select * from Ebichu_DB.Ebichu_TB order by number desc limit 3;
+---------+------------+--------+
| name    | color      | number |
+---------+------------+--------+
| rittan  | light blue |     12 |
| po-chan | yellow     |     11 |
| Hinata  | orange     |     10 |
+---------+------------+--------+

関数

有名なsum, count, avg, maxなどについて説明します。

mysql> select sum(number) from Ebichu_DB.Ebichu_TB;
+-------------+
| sum(number) |
+-------------+
|          63 |
+-------------+

mysql> select max(number) from Ebichu_DB.Ebichu_TB;
+-------------+
| max(number) |
+-------------+
|          12 |
+-------------+

mysql> select avg(number) from Ebichu_DB.Ebichu_TB;
+-------------+
| avg(number) |
+-------------+
|      7.8750 |
+-------------+

mysql> select count(number) as "number >= 10" from Ebichu_DB.Ebichu_TB where number>=10;
+--------------+
| number >= 10 |
+--------------+
|            3 |
+--------------+
1 row in set (0.00 sec)

countのところで用いているasを用いると表示するカラムの名前を変更できるので便利です。

疲れたのでJOIN操作は今度書きます。