目次
1. sql中 union 和 union all 的用法
2. 注意事项
2.1、UNION 和 UNION ALL 内部的 SELECT 语句必须拥有相同数量的列
2.2、每条 SELECT 语句中列的顺序必须相同
3. union all 使用场景
补充:mysql中union和union all的区别
一、区别1:取结果的交集
二、区别2:获取结果后的操作
三、区别3:
ホームページ データベース mysql チュートリアル mysqlでのunionとunion allの使い方と注意点

mysqlでのunionとunion allの使い方と注意点

May 26, 2023 pm 05:07 PM
mysql union union all

    1. sql中 union 和 union all 的用法

    如果我们需要将两个 select 语句的结果作为一个整体显示出来,我们就需要用到 union 或者 union all 关键字。union (或称为联合)的作用是将多个结果合并在一起显示出来。

    unionunion all 的区别是,union 会自动压缩多个结果集合中的重复结果,而 union all 则将所有的结果全部显示出来,不管是不是重复。

    union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;union 在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表 union

    如下sql:

    SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
    UNION
    SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
    ログイン後にコピー

    结果:

    mysqlでのunionとunion allの使い方と注意点

    union all:对两个结果集进行并集操作,包括重复行,不进行排序; 如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

    如下sql:

    SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
    UNION ALL
    SELECT create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
    ログイン後にコピー

    结果:

    mysqlでのunionとunion allの使い方と注意点

    2. 注意事项

    2.1、UNION 和 UNION ALL 内部的 SELECT 语句必须拥有相同数量的列

    mysqlでのunionとunion allの使い方と注意点

    2.2、每条 SELECT 语句中列的顺序必须相同

    先来说下,如果顺序不同,会是什么结果?

    答:结果字段的顺序以union all 前面的表字段顺序为准。

    union all 后面的表的数据会按照顺序依次附在后面。注意:按照字段顺序匹配,而不是按照字段名称匹配。

    sql如下:顺序对结果的影响

    SELECT * 
    FROM(
    	SELECT msku,create_time FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK'
    UNION ALL
    	SELECT create_time,msku FROM `e_msku_sku` WHERE msku = '21-BQLEDNL120W-BK') t
    ログイン後にコピー

    mysqlでのunionとunion allの使い方と注意点

    综上:

    union all 结果字段的顺序以 union all 前面的表字段顺序为准。union all 后面的表的数据会按照字段顺序依次附在后面,而不是按照字段名称匹配。

    我们上面以*来表示顺序的不同,其实你写成不同顺序的字段结果一致。

    mysqlでのunionとunion allの使い方と注意点

    3. union all 使用场景

    sql 中的组合in,可用 union all 来代替,提高查询效率

    修改前:组合in sql

    SELECT ***, ***, ***, ***, ***
    FROM e_rating_info 
    WHERE rating_quantity <> 0 AND (***, ***) 
    IN ((&#39;***&#39;, &#39;***&#39;), (&#39;***&#39;, &#39;***&#39;), 
    (&#39;***&#39;, &#39;***&#39;), (&#39;***&#39;, &#39;***&#39;), 
    (&#39;***&#39;, &#39;***&#39;), (&#39;***&#39;, &#39;***&#39;), 
    (&#39;***&#39;, &#39;***&#39;), (&#39;***&#39;, &#39;***&#39;), 
    (&#39;***&#39;, &#39;***&#39;), (&#39;***&#39;, &#39;***&#39;)) 
    ORDER BY *** DESC
    ログイン後にコピー

    修改后:UNION ALL sql

    <select id="queryRatingInfo" resultType="***">
            <foreach collection="ratingList" item="item" index="index" open="" separator="UNION ALL" close="">
                SELECT ***, ***, ***, ***, ***
                FROM e_rating_info
                WHERE rating_quantity <> 0
                AND country_code = #{item.***}
                AND asin = #{item.***}
            </foreach>
            ORDER BY *** DESC;
        </select>
    ログイン後にコピー

    另外,如果系统中进行了分表,一定要保证各个表的字段顺序一致。特别是修改的时候。亲身经历告诉我,如果使用 * 来汇总查询结果,一定会有问题。

    补充:mysql中union和union all的区别

    一、区别1:取结果的交集

    1、union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序;

    2、union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;

    二、区别2:获取结果后的操作

    1、union: 会对获取的结果进行排序操作

    2、union all: 不会对获取的结果进行排序操作

    三、区别3:

    1、union看到结果中ID=3的只有一条

    select * from student2 where id < 4
    union
    select * from student2 where id > 2 and id < 6
    ログイン後にコピー

    2、union all 结果中ID=3的结果有两个

    select * from student2 where id < 4
    union all
    select * from student2 where id > 2 and id < 6
    ログイン後にコピー

    以上がmysqlでのunionとunion allの使い方と注意点の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    PHPのビッグデータ構造処理スキル PHPのビッグデータ構造処理スキル May 08, 2024 am 10:24 AM

    ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

    PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? Jun 03, 2024 pm 08:11 PM

    MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

    PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? Jun 03, 2024 pm 12:19 PM

    PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

    PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? Jun 02, 2024 pm 02:26 PM

    MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

    MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

    MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

    PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? Jun 02, 2024 pm 02:13 PM

    PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

    PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? Jun 04, 2024 pm 01:57 PM

    PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

    Oracleデータベースとmysqlの違い Oracleデータベースとmysqlの違い May 10, 2024 am 01:54 AM

    Oracle データベースと MySQL はどちらもリレーショナル モデルに基づいたデータベースですが、Oracle は互換性、スケーラビリティ、データ型、セキュリティの点で優れており、MySQL は速度と柔軟性に重点を置いており、小規模から中規模のデータ セットに適しています。 ① Oracle は幅広いデータ型を提供し、② 高度なセキュリティ機能を提供し、③ エンタープライズレベルのアプリケーションに適しています。① MySQL は NoSQL データ型をサポートし、② セキュリティ対策が少なく、③ 小規模から中規模のアプリケーションに適しています。

    See all articles