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
以下の頭文字をとったものであります。
- 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のものを表示する
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操作は今度書きます。