0
0

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.

MySQLの基本(データベースの操作)2

Posted at

前回の続きです。

enum 複数の文字列から一つだけ格納する

カラム作成時に、'カラム名' enum('文字列1' , '文字列2' , '文字列3')とすると
レコード作成時にenumで宣言した値でのみ格納できるようになる。
宣言した値は文字列だけでなく連番で管理される。

create table users (
id int unsigned primary key auto_increment,
name varchar(20),
score float,
rank enum('gold','silver','bronze')
);

insert into users (name, score,rank) values ('taguchi', 5.8,'gold');
insert into users (name, score,rank) values ('fkoji', 8.2,'silver');
insert into users (name, score,rank) values ('dotinstall', 6.1,'bronze');

set 複数の文字列から複数格納する

カラム作成時に、'カラム名' enum('文字列1' , '文字列2' , '文字列3')とすると
レコード作成時にenumで宣言した値でのみ格納できるようになる。
宣言した値を複数選択可能。
宣言した値は文字列だけでなく連番で管理される。(最初の値には 2 の 0 乗の 1 、次が 2 の 1 乗の 2 、次が 2 の 2 乗の 4 、といった具合で値を保持)

drop table if exists users;
create table users (
 id int unsigned primary key auto_increment,
 name varchar(20),
 score float,
 coins set('gold','silver','bronze')
);

insert into users (name, score, coins) values ('taguchi', 5.8, 'gold,silver');
insert into users (name, score, coins) values ('fkoji', 8.2, 'silver,bronze');
insert into users (name, score, coins) values ('dotinstall', 6.1,'bronze,gold');

if と case  条件分岐でデータを抽出する

if 使い方例)
 データ抽出時にselectでifを使用することで条件に応じたカラムを生成し抽出できる。

create table users (
 id int unsigned primary key auto_increment,
 name varchar(20),
 score float
);

insert into users (name, score) values ('taguchi', 5.8);
insert into users (name, score) values ('fkoji', 8.2);
insert into users (name, score) values ('dotinstall', 6.1);
insert into users (name, score) values ('Tanaka', 4.2);

  select
    name,
    score,
    if (score > 5.0, 'OK', 'NG') as result
  from
    users;


>実行結果

+------------+-------+--------+
| name       | score | result |
+------------+-------+--------+
| taguchi    |   5.8 | OK     |
| fkoji      |   8.2 | OK     |
| dotinstall |   6.1 | OK     |
| Tanaka     |   4.2 | NG     |
+------------+-------+--------+

case 使い方例)
 データ抽出時にselectでcaseを使用することで条件に応じたカラムを生成し抽出できる。
whenの後に直接条件を書くことができる。

create table users (
 id int unsigned primary key auto_increment,
 name varchar(20),
 score float
);

insert into users (name, score) values ('taguchi', 5.8);
insert into users (name, score) values ('fkoji', 8.2);
insert into users (name, score) values ('dotinstall', 6.1);
insert into users (name, score) values ('Tanaka', 4.2);

select
      name,
      score,
      case floor(score) % 2
        when 0 then 'even'
        when 1 then 'odd'
        else null
      end as type
    from
      users;

>実行結果

+------------+-------+------+
| name       | score | type |
+------------+-------+------+
| taguchi    |   5.8 | odd  |
| fkoji      |   8.2 | even |
| dotinstall |   6.1 | even |
| Tanaka     |   4.2 | even |
+------------+-------+------+

抽出結果をテーブルにする

select fromでデータ抽出を行う分の前にcreate tableを使用することで、条件指定で抽出したカラムを含む新たなテーブルを作成できる。

create table users (
 id int unsigned primary key auto_increment,
 name varchar(20),
 score float
);

insert into users (name, score) values ('taguchi', 5.8);
insert into users (name, score) values ('fkoji', 8.2);
insert into users (name, score) values ('dotinstall', 6.1);
insert into users (name, score) values ('Tanaka', 4.2);

create table '作成するテーブル名' 
  select
    id,
    name,
    score,
    case
      when score > 8 then 'teamA'
      when score > 6 then 'teamB'
      else 'teamC'
    end as team
  from
      users;

select * from users_with_team;

>結果

+----+------------+-------+-------+
| id | name       | score | team  |
+----+------------+-------+-------+
|  1 | taguchi    |   5.8 | teamC |
|  2 | fkoji      |   8.2 | teamA |
|  3 | dotinstall |   6.1 | teamB |
|  4 | Tanaka     |   4.2 | teamC |
+----+------------+-------+-------+

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?