トップ «前の日記(2015-06-28(Sun)) 最新 次の日記(2015-06-30(Tue))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2015-06-29(Mon) 傘は要らないかどうか

NULLもう少し

WHERE 節で条件を指定する場合、例えば = と != のいずれであっても NULL値は選択されない。

mysql> SELECT * FROM nulltest;
+--------+------+
| number | item |
+--------+------+
|      0 | NULL |
|      1 | foo  |
|      2 | bar  |
+--------+------+
mysql> SELECT * FROM nulltest WHERE item = 'foo';
+--------+------+
| number | item |
+--------+------+
|      1 | foo  |
+--------+------+
1 row in set (0.00 sec)
 
mysql> SELECT * FROM nulltest WHERE item != 'foo';
+--------+------+
| number | item |
+--------+------+
|      2 | bar  |
+--------+------+
1 row in set (0.00 sec)

OR を追加するなど必要。

mysql> SELECT * FROM nulltest WHERE item != 'foo' OR item IS NULL;
+--------+------+
| number | item |
+--------+------+
|      0 | NULL |
|      2 | bar  |
+--------+------+
2 rows in set (0.00 sec)

LearningSQLExample.sql

をpostgres向けに書き換えてみた。
が、ただ置換するだけではすまないかもな違いが見えてきて厭になった。
smallint に続くunsignedを消し、datetimeをdateにし(時刻までは使わない) 、enumをcreate enumに書き換え、not null をいくつか消し(入力時にnullが あってエラーになった)、cast(text as date)し ...て、48の(ひとつは消した)文 のうち、エラーの残りが5行まで減ったところで気力が尽きた。
同じに見える構文の一部が通らない。

ただのJOIN

mysql> select * from city;
+----+---------+-----------+
| id | pref_id | city      |
+----+---------+-----------+
|  1 |       4 | 津        |
|  2 |       6 | 横浜      |
|  3 |       1 | 札幌      |
|  4 |       3 | 鹿児島    |
|  5 |       5 | 尼崎      |
|  6 |       2 | 青森      |
+----+---------+-----------+
6 rows in set (0.00 sec)

と、

mysql> select * from pref;
+----+-----------+
| id | pref      |
+----+-----------+
|  1 | 北海道    |
|  2 | 青森      |
|  3 | 鹿児島    |
|  4 | 三重      |
|  5 | 兵庫      |
|  6 | 神奈川    |
+----+-----------+
6 rows in set (0.00 sec)

を、足すと、

mysql> select city.id 番号 , pref.pref 県 , city 市  
    -> from city join pref on pref.id = city.pref_id;
+--------+-----------+-----------+
| 番号   | 県        | 市        |
+--------+-----------+-----------+
|      1 | 三重      | 津        |
|      2 | 神奈川    | 横浜      |
|      3 | 北海道    | 札幌      |
|      4 | 鹿児島    | 鹿児島    |
|      5 | 兵庫      | 尼崎      |
|      6 | 青森      | 青森      |
+--------+-----------+-----------+
6 rows in set (0.00 sec)

あと、文字コード

/etc/mysql/my.cnf に

$ grep -B 1 utf8 /etc/mysql/my.cnf
[client]
default-character-set = utf8
--
[mysqld]
character-set-server = utf8

して、

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

しただけではデフォルトがlaten1になった。
とりあえずは、

mysql> create table pref 
    -> (id smallint not null auto_increment, pref varchar(9), 
    -> constraint pk_id primary key (id)) DEFAULT CHARSET=utf8;

のようにしておいた。


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。