MySQLでテーブルから一部の行のみを選択して表示する方法
MySQLでは、NOT IN句とサブクエリを組み合わせることで、テーブルの中から条件に合わない行を除外し、必要な行だけを抽出して表示できます。この記事では、実際にサンプルテーブルを作成し、特定の行のみを選択する手順を実行結果とあわせてわかりやすく解説します。
1. サンプルテーブルの作成
まず、CREATE TABLE文で学生情報を管理するテーブルを作成します。StudentIdは自動採番(AUTO_INCREMENT)の主キーとして設定しています。
mysql> create table DemoTable625 (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFirstName varchar(100),
StudentScore int
);
Query OK, 0 rows affected (1.01 sec)
2. レコードの挿入
次に、INSERT文を使ってテーブルに5件のレコードを追加します。
mysql> insert into DemoTable625(StudentFirstName,StudentScore) values('John',98);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable625(StudentFirstName,StudentScore) values('Chris',39);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable625(StudentFirstName,StudentScore) values('Bob',41);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable625(StudentFirstName,StudentScore) values('David',40);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable625(StudentFirstName,StudentScore) values('Robert',52);
Query OK, 1 row affected (0.18 sec)
3. すべてのレコードを確認する
SELECT文を実行して、テーブル内の全レコードを表示してみましょう。
mysql> select *from DemoTable625;
実行結果は以下の通りです。
+-----------+------------------+--------------+ | StudentId | StudentFirstName | StudentScore | +-----------+------------------+--------------+ | 1 | John | 98 | | 2 | Chris | 39 | | 3 | Bob | 41 | | 4 | David | 40 | | 5 | Robert | 52 | +-----------+------------------+--------------+ 5 rows in set (0.00 sec)
4. 一部の行のみを選択して表示する
ここからが本題です。例として、「点数が50未満の学生を除外し、50以上の学生だけを表示する」ケースを考えてみます。まずサブクエリでスコアが50未満の学生名を取得し、その結果をNOT IN句に渡すことで該当する行を除外します。
mysql> select *from DemoTable625 where StudentFirstName NOT IN(
select StudentFirstName from DemoTable625
where StudentScore < 50
);
実行結果は以下の通りです。
+-----------+------------------+--------------+ | StudentId | StudentFirstName | StudentScore | +-----------+------------------+--------------+ | 1 | John | 98 | | 5 | Robert | 52 | +-----------+------------------+--------------+ 2 rows in set (0.00 sec)
まとめ
このように、NOT IN句とサブクエリを組み合わせれば、条件に一致する行を除外した上で残りの行だけを簡単に抽出できます。なお、単純に「スコアが50以上の行」を取り出したいだけであれば、WHERE StudentScore >= 50のように直接条件を指定する方が効率的です。状況に応じて最適な方法を選択しましょう。
-
MySQLでNULLを含む列からNULL以外(NOT NULL)の値だけを抽出して表示する方法
MySQLのIS NOT NULLを使ってNULL以外の値のみを表示するMySQLで、NULLとNULL以外のレコードが混在する列からNULL以外の値だけを取得したい場合は、IS NOT NULL演算子を使用します。この記事では、実際にテーブルを作成しながら手順を解説します。1. テーブルの作成まず、日付型の列を持つサンプルテーブルを作成します。mysql> create table DemoTable1 ( DueDate date ); Query OK, 0 ro
-
MySQLでテーブル内の特定の行だけを削除する方法|NOT IN()を使った実践テクニック
MySQLで特定の行以外を一括削除したい場合、NOT IN() 演算子を使用すると簡単に実現できます。NOT IN() は「指定した値のリストに含まれない行」を対象にできるため、残したい行のIDを列挙すれば、それ以外の行だけを効率よく削除できます。この記事では、サンプルテーブルを作成し、実際にデータを挿入してから、NOT IN() を使って特定の行のみを削除する手順を解説します。1. サンプルテーブルの作成まずは、StudentId を自動採番(AUTO_INCREMENT)に設定したテーブルを作成します。AUTO_INCREMENT=101 を指定することで、IDは101から順番に割り振られ