MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【MySQL】行も列も選択せずに空の結果セットを返す方法

MySQLでテーブルから行も列も一切表示したくない場合(空の結果セットを取得したい場合)は、SELECT NULLFALSEを組み合わせて使用します。まずは基本の構文を見てみましょう。

select null from yourTableName where false;

サンプルテーブルの作成

実際に動作を確認するため、最初にテーブルを作成します。

mysql> create table DemoTable1367
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> FirstName varchar(20)
    -> );
Query OK, 0 rows affected (0.55 sec)

レコードの挿入

INSERT文を使って、いくつかのレコードを追加しましょう。

mysql> insert into DemoTable1367(FirstName) values('Chris');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable1367(FirstName) values('David');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1367(FirstName) values('Bob');
Query OK, 1 row affected (0.10 sec)

登録済みレコードの確認

SELECT文ですべてのレコードを表示してみます。

mysql> select * from DemoTable1367;

実行すると、次のような出力が得られます。

+----+-----------+
| Id | FirstName |
+----+-----------+
|  1 | Chris     |
|  2 | David     |
|  3 | Bob       |
+----+-----------+
3 rows in set (0.00 sec)

行も列も選択しないクエリの実行

それでは本題のクエリです。select nullに対してwhere falseを指定すると、WHERE句の条件が常に偽になるため、どの行も結果として返されません。

mysql> select null from DemoTable1367 where false;

実行結果は次のとおりです。行も列も何も選択されていないため、「Empty set」が表示されます。

Empty set (0.00 sec)

仕組みのポイント

  • where falseを指定すると、WHERE句の条件がすべての行において偽と評価されるため、結果セットには1行も含まれません。
  • SELECT句にnullを指定しているため、仮に行が該当した場合でも値を持たない列だけが対象となります。
  • このテクニックは、実際のデータを取得することなくクエリの構文やテーブルへの接続を確認したい場合などに活用できます。
  1. MySQLでテーブルのすべてのカラム(列)を一覧表示する方法

    MySQLでテーブルのすべてのカラムを一覧表示するには? テーブル内のすべてのカラム(列)を確認したい場合は、SHOWコマンドを使うのが最も簡単な方法です。ここでは、実際にテーブルを作成しながら、カラムの一覧表示手順を詳しく解説します。 1. サンプルテーブルの作成 まず、動作確認用として以下のようなテーブルを作成しましょう。 mysql> create table ColumnsList -> ( -> id int, -> Firstname varchar(200), -> LastName varchar(100), -&

  2. MySQLでテーブルの最後の10件のレコードを取得する方法

    MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected