テーブル指定なしのMySQLクエリで返せる行数と列数の制限とは?
MySQLでは、SELECT文にテーブルリスト(FROM句)を指定しない場合、クエリは結果として必ず1行だけを返します。ただし、その1行には複数の列(カラム)を含めることができます。これが、テーブルリストを持たないMySQLクエリにおける行数・列数に関する基本的な制限です。
実行例
mysql> Select 65/NULL,65+NULL,65*NULL,65-NULL,65%NULL; +------------+--------------+-------------+-------------+---------+ | 65/NULL | 65+NULL | 65*NULL | 65-NULL | 65%NULL | +------------+--------------+-------------+-------------+---------+ | NULL | NULL | NULL | NULL | NULL | +------------+--------------+-------------+-------------+---------+ 1 row in set (0.00 sec)
上記の例では、ステートメント内にテーブルリストが存在しないため、MySQLは5つの式の計算結果を格納した5列×1行の結果セットを返しています。各行に対応する実際のデータを取得するわけではないため、式の評価結果をまとめて1行として表示する仕組みになっています。
なぜ1行になるのか?
FROM句を省略したSELECT文は、MySQL内部で仮想的な単一行テーブル(DUALテーブル)に対する問い合わせとして扱われます。そのため、結果セットの行数は常に1行に固定されます。
結果がすべてNULLになる理由
例の中の式(65/NULLや65+NULLなど)がすべてNULLを返しているのは、SQLにおいてNULLとの算術演算の結果は常にNULLになるというルールに従っているためです。これは通常の挙動であり、エラーではありません。
-
JavaでMySQLテーブルのカラム数を取得・カウントする方法
MySQLテーブルのカラム(列)数をJavaで取得するには、ResultSetMetaDataインターフェースを使用します。ResultSetMetaDataを活用すれば、カラムの総数だけでなく、各カラムの名前やデータ型といった詳細情報も簡単に取得できます。前提:サンプルテーブルの作成まずは動作確認用のテーブルを作成しましょう。以下のSQLでは、3つのカラムを持つ「DemoTable」を作成しています。mysql> create table DemoTable -> ( -> St
-
MySQLの構文エラーとは?予約済みキーワードでテーブルを作成する方法
MySQLの予約済みキーワードによる構文エラーとはMySQLでは、テーブル名に予約済みキーワード(reserved keyword)を使用すると、そのままではSQL構文エラーが発生します。ここでは例として、「groups」という名前のテーブルを作成しようとした場合を見てみましょう。「groups」はMySQLの予約済みキーワードであるため、通常の記述方法ではテーブルを作成できません。エラーが発生するケース以下のように、予約語「groups」を使ってテーブルを作成しようとすると、ERROR 1064という構文エラーが出力されます。mysql> create table groups->