MySQLでテーブルの特定の列の値に一致する複数の行を取得する方法
はじめに
MySQLでは、WHERE句を使うことで、テーブル内の特定の列の値に一致する複数の行を簡単に取得できます。この記事では、学生情報を管理するサンプルテーブルを作成し、「Java」という科目名に一致する複数のレコードを抽出する手順を、実際のSQL文と実行結果とともにわかりやすく解説します。
ステップ1:テーブルを作成する
まず、学生ID・氏名・科目を格納するテーブル「DemoTable1528」を作成します。
mysql> create table DemoTable1528
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20),
-> StudentSubject varchar(20)
-> );
Query OK, 0 rows affected (0.53 sec)
AUTO_INCREMENTにより、StudentIdには自動的に連番が割り振られます。
ステップ2:レコードを挿入する
次に、INSERT文を使って複数のレコードを追加します。
mysql> insert into DemoTable1528(StudentName,StudentSubject) values('Chris','MongoDB');
Query OK, 1 row affected (0.38 sec)
mysql> insert into DemoTable1528(StudentName,StudentSubject) values('Bob','MySQL');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1528(StudentName,StudentSubject) values('David','Java');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1528(StudentName,StudentSubject) values('Carol','C');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1528(StudentName,StudentSubject) values('Sam','Java');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1528(StudentName,StudentSubject) values('Mike','Java');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1528(StudentName,StudentSubject) values('Adam','MySQL');
Query OK, 1 row affected (0.13 sec)ステップ3:全レコードを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1528;
実行結果は以下の通りです。
+-----------+-------------+----------------+
| StudentId | StudentName | StudentSubject |
+-----------+-------------+----------------+
| 1 | Chris | MongoDB |
| 2 | Bob | MySQL |
| 3 | David | Java |
| 4 | Carol | C |
| 5 | Sam | Java |
| 6 | Mike | Java |
| 7 | Adam | MySQL |
+-----------+-------------+----------------+
7 rows in set (0.00 sec)
ステップ4:特定の値に一致する複数の行を取得する
ここが本題です。特定の列(この例ではStudentSubject)の値が「Java」である行だけを取得したい場合は、次のようなクエリを実行します。
mysql> select StudentId,StudentName,StudentSubject from DemoTable1528 where StudentSubject='Java';
実行すると、以下のように該当するすべての行が返されます。
+-----------+-------------+----------------+
| StudentId | StudentName | StudentSubject |
+-----------+-------------+----------------+
| 3 | David | Java |
| 5 | Sam | Java |
| 6 | Mike | Java |
+-----------+-------------+----------------+
3 rows in set (0.00 sec)
このように、WHERE句で条件を指定するだけで、1つの入力値に一致する複数の行をまとめて取得できます。条件値はシングルクォートで囲む点に注意してください。
応用:複数の値を指定したい場合(IN句)
なお、「Java」や「MySQL」など複数の値に一致する行を取得したい場合は、IN句を使うと便利です。
mysql> select * from DemoTable1528 where StudentSubject IN ('Java','MySQL');これにより、OR条件を並べることなく簡潔に記述できます。
まとめ
- WHERE句を使えば、特定の列の値に一致する複数の行を1つのクエリで取得できる
- 文字列の条件値はシングルクォートで囲む
- 複数の候補値を指定したい場合はIN句が便利
データベース操作の基本となるSELECT文とWHERE句の組み合わせは、実務でも頻繁に使われる重要なテクニックです。ぜひマスターしておきましょう。
-
JavaでMySQLテーブルのカラム数を取得・カウントする方法
MySQLテーブルのカラム(列)数をJavaで取得するには、ResultSetMetaDataインターフェースを使用します。ResultSetMetaDataを活用すれば、カラムの総数だけでなく、各カラムの名前やデータ型といった詳細情報も簡単に取得できます。前提:サンプルテーブルの作成まずは動作確認用のテーブルを作成しましょう。以下のSQLでは、3つのカラムを持つ「DemoTable」を作成しています。mysql> create table DemoTable -> ( -> St
-
MySQLで複数のデータを一度に挿入する方法を解説
MySQLでは、INSERT文を複数回実行しなくても、1つのINSERT文で複数行のデータを同時にテーブルへ挿入できます。この方法を使うと、コードが簡潔になるだけでなく、データベースとの通信回数が減るため、大量のデータを挿入する際のパフォーマンス向上にもつながります。 複数行を挿入するための基本構文 複数のレコードを一度に挿入するには、VALUES句の後に値のセットをカンマで区切って並べます。構文は以下のとおりです。 INSERT INTO テーブル名 VALUES(値1, 値2, .....N), (値1, 値2, .....N), (値1, 値2, .....N), (値1, 値2, ..