ホームページ >データベース >mysql チュートリアル >SQL UNION ALL は行の順序を保持しますか?
SQL UNION ALL クエリでの順序の保持
SQL では、UNION ALL は複数の SELECT ステートメントの結果を 1 つの結果に結合するために使用されます。セット。 UNION 演算子とは異なり、UNION ALL は重複行を削除しません。しかし、結果として得られるデータセットの順序は保証されますか?
簡単に言えば、答えはノーです。 UNION ALL は本質的に結果の順序を保持しません。 SELECT ステートメントが実行され、行が返される順序は実装に固有であり、データベース間、さらには同じデータベースの異なるバージョン内でも異なる場合があります。
これを説明するために、次のクエリを考えてみましょう。
SELECT 'O' UNION ALL SELECT 'R' UNION ALL SELECT 'D' UNION ALL SELECT 'E' UNION ALL SELECT 'R'
場合によっては、結果セットが「O-R-D-E-R」の順序で表示されることがありますが、これが常に同じであるという保証はありません。 case.
結果に特定の順序を保証するには、UNION ALL 演算子の後に ORDER BY 句を明示的に使用する必要があります。たとえば、次のクエリは結果をアルファベットの昇順に並べます:
SELECT 'O' UNION ALL SELECT 'R' UNION ALL SELECT 'D' UNION ALL SELECT 'E' UNION ALL SELECT 'R' ORDER BY 1
各 SELECT ステートメントに SortOrder 列を追加することで、カスタム基準に基づいて結果の順序を制御することもできます:
SELECT 'O', 1 SortOrder UNION ALL SELECT 'R', 2 UNION ALL SELECT 'D', 3 UNION ALL SELECT 'E', 4 UNION ALL SELECT 'R', 5 ORDER BY SortOrder
したがって、結果の特定の順序付けが必要な場合は、ORDER BY を使用することが不可欠です。そうしないと、結果セットの順序が予期せず変化する可能性があります。
以上がSQL UNION ALL は行の順序を保持しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。