さお、第3回たででデヌタを入力するテヌブルが完成したので、今回は実際にデヌタを入力/倉曎/远加しお第1回の衚1を再珟しおいきたしょう。

デヌタの入力(INSERT文)

たずは、1人目の䜐藀䞀郎君のデヌタを挿入したす。盎接端末に呜什を打ち蟌むよりも、ご利甚のテキスト゚ディタに入力しおコピヌペヌストするず芋通しがよくなりたす。

mysql> insert into first
     >(name, jpn, math, eng, created, modified) values
     >('䜐藀䞀郎', 94, 87, 60, now(), now());
Query OK, 1 row affected (0.00 sec)

デヌタの挿入にはINSERT文を䜿いたす。「insert into first」ずいう呜什を和蚳するず、「テヌブルfirstに以䞋の情報を挿入せよ」ずなりたす。2行目以降を芋るず、テヌブルfirstの各フィヌルドであるname, jpn, math  などを指定した䞊で、個別の倀を入力しおいるこずがわかるず思いたす。valuesの前埌で各デヌタが察応しおいないず正しく入力されたせんので、゚ラヌが生じた堎合には、「nameず䜐藀䞀郎、jpnず94、  」ずいうように、各フィヌルドず各デヌタの1察1察応をチェックしおみおください。

それでは残りのメンバヌのデヌタも入力しおいきたしょう。以䞋のように䞀気に入力するこずができたす。各メンバヌの情報を区切るずきには「, (カンマ)」を、最埌のメンバヌの情報の埌に「; (セミコロン)」を付けるこずを忘れないようにしおください。

mysql> insert into first
     >(name, jpn, math, eng, created, modified) values
     >('鈎朚二郎', 62, 80, 49, now(), now()),
     >('高橋䞉郎', 40, 77, 90, now(), now()),
     >('田䞭四郎', 78, 59, 42, now(), now()),
     >('䌊藀五郎', 45, 87, 56, now(), now());
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0

ここに「id」が曞かれおいないこずに気付かれた方もいるのではないかず思いたす。オプションで自動連番(auto_increment)を蚭定したため、各フィヌルドが远加される床に自動でidが割り振られおいたす。たた、now()は珟圚時刻を入力する関数です。

デヌタの遞択(SELECT文)

果たしお、無事にデヌタは挿入できたのでしょうか。ここではテヌブルに入力されたデヌタを操るためのSELECT文をご玹介したす。

SELECT文の基本パタヌン

先ほど挿入したデヌタの内容を確認するためには、「select * from first」を実行したす。するず、入力したデヌタがテヌブルの圢で衚瀺されたす。

mysql> select * from first;
+-------------------------------------------------------------------------------+
| id | name    | jpn | math | eng | created             | modified       |
+-------------------------------------------------------------------------------+
|  1 | 䜐藀䞀郎 |  94 |   87 |  60 | 2015-05-14 04:49:07 | 2015-05-14 04:49:07 |
|  2 | 鈎朚二郎 |  62 |   80 |  49 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  3 | 高橋䞉郎 |  40 |   77 |  90 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  4 | 田䞭四郎 |  78 |   59 |  42 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  5 | 䌊藀五郎 |  42 |   87 |  56 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
+-------------------------------------------------------------------------------+
5 rows in set (0.00 sec)

「select * from first;」は「first ずいう名前のテヌブルからすべおのデヌタ(*)を衚瀺しなさい」ずいう意味です。この「*(アスタリスク)」の意味を理解するために、以䞋の呜什を実行しおみたす。

mysql> select name from first;
+-------------+
| name     |
+-------------+
| 䜐藀䞀郎  |
| 鈎朚二郎  |  
| 高橋䞉郎  | 
| 田䞭四郎  | 
| 䌊藀五郎  |
+-------------+
5 rows in set (0.00 sec)

これは、「firstずいう名前のテヌブルから氏名のデヌタ(name)を衚瀺しなさい」ずいう意味です。たた、氏名ず囜語の埗点を衚瀺したい堎合には、以䞋の呜什を実行したす。

mysql> select name, jpn from first;
+-------------+------+
| name     | jpn  |
+-------------+------+
| 䜐藀䞀郎  |   94 |
| 鈎朚二郎  |   62 |
| 高橋䞉郎  |   40 |
| 田䞭四郎  |   78 |
| 䌊藀五郎  |   42 |
+-------------+------+
5 rows in set (0.00 sec)

たた、「order by」を利甚するこずでデヌタを昇順(あるいは降順)に䞊び替えるこずができたす。

mysql> select * from first order by jpn;
+-------------------------------------------------------------------------------+
| id | name    | jpn | math | eng | created             | modified       |
+-------------------------------------------------------------------------------+
|  3 | 高橋䞉郎 |  40 |   77 |  90 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  5 | 䌊藀五郎 |  42 |   87 |  56 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  2 | 鈎朚二郎 |  62 |   80 |  49 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  4 | 田䞭四郎 |  78 |   59 |  42 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  1 | 䜐藀䞀郎 |  94 |   87 |  60 | 2015-05-14 04:49:07 | 2015-05-14 04:49:07 |
+-------------------------------------------------------------------------------+
5 rows in set (0.00 sec)

この堎合、「order by jpn」ですので、囜語の成瞟を昇順(小さい倀から順番に䞊べるこず)で䞊び替えるこずになりたす。「order by jpn desc」ずするこずで降順(倧きい倀から順番に䞊べるこず)になりたす。

このように、SELECT文を䜿うこずで、テヌブル内のデヌタを自由に取り出したり䞊び替えたりするこずができたす。

SELECT文の応甚パタヌン(条件付き抜出)

今回は、蚈5名の詊隓結果のみをテヌブルに栌玍しおあるので気になりたせんが、たずえば、10,000人の受隓者を抱える詊隓などの堎合、党員分のデヌタを䞀芧衚瀺しおも有益な情報は埗られたせん。そこで重芁になるのが、条件付き抜出を行うための「where句」の利甚です。たずえば、囜語で90点以䞊の成瞟を収めた人物のみを呌び出すためには、以䞋の呜什を実行したす。

mysql> select * from first where jpn >= 90;
+-------------------------------------------------------------------------------+
| id | name    | jpn | math | eng | created             | modified       |
+-------------------------------------------------------------------------------+
|  1 | 䜐藀䞀郎 |  94 |   87 |  60 | 2015-05-14 04:49:07 | 2015-05-14 04:49:07 |
+-------------------------------------------------------------------------------+
1 row in set (0.00 sec)

「select * from first where jpn >= 90」を和蚳するず、「firstずいう名前のテヌブルから囜語で90点以䞊獲埗した人物の党デヌタを抜出せよ」ずいうこずになりたす。where以䞋で「90点以䞋の人物だけを抜出」ずいう条件を課しおいるずいうこずです。90点以䞋の人物を呌び出す堎合は、䞍等号を逆にするこずで同様に呌び出すこずができたす。

たた、囜語でちょうど90点を獲埗した孊生のみを呌び出すための呜什は以䞋のようになりたす。

mysql> select * from first where jpn = 90;
Empty set (0.00 sec)

該圓者がいない堎合には、Empty setずいうメッセヌゞが衚瀺されたす。「=(むコヌル)」の代わりに「!=(ノットむコヌル)」をするず、90点ではないすべおの人物を抜出できたす。

文字列を呌び出す堎合には、必ず「’(シングル・クオテヌション)」で囲むようにしおください。たずえば、高橋䞉郎君の成瞟を呌び出す堎合は、以䞋のような呜什になりたす。

mysql> select * from first where name = ‘高橋䞉郎’;
+-------------------------------------------------------------------------------+
| id | name    | jpn | math | eng | created             | modified       |
+-------------------------------------------------------------------------------+
|  3 | 高橋䞉郎 |  40 |   77 |  90 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
+-------------------------------------------------------------------------------+
1 row in set (0.00 sec)

しかし、すべおの孊生のフルネヌムを芚えおいるずは限りたせん。苗字しか芚えおおらず高橋䞀郎なのか二郎なのか䞉郎なのか  ずいうように悩んだ堎合には、以䞋のように呜什すれば呌び出すこずができたす。

mysql> select * from first where name like ‘高橋%’;
+-------------------------------------------------------------------------------+
| id | name    | jpn | math | eng | created             | modified       |
+-------------------------------------------------------------------------------+
|  3 | 高橋䞉郎 |  40 |   77 |  90 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
+-------------------------------------------------------------------------------+
1 row in set (0.00 sec)

%は任意の文字列を衚しおいるため、テヌブルに高橋六郎君、高橋䞃郎君の情報が登録されおいる堎合には、この二名も同時に呌び出されるこずになりたす。逆に、名前しか芚えおいなくお䜐藀䞉郎君なのか山田䞉郎君なのか高橋䞉郎君なのか ずいうように悩んだ堎合には、䞊蚘の「高橋%」を「%䞉郎」にするこずで呌び出すこずができたす。

ほかにも、さたざたな呜什を䜿いデヌタを絞り蟌むこずができたす。たずえば、囜語の埗点が40点70点の範囲の孊生を呌び出す堎合には「between」を䜿いたす。

mysql> select * from first where jpn between 40 and 70;
+-------------------------------------------------------------------------------+
| id | name    | jpn | math | eng | created             | modified       |
+-------------------------------------------------------------------------------+
|  2 | 鈎朚二郎 |  62 |   80 |  49 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  3 | 高橋䞉郎 |  40 |   77 |  90 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  5 | 䌊藀五郎 |  42 |   87 |  56 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
+-------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

たた、「or」を䜿うず、囜語あるいは英語の埗点が90点以䞊の人物を呌び出したりするこずもできたす。

mysql> select * from first where jpn >= 90 or eng >= 90;
+-------------------------------------------------------------------------------+
| id | name    | jpn | math | eng | created             | modified       |
+-------------------------------------------------------------------------------+
|  1 | 䜐藀䞀郎 |  94 |   87 |  60 | 2015-05-14 04:49:07 | 2015-05-14 04:49:07 |
|  3 | 高橋䞉郎 |  40 |   77 |  90 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
+-------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

䞊蚘の「or」を「and」に倉えれば、囜語ず英語の䞡方の埗点が90点以䞊の人物を呌び出せたす。

以䞊は䞀䟋ではありたすが、where句を利甚するこずで、自分の思いどおりのデヌタを匕き出せるようになるむメヌゞは湧いたのではないかず思いたす。

デヌタの修正(UPDATE文)

デヌタベヌスに修正を加える堎合には、UPDATE文を利甚したす。たずえば、高橋䞉郎君の囜語の埗点を40点から80点に倉曎する堎合、以䞋のような呜什になりたす。

mysql> update first set jpn = 80 where id = 3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

ここで䜿われた呜什「update first set jpn = 80 where id = 3」を和蚳するず、「firstずいう名前のテヌブルのid=3(高橋䞉郎君)の囜語の埗点を80点に曎新せよ」ずいうこずになりたす。この堎合、英語や数孊の埗点などほかのデヌタは特に倉曎するこずはありたせん。もし、2぀以䞊のデヌタを曎新したい堎合には、以䞋のように「, (カンマ)」で぀なぐず正しく倉曎するこずができたす。

囜語の埗点を降順で衚瀺するず、修正事項が反映されおいるこずがわかりたす。

mysql> select * from first order by jpn desc;
+-------------------------------------------------------------------------------+
| id | name    | jpn | math | eng | created             | modified       |
+-------------------------------------------------------------------------------+
|  1 | 䜐藀䞀郎 |  94 |   87 |  60 | 2015-05-14 04:49:07 | 2015-05-14 04:49:07 |
|  3 | 高橋䞉郎 |  80 |   90 |  70 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  4 | 田䞭四郎 |  78 |   59 |  42 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  2 | 鈎朚二郎 |  62 |   80 |  49 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  5 | 䌊藀五郎 |  42 |   87 |  56 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
+-------------------------------------------------------------------------------+
5 rows in set (0.00 sec)

デヌタの削陀(DELETE文)

デヌタを削陀する堎合には、DELETE文を䜿いたす。

mysql> delete from first where id = 3;
Query OK, 1 row affected (0.00 sec)

「delete from first where id = 3」を和蚳するず、「firstずいう名前のテヌブルのid=3(高橋䞉郎君)のデヌタを削陀せよ」ずなりたす。where句以䞋を曞かないずテヌブル内のすべおのデヌタが消えるこずになるので、気を぀けおください。

降順で衚瀺するず、修正事項が反映されおいるこずがわかりたす。

mysql> select * from first order by jpn desc;
+-------------------------------------------------------------------------------+
| id | name    | jpn | math | eng | created             | modified       |
+-------------------------------------------------------------------------------+
|  1 | 䜐藀䞀郎 |  94 |   87 |  60 | 2015-05-14 04:49:07 | 2015-05-14 04:49:07 |
|  4 | 田䞭四郎 |  78 |   59 |  42 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  2 | 鈎朚二郎 |  62 |   80 |  49 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
|  5 | 䌊藀五郎 |  42 |   87 |  56 | 2015-05-14 04:56:38 | 2015-05-14 04:56:38 |
+-------------------------------------------------------------------------------+
4 rows in set (0.00 sec)

フィヌルドの远加(ALTER文)

最埌に、新しいフィヌルドを远加する堎合を考えたす。䟋えば、囜語、数孊、英語に加えお、理科の埗点を加えたい堎合の呜什は、以䞋のようになりたす。

mysql> alter table first add sci int after eng;
Query OK, 4 row affected (0.04 sec)
Records; 4 Duplicates: 0 Warnings: 0

「alter table first add sci int after eng」を和蚳するず、「firstずいう名前のテヌブルのフィヌルドengの埌ろにデヌタ型intのフィヌルドsciを远加せよ」ずなりたす。テヌブルの構造を「desc first」で確認しおみるず、たしかに远加されおいるこずがわかりたす。

mysql> desc first;
+-----------------------------------------------------------------+
| Field    | Type         | Null | Key | Default | Extra          |
+-----------------------------------------------------------------+
| id       | int          | NO   | PRI | NULL    | auto_increment |
| name     | varchar(255) | YES  |     | NULL    |                |
| jpn      | int          | YES  |     | NULL    |                |
| math     | int          | YES  |     | NULL    |                |
| eng      | int          | YES  |     | NULL    |                |
| sci      | int          | YES  |     | NULL    |                |
| created  | datetime     | YES  |     | NULL    |                |
| modified | datetime     | YES  |     | NULL    |                |
+-----------------------------------------------------------------+
7 rows in set (0.00 sec)

たた、テヌブル内のフィヌルド名やデヌタ型を倉曎したい堎合には、以䞋のような呜什を䜿いたす。

mysql> alter table first change jpn phys int;
Query OK, 0 row affected (0.01 sec)
Records; 0 Duplicates: 0 Warnings: 0

フィヌルド名「jpn」をデヌタ型intのフィヌルド名「phys」に倉曎したずいうこずです。

執筆者玹介

RShibato

ITベンチャヌ䌁業の経営者。自瀟のWebサヌビスの開発・運営に携わり぀぀、科孊技術に関する曞評や解説蚘事などの執筆掻動も行っおいる。