テーブルからレコードを読み出すにはSELECT文を使います。単純にテーブル内のレコードを読み出すだけではなく、複数のテーブルを結合したり、条件によって一部のレコードだけを選択したり、フィールドの値を使って計算や集計を行うこともできます。
※SELECT文を試す場合、複数のレコードが登録されている方が判りやすいので、あらかじめテーブルmeiboにいくつかレコードを追加しておきましょう。ここからの解説では以下のようにレコードが挿入されているとします。
| id | name | ruby | birthday | |
|---|---|---|---|---|
| 1 | 山田太郎 | ヤマダタロウ | 1997-7-1 | yamada@example.com |
| 2 | 碇シンジ | イカリシンジ | 2003-6-6 | shinji@example.com |
| 3 | 古代進 | コダイススム | 1997-10-31 | kodai@example.com |
| 4 | 渡瀬青葉 | ワタセアオバ | 2001-9-17 | awatase@example.com |
テーブル meibo を完全に初期化したい場合は以下のSQLをphpmyadminのSQL欄にコピー&ペースト・実行して下さい。
DROP TABLE IF EXISTS `meibo`;
CREATE TABLE `meibo` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
`ruby` varchar(40) DEFAULT NULL,
`birthday` date DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
INSERT INTO `meibo` (`id`, `name`, `ruby`, `birthday`, `email`) VALUES
(1, '山田太郎', 'ヤマダタロウ', '1997-07-01', 'yamada@example.com'),
(2, '碇シンジ', 'イカリシンジ', '2003-06-06', 'shinji@example.com'),
(3, '古代進', 'コダイススム', '1997-10-31', 'kodai@example.com'),
(4, '渡瀬青葉', 'ワタセアオバ', '2001-09-17', 'awatase@example.com');SELECTの基本構文1
SELECT * FROM テーブル名
もっとも基本的なSELECT文です。指定されたテーブル内のすべてのレコード・すべてのカラムを読み出します。レコードの読み出される順番は不定です。
SELECT と FROM はSQLの予約語で省略不可です。
*は『すべてのカラム』を意味する記号です。
カラムの出力される順番はCREATE TABLEのときに指定した順・INSERT INTOでカラム名リストを省略した場合の値の指定順と同じです。
SELECTとの間、とFROMの間、FROMとテーブル名の間はそれぞれ空白文字で区切ります。
SELECTの基本構文1の例
SELECT * FROM meibo;実行結果
| id | name | ruby | birthday | |
|---|---|---|---|---|
| 1 | 山田太郎 | ヤマダタロウ | 1997-7-1 | yamada@example.com |
| 2 | 碇シンジ | イカリシンジ | 2003-6-6 | shinji@example.com |
| 3 | 古代進 | コダイススム | 1997-10-31 | kodai@example.com |
| 4 | 渡瀬青葉 | ワタセアオバ | 2001-9-17 | awatase@example.com |
練習問題
前回の練習で作成したテーブル ex_shohin の全レコードを得るSQLを記述しなさい。
SELECTの基本構文2(読み出すカラムを指定する)
テーブルに多数のカラムのある場合など、一部のカラムだけを読み出す場合には以下のようにします。
SELECT カラムリスト(カンマ区切り) FROM テーブル名
SELECT と FROMの間に*ではなくカラム名をカンマ区切りで列挙します。
SELECTの基本構文2の例
例1
SELECT name FROM meibo;必要なカラムが1つだけの場合には、そのカラムの名前を書きます。
実行結果
| name |
|---|
| 山田太郎 |
| 碇シンジ |
| 古代進 |
| 渡瀬青葉 |
例2
SELECT name, ruby FROM meibo;必要なカラムが複数の場合には、カンマ区切りでカラム名を列挙します。
実行結果
| name | ruby |
|---|---|
| 山田太郎 | ヤマダタロウ |
| 碇シンジ | イカリシンジ |
| 古代進 | コダイススム |
| 渡瀬青葉 | ワタセアオバ |
練習問題
以下のSQLをphpmyadminのSQL欄に貼りつけて実行してください。
USE dbkiso1;
DROP TABLE IF EXISTS `ex_shohin`;
CREATE TABLE `ex_shohin` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
`price` int(11) DEFAULT NULL,
`note` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
INSERT INTO `ex_shohin` (`id`, `name`, `price`, `note`) VALUES
(1, 'いちご', 200, 'ビタミンC,糖質'),
(2, 'ニンジン', 180, 'βカロテン,ビタミンB1,ビタミンB2'),
(3, 'サラダ菜', 160, 'βカロテン,ビタミンK'),
(4, 'ヨーグルト', 240, '糖質,アミノ酸,カルシウム,ビタミンB2');
前回の練習で作成したテーブル ex_shohin の全レコードの、name と note を得るSQLを記述しなさい。

コメント