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 ALL o różnych nazwach kolumn i uporządkujmy wyniki zapytań.,
na przykład:
SELECT supplier_id, supplier_nameFROM suppliersWHERE supplier_id > 2000UNION ALLSELECT company_id, company_nameFROM companiesWHERE company_id > 1000ORDER BY 1;
w tym przykładzie SQL ALL, 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 wynikowym. 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.,wyniki:
nazwa dostawcy | 3000 | Apple |
---|---|
3000 | Apple |
4000 | Samsung |
7000 | sony |
8000 | IBM |
Po pierwsze, zauważ, że rekord z supplier_id 3000 pojawia się dwa razy w zestawie wyniku, ponieważ zapytanie Union all zwraca wszystkie wiersze i nie usuwa duplikatów.,
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 ALL.
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 > 2000UNION ALLSELECT 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 |
3000 | Apple |
4000 | Samsung |
7000 | Sony |
8000 | IBM |
Leave a Reply