テーマ研究会資料(2010/10/19)
~MySQLの基本(続)~
政策情報学部 渡辺恭人 riho-m@cuc.ac.jpメーリングリスト: riho-m-rg10@cuc.ac.jp
設定された型と異なるデータを入力した場合
• 数値型のフィールドに文字列を入れると?
– insert into todofuken values ( ’Chiba’, ’Chiba’,
’abcd’, 4996);
• どうなるか?
– select * from todofuken; で中身を確認
3
mysql> insert into todofuken values ( 'Chiba', 'Chiba', 'abcd', 4996); Query OK, 1 row affected (0.00 sec)
mysql> select * from todofuken; +---+---+---+---+
| kenmei | kencho | jinko | memseki | +---+---+---+---+
| Tokyo | Tokio | 1222 | 2102 |
| Kanagawa | Yokohama | 863 | 2416 | | Chiba | Chiba | 0 | 4996 |
+---+---+---+---+ 3 rows in set (0.00 sec)
もう一つのINSERT文
• 必要なフィールドのみにデータを登録する
• 基本構文
– insert into テーブル名 ( フィールド名1, フィー ルド名2, ・・・・ ) values ( フィールド名1の値, フィールド名2の値 );• モニタで入力
– insert into todofuken ( kenmei, jinko ) values ( ’Osaka’, 882) ;
5
mysql> insert into todofuken (kenmei, jinko) values ('Osaka', 882); Query OK, 1 row affected (0.00 sec)
mysql> select * from todofuken; +---+---+---+---+
| kenmei | kencho | jinko | memseki | +---+---+---+---+
| Tokyo | Tokio | 1222 | 2102 |
| Kanagawa | Yokohama | 863 | 2416 | | Chiba | Chiba | 0 | 4996 |
| Osaka | NULL | 882 | NULL | +---+---+---+---+ 4 rows in set (0.00 sec)
データの検索と表示①
SELECT
• 登録した全件を表示する
– select * from テーブル名
• 例
– select * from todofuken;
• SELECT 条件に合うレコードを「選択」する
表示するフィールドを限定する
• SELECTの後、フィールド名をコンマで列記する
– select kenmei, jinko from todofuken;
– フィールドは一つだけでも可
• select kenmei from todofuken; 7
mysql> select kenmei, jinko from todofuken; +---+---+ | kenmei | jinko | +---+---+ | Tokyo | 1222 | | Kanagawa | 863 | | Chiba | 0 | | Osaka | 882 | +---+---+
条件を指定して選択する
• SELECT文の末尾に条件を指定する
• 基本構文
– select 表示対象フィールド from テーブル名 where 条件式;• 例、都道府県名がTokyoであるレコードを前フ
ィールドで表示させる
– select * from todofuken where kenmei = ’Tokyo’;
– Kenmeiは文字列指定なので、条件は引用符で囲 む
条件を指定して選択する
• 数値フィールドを条件にする場合
– 引用符はいらない
– select * from todofuken where jinko = 882;
• 数値フィールドで数値の大小を設定する
– select * from todofuken where jinko < 870;
• その他
– 「以下」は 「<= 」、同様に、「>」「>=」
• 「<>」(等しくない)
– 数値・文字のどちらのフィールドで使用可能
mysql> select * from todofuken where kenmei = 'Tokyo'; +---+---+---+---+
| kenmei | kencho | jinko | memseki | +---+---+---+---+
| Tokyo | Tokio | 1222 | 2102 | +---+---+---+---+ 1 row in set (0.00 sec)
mysql> select * from todofuken where jinko = 882; +---+---+---+---+
| kenmei | kencho | jinko | memseki | +---+---+---+---+
| Osaka | NULL | 882 | NULL | +---+---+---+---+ 1 row in set (0.00 sec)
mysql> select * from todofuken where jinko < 870; +---+---+---+---+
| kenmei | kencho | jinko | memseki | +---+---+---+---+
| Kanagawa | Yokohama | 863 | 2416 | | Chiba | Chiba | 0 | 4996 |
LIKE 「みたいな~」
• 文字フィールドが対象
• 「~で始まる」「~を含む」「~で終わる」のよう
な選択
• 例
– select * from todofuken where kenmei like ’%a’;
– 意味:kenmeiがaで終わるレコードの全フィールド を選択
複数の条件も可能
• kenmeiがaで終わり、jinkoが800以上のレコー
ド
– select * from todofuken where kenmei like ’%a’ and jinko >= 800;
レコードの修正
UPDATE
• 基本構文
– update テーブル名 set フィールド名=修正したい 値 where 条件式;• 特定のレコードを修正する
– update todofuken set kencho=’Tokyo’ where kenmei=’Tokyo’;
• 全レコードの修正
– update todofuken set jinko=500;
レコードの修正
UPDATE
• あるフィールドを別のフィールドの値で置き換
える
– update todofuken set jinko=menseki;
• 四則演算も可能
レコードの削除
DELETE
• 基本構文
– delete from テーブル名 where 条件;
• 特定のレコードを削除する
– 例、東京のレコードを削除
– delete from todofuken where kenmei=’Tokyo’;
• 全レコードを削除
– delete from todofuken;
ファイルからデータを読み込む
• 基本構文
– load data infile ”./テキストファイル名” into table テーブル名;
• ファイルのダウンロード
http://www2.cuc.ac.jp/~riho-m/tk10/todofuken.txt – 適当な場所に保存 – WinSCPを使って、サーバ( www.cyaneum.org(202.244.37.57))に転送ファイルからデータを読み込む
• Mysqlモニタでの実行
– load data infile ”./todofuken.txt” into table todofuken;
• データが入っているかどうかの確認
– select * from todofuken;
• ファイルとテーブルの構造が同じでないと読
み込めない
レコードの選択
• 通常のSELECT文
– select * from todofuken; – 登録順に表示される
• アルファベット順に並べ替える
– select 表示したいフィールド from テーブル名 order by フィールド名;
– select * from todofuken order by kenmei;
– Select * from todofuken order by kenmei desc;
レコードの選択
• 数値フィールドの並べ替え
• 小さい順
select * from todofuken order by menseki;
• 大きい順
select * from todofuken order by menseki
desc;
• 大きい順ベスト10
select * from todofuken order by menseki
レコードの選択
• 人口が少ない県から順に10位までを表示
select * from todofuken order by jinko
limit 10;
• 人口密度が少ない県
select * from todofuken order by
jinko/menseki limit 10;
• 人口密度も合わせて表示
select kenmei, jinko, menseki, jinko/menseki from todofuken order by jinko/menseki desc limit 10;