SQL: Operator UNION
przykład – różne nazwy pól
nie jest konieczne, aby odpowiednie kolumny w każdej instrukcji SELECT miały taką samą nazwę, ale muszą być tymi samymi odpowiadającymi im typami danych.
gdy nie ma takich samych nazw kolumn między poleceniami SELECT, robi się to nieco skomplikowane, szczególnie gdy chcesz zamówić wyniki zapytania za pomocą klauzuli ORDER BY.
przyjrzyjmy się jak używać operatora UNION o różnych nazwach kolumn i uporządkujmy wyniki zapytań.,
na przykład:
SELECT supplier_id, supplier_nameFROM suppliersWHERE supplier_id > 2000UNIONSELECT company_id, company_nameFROM companiesWHERE company_id > 1000ORDER BY 1;
w tym przykładzie Unii SQL, ponieważ nazwy kolumn są różne między dwoma poleceniami SELECT, korzystniejsze jest odwoływanie się do kolumn w klauzuli ORDER BY według ich pozycji w zestawie wyników. W tym przykładzie posortowaliśmy wyniki według supplier_id / company_id w kolejności rosnącej, oznaczonej przez ORDER BY 1
. Pola supplier_id / company_id znajdują się na pozycji #1 w zestawie wyników.
teraz przyjrzyjmy się bliżej temu przykładowi z danymi.,p>
SELECT supplier_id, supplier_nameFROM suppliersWHERE supplier_id > 2000UNIONSELECT company_id, company_nameFROM companiesWHERE company_id > 1000ORDER BY 1;
otrzymasz następujące wyniki:
nazwa dostawcy | |
---|---|
3000 | Apple |
4000 | Samsung |
7000 | sony |
8000 | IBM |
najpierw zauważ, że rekord o identyfikatorze dostawcy 3000 pojawia się tylko raz w zestawie wyników, ponieważ zapytanie unijne usunęło zduplikowane wpisy.,
Po Drugie, zauważ, że nagłówki kolumn w zestawie wynikowym są nazywane supplier_id i supplier_name. To dlatego, że były to nazwy kolumn używane w pierwszej instrukcji SELECT w Unii.
Jeśli chcesz, możesz aliasować kolumny w następujący sposób:
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;
teraz nagłówki kolumn w wyniku zostaną aliasowane jako ID_Value dla pierwszej kolumny i Name_Value dla drugiej kolumny.,
ID_Value | Name_Value |
---|---|
3000 | Apple |
4000 | Samsung |
7000 | Sony |
8000 | IBM |