テーブルから奇数行または偶数行のみを選択しなければならないということは、実際に行うまでは必要のないことのように思えます。Googleのクイックサーチでは、これが十分頻繁に行われていることであるとわかりますが、その方法を知っているデータベース専門家はほとんどいないため、彼らは答えを求めて常にオンラインデータベースコミュニティに目を向けます。このブログの読者は、今日ここで我々が事実を明確にしますので、データベースフォーラムで解決策を探し回る手間を省くことができます。
適切なターゲット列の選択
「偶数行または奇数行」について話す前に、分割したいデータの列で行を並べ替える必要があります。理想的には、そのデータは数値で一意であり、昇順でソートされている必要があります。したがって、プライマリキーの列のような自動インクリメント列は完璧な候補になります。それ以外の場合は、ORDER BY句を使用してサブクエリを作成し、そこから選択する必要がある場合があります。
例として、Navicat Premium 16のテーブルデザイナーで、classicmodelsサンプルデータベースのordersテーブルを開きましょう。そのPK(orderNumber列)が自動インクリメントされていないことがわかります。これは、“自動インクリメント”チェックボックスがオフになっていることからもわかります:
ただし、グリッドビューでテーブルを開くと、orderNumberの値が明確に昇順で並べ替えられていることがわかります:
したがって、テーブルに対して直接クエリを作成できます。
データベース別ソリューション
奇数または偶数の値を持つレコードを見つける最も簡単な方法は、列の値を 2 で割った時の余りを確認することです。余りが0は偶数を示し、奇数は奇数を示します。ただし、多くのデータベースタスクと同様に、余りを求める方法は、使用しているデータベースの種類によって異なります。
PostgreSQL、MySQL、およびOracleでは、MOD()関数を使用して余りを確認できます。
指定された列が偶数の値を持つ行を検索するための一般的なクエリ構文は次のとおりです:
SELECT * FROM table_name WHERE mod(column_name,2) = 0;
この構文は、ターゲット列の値が奇数である行を見つけます:
SELECT * FROM table_name WHERE mod(column_name,2) <> 0;
SQL ServerにはMOD関数がありません。代わりに、%モジュラス演算子を提供しています。
指定された列が偶数の値を持つ行を検索するための一般的なクエリ構文は次のとおりです:
SELECT * FROM table_name where column_name % 2 = 0;
この構文は、ターゲット列の値が奇数である行を見つけます:
SELECT * FROM table_name where column_name % 2 <> 0;
いくつかの例
上記の各ステートメントを、まずSQLで、次にSQL Serverで、classicmodelsサンプルデータベースのordersテーブルに対して試してみましょう。
まず、偶数行を取得します:
次に、奇数行のみをフェッチします:
前述のように、SQL ServerにはMOD関数がないため、代わりに%モジュラス演算子を使用してください。
偶数行:
奇数行:
結論
このブログでは、ターゲットの列の値を2で割った後の余りを確認すること(シンプルで効果的なソリューション)によって様々なデータベースから奇数行または偶数行を取得する簡単な方法を紹介しました。