sql >> データベース >  >> RDS >> Database

SQLで2つのクエリの結果を組み合わせる方法

    問題:

    SQLの2つのテーブルの(同様のデータ型の)特定の列のデータを表示したい。

    例:

    データベースには2つのテーブルがあります:employee およびcustomer

    employee テーブルには、次の列のデータが含まれています: id first_name last_name 、および年齢

    スミス チャールズ デイビス
    id first_name last_name 年齢
    1 トム ミラー 22
    2 ジョン 26
    3 リサ ウィリアムズ 30
    4 21
    5 ジェームズ ムーア 22

    customer テーブルには、次の列のデータが含まれています: id first_name last_name 、および年齢

    スミス チャールズ デイビス
    id first_name last_name 年齢
    1 ミラノ 45
    2 21
    3 マーク バッカー 19

    1つの結果セットで、データベース内のすべての人(従業員と顧客の両方)の名、名前、年齢を表示しましょう。

    ソリューション1:

    UNION ALLを使用します 2つのテーブルの列のデータを結合します。

    作成するクエリは次のとおりです。

    SELECT first_name, last_name, age FROM employee
    UNION ALL
    SELECT first_name, last_name, age FROM customer;
    

    結果は次のとおりです。

    first_name last_name 年齢
    トム ミラー 22
    ジョン スミス 26
    リサ ウィリアムズ 30
    チャールズ デイビス 21
    ジェームズ ムーア 28
    ミラノ スミス 45
    チャールズ デイビス 21
    マーク バッカー 19

    ディスカッション:

    UNION ALL句を使用して、2つ以上のテーブルの列のデータを結合します。この例では、employee およびcustomer テーブル。 UNION ALLキーワードの左側に、最初のSELECTステートメントを配置して、最初のテーブル(この例ではテーブルemployee )。右側では、別のSELECTステートメントを使用して、2番目のテーブル(この例では、customer )。

    両方のテーブルで選択したデータは、各列で同じデータ型である必要があることに注意してください。たとえば、最初のSELECTの最初の列が文字列データ型である場合、2番目のSELECTの最初の列も文字列データ型である必要があります。最初のSELECTステートメントの2番目の列が整数の場合、2番目のテーブルの2番目の列も整数型である必要があります。

    最初のクエリでは、3番目の列に年齢(整数データ型である従業員の年齢)を選択しました。したがって、2番目のSELECTの3番目の列も整数値です。 年齢です 顧客の。

    両方のSELECTステートメントの2番目の列は、同じデータ型です。ただし、両方のテーブルで値が同じである場合、それらは複数回表示されます。たとえば、「CharlesDavis21」は結果セットに2回表示されます。

    結果テーブルに複数の同一のレコードが必要ない場合はどうなりますか?この場合、UNIONを使用します 。 UNION ALLに似ています 、ただし、重複するレコードは削除されます。次の例を見てください。

    ソリューション2:

    レコードの重複を回避するクエリは次のとおりです。

    SELECT first_name, last_name FROM employee
    UNION 
    SELECT first_name, last_name FROM customer;
    

    上記のクエリの結果は次のとおりです。

    スミス チャールズ デイビス
    first_name last_name
    マーク バッカー
    ジェームズ ムーア
    ジョン
    ミラノ スミス
    トム ミラー
    リサ ウィリアムズ

    注:

    UNION ALL UNIONよりも高速です 、ただしUNION 重複する行を削除します。選択は、必要な結果データによって異なります。


    1. SQLServerでGOTOを使用する方法

    2. MariaDBでのLOG()のしくみ

    3. Ubuntuにsqlcmd&bcpをインストールする方法

    4. OracleのDECODEがNVLとは異なる値を与えるのはなぜですか?