レコードを追加しよう!
レコードを追加するには、データベースの操作に応じた適切なSQLクエリを使用します。前回のセクションの例題であった「m_users」テーブルと課題で作成した「m_profiles」テーブルをもとに、例題と課題を取り組んでみましょう!
m_usersの内容
| カラム名 | 名称 | データ型 | NULL | Default | 自動採番 | KEY | 備考 |
| id | ID | int | NOT | NULL | ◯ | IDをプライマリーキーにする(PRIMARY KEY) | – |
| user_name | ユーザー名 | varchar(100) | NOT | NULL | – | – | 最大全角100文字 |
| mail_address | メールアドレス | varchar(200) | NOT | NULL | – | – | 最大全角200文字 |
| password | パスワード | varchar(100) | NOT | NULL | – | – | – |
| created | 登録日 | datetime | DEFAULT | NULL | – | – | ‘YYYY-MM-DD HH:MM:SS’ |
| modified | 更新日 | datetime | DEFAULT | NULL | – | – | ‘YYYY-MM-DD HH:MM:SS’ |
m_profilesの内容
| カラム名 | 名称 | データ型 | NULL | Default | 自動採番 | KEY | 備考 |
| id | ID | int | NOT | NULL | ◯ | IDをプライマリーキーにする(PRIMARY KEY) | – |
| name | 名前 | varchar(100) | NOT | NULL | – | – | 最大全角100文字(200バイト) |
| kana | カナ | varchar(100) | NOT | NULL | – | – | 最大全角100文字(200バイト) |
| age | 年齢 | int | NOT | NULL | – | – | – |
| profile | プロフィール | text | NOT | NULL | – | – | – |
| place | 出身都道府県地番号 | int(5) | NOT | NULL | – | – | 47都道府県を数字で管理 |
| sex | 性別 | int(2) | NOT | NULL | – | – | 1:男 2:女 |
| created | 登録日 | datetime | DEFAULT | NULL | – | – | ‘YYYY-MM-DD HH:MM:SS’ |
| modified | 更新日 | datetime | DEFAULT | NULL | – | – | ‘YYYY-MM-DD HH:MM:SS’ |
データの追加
追加変更削除のコマンド文は INSERT UPDATE DELETEです。
| コマンド文 | 説明 |
| INSERT | データベースのテーブルに新しいレコードを追加します。 |
| UPDATE | データベースのテーブル内の既存のレコードの値を更新します。 |
| DELETE | データベースのテーブルから特定の条件に一致するレコードを削除します。 |
INTO句とFROM句
INSERT文やDELETE文、SELECT文などは、INTOやFROMのような「句」を使用したりします。他にもWHERE句などの句があるが、ここではINTO句とFROM句の説明をさせていただきます。他に何があるかは、こちらを参照いただくか、「SQL 句 一覧」等で検索してみてください。
| 句 | 説明 | 直訳 | 句を使用する文(基本例) |
| INTO | 新しいデータを挿入する先のテーブルを指定します。 | 「〜の先へ」 | INSERT…etc |
| FROM | データの参照元や操作対象のテーブルを指定します | 「〜から」 | DELETE、SELECT…etc |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//--追加 mysql> INSERT INTO [テーブル名] [フィールド名] VALUES [値]; //--追加例 mysql> INSERT INTO m_users (user_name, mail_address, password, created, modified) VALUES ("Yamada Taro", "yamda@gmail.com", "123123", now(), now()); //--※ now() ・・・ 現在の日時 //--更新 mysql> UPDATE [テーブル名] SET [フィールド名]=[値] WHERE [条件式]; //--更新例 mysql> UPDATE m_users SET user_name="SuzukiYamada Takao", mail_address="ytakao@gmail.com" WHERE id = 1; //--削除:素人はやらないように! //--全レコード削除 注意これ危険! mysql> DELETE FROM [テーブル名]; //--一部レコード削除 mysql> DELETE FROM [テーブル名] WHERE [条件式]; //--削除例:id 5超えたものは全部削除 mysql> DELETE FROM m_users WHERE id > 5; |
実行結果例

データを挿入しよう!
INSERT文をさらに実行してみましょう!
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//--挿入 mysql> INSERT INTO m_users (user_name, mail_address, password, created, modified) VALUES ("Yamada Taro", "yamda@gmail.com", "123123", now(), now()), ("Suzuki Ichiro", "suzuki@gmail.com", "123123", now(), now()), ("Sato Jiro", "sato@gmail.com", "123123", now(), now()); //--挿入確認 mysql> SELECT * FROM m_users; mysql> INSERT INTO m_profiles (name, kana, age, profile, place, sex, created, modified) VALUES ("山田 太郎", "ヤマダタロウ", 21, "プロフィール1", 20, 1,now(), now()), ("鈴木 一朗", "スズキイチロウ", 33, "プロフィール2", 30, 1,now(), now()), ("佐藤 治郎", "サトウジロウ", 23, "プロフィール3", 35, 1,now(), now()); //--挿入確認 mysql> SELECT * FROM m_profiles; |
実行結果例

※日本語文字化けについて:初期のxammpでは、コマンド日本語対応がされていません。気になる方で変更したい場合はこちらを参考で実行してください。
以下で文字コードを「ShiftJIS」に変更しておきます。
|
1 |
mysql>SET NAMES cp932; |
データを更新しよう!
UPDATE文をもっと実行してみましょう!
|
1 2 3 |
sql>UPDATE m_users SET user_name="Suzuki Hanako" WHERE id = 2; sql>UPDATE `m_profiles` SET `name` = '鈴木 花子', `kana` = 'スズキハナコ', `sex` = '2' WHERE `m_profiles`.`id` = 2; |
変更されているか確認してください!!
レコードの操作実行しよう!
トランザクション
トランザクションの機能を活用すると、実際にUPDATEなどのクエリを実行してSELECTで結果を確認したあとに、意図通りに変更できていれば、反映させます。
意図通りに変更できてなければ、反映させないということができます。
確認のための機能というより同じデータを、他者から書き込ませたいために利用するものです。
|
1 2 3 4 5 6 |
//--トランザクションの開始 mysql> START TRANSACTION; //--コミット mysql> COMMIT; //-- ロールバック mysql> ROLLBACK; |
実行してみよう!
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> START TRANSACTION; mysql> UPDATE m_users SET user_name="Yamada Tarou", mail_address="Yamada_Tarou@gmail.com" WHERE id = 1; mysql> SELECT * FROM m_users WHERE id IN(1,2,3); //--ここで状態確認 まだ更新されていない mysql> COMMIT; mysql> START TRANSACTION; mysql> UPDATE m_users SET user_name="YamadaHOGE" WHERE id = 1; mysql> SELECT * FROM m_users WHERE id IN(1,2,3); //--ここで状態確認 まだ更新されていない //--間違っていれば キャンセルしてもどす mysql> ROLBACK; |
テーブルデータを読み出そう!
select文の使い方を知っておこう
SELECT文は、データベースからデータを取得するために使用されます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
SELECT * FROM m_profiles; //--部分カラムを選択 SELECT id, name, kana, updated FROM m_profiles; //--ageの平均 SELECT AVG(age) FROM m_profiles; //-- テーブル数 SELECT count(id) FROM m_profiles; //where limit SELECT id, user_name FROM m_users WHERE id = 2; SELECT id, user_name FROM m_users WHERE id >= 2; SELECT * FROM m_profiles WHERE place IN (20, 21,30); SELECT * FROM m_profiles WHERE place BETWEEN 10 AND 30; SELECT * FROM m_profiles WHERE place >30 OR place <=20; //OR検索 SELECT * FROM m_profiles WHERE age =21 AND age =23; //AND検索 SELECT * FROM m_profiles WHERE name LIKE "%鈴木%"; //部分検索 SELECT * FROM m_profiles LIMIT 2; // 2レコードまで表示 |
JOIN 内部 外部接続
テーブル同士を接続して表示します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SELECT table_name.col_name1 [, table_name.col_name2 ...] FROM table_name1 INNER JOIN tbl_name2 ON table_name1.col_name1 = table_name2.col_name2; //記述例 SELECT * FROM m_users JOIN m_profiles ON m_users.id = m_profiles.id; //見やすく SELECT name AS 名前, age AS 年齢 FROM m_profiles AS 社員の名前と年齢; --//USINGで簡単に SELECT * FROM m_users JOIN m_profiles USING(id); |
|
1 |
SELECT * FROM m_users JOIN m_profiles ON m_users.id = m_profiles.id; |
課題
課題手順
1.placesテーブルを作成して、出身県1~47をいれてください。
m_place(都道府県テーブル)
都道府県データ挿入のテーブルデータ 参考のサイト
| カラム名 | 名称 | データ型 | NULL | Default |
| place_no | 県NO | int | NOT | NULL |
| place_name | 県名 | varchar(100) | NOT | NULL |
2.作成したSQLテーブルを利用して、データを表示してください。
m_users:20件・ m_profiles:10件・m_place(都道府県テーブル):47件
3.m_profilesとm_placeテーブルを利用して、内部結合を使って表示してください。
提出物:作成したSQL文と出力されたデータをコピーして、テキストに貼り付けて送ってください。
テキスト名:profiles_place.txt
4.m_usersとm_profilesテーブルを利用して、外部結合を使って表示してください。
提出物:作成したSQL文と出力されたデータをコピーして、テキストに貼り付けて送ってください。
テキスト名:users_profiles.txt
課題補足
・内部結合:テーブルとテーブルの互いの条件に一致するレコード(データ行)をのみを抽出します。
・外部結合:一致しない場合もデータとして取得、一致しないデータは取得しない。
実行結果
m_placeテーブル作成後、テーブルの中身を確認した例

内部結合・実行結果例

外部結合・実行結果例

ヒント
ヒント:都道府県名のは、内部結合(INNERJOIN)を使います。
m_users と m_profilesは外部結合(LEFT JOIN句, RIGHT JOIN句)を使います。m_usersにしかないテーブルも表示するようにします。
課題・復習用検索キーワード
| 検索例 |
| 🔍sql 構文 一覧 |
| 🔍sql 内部結合 外部結合 |
| 🔍sql 句 とは |