SQL:UNION Operator
例-異なるフィールド名
各SELECTステートメントの対応する列の名前は同じである必要はありませんが、対応するデータ型は同じであ
SELECTステートメントの間に同じ列名がない場合、特にORDER BY句を使用してクエリの結果を並べ替える場合は、少し難しくなります。
さまざまな列名でUNION演算子を使用し、クエリ結果を並べ替える方法を見てみましょう。,
たとえば、次のようになります。
SELECT supplier_id, supplier_nameFROM suppliersWHERE supplier_id > 2000UNIONSELECT company_id, company_nameFROM companiesWHERE company_id > 1000ORDER BY 1;
このSQL UNIONの例では、列名はSELECTステートメント間で異なるため、ORDER BY句の列を結果セット内の位置によって参照する方が この例では、ORDER BY 1
で示されるように、結果をsupplier_id/company_idで昇順にソートしました。 Supplier_id/company_idフィールドは、結果セットの位置#1にあります。
さて、この例をさらにデータで調べてみましょう。,p>
SELECT supplier_id, supplier_nameFROM suppliersWHERE supplier_id > 2000UNIONSELECT company_id, company_nameFROM companiesWHERE company_id > 1000ORDER BY 1;
次の結果が得られます。
supplier_id | supplier_name |
---|---|
3000 | アップル |
4000 | サムスン |
7000 | ソニー |
8000 | ibm |
まず、supplier_idが3000のレコードは、unionクエリで重複エントリが削除されたため、結果セットに一度だけ表示されることに注意してください。,
次に、結果セット内の列見出しがsupplier_idおよびsupplier_nameと呼ばれていることに注意してください。 これは、これらがUNIONの最初のSELECTステートメントで使用された列名であったためです。
必要に応じて、次のように列の別名を付けることができます。
SELECT supplier_id AS ID_Value, supplier_name AS Name_ValueFROM suppliersWHERE supplier_id > 2000UNIONSELECT company_id AS ID_Value, company_name AS Name_ValueFROM companiesWHERE company_id > 1000ORDER BY 1;
結果の列見出しは、最初の列のID_Valueとして、二番目の列のName_Valueとしてエイリアスされます。,
ID_Value | Name_Value |
---|---|
3000 | Apple |
4000 | Samsung |
7000 | Sony |
8000 | IBM |