Pobiera wiersze z bazy danych (jeden lub więcej) lub kolumny z jednej lub więcej tabel. Służy ona do wyszukiwania danych w bazie. Może być wykonywana samodzielnie lub stanowić część komend (np. CREATE, UPDATE, INSERT, itp.). Warunki muszą być podane w odpowiedniej kolejności jak to przedstawia poniższy schemat. Pełna składnia instrukcji SELECT jest złożona jednak główne elementy to: 1: 2: 3: 4: 5: 6: 7: 8: 9: | SELECT [ALL | DISTINCT] [TOP n [PERCENT] [WITH TIES]] lista_wyboru [INTO nowa_tabela] FROM tabele_zrodlowe [WHERE warunki_wyszukiwania] [ [GROUP BY [ALL] grupuj_wedlug_wyrazenia [,...n] ] [HAVING warunki_wyszukiwania] [WITH { CUBE | ROLLUP }] ] [ORDER BY { nazwy_kolumn [ASC | DESC] } [,...n] ] [ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } (wyrazenie) } [,...n] [ BY wyrazenie [,...n] ] ] [ FOR BROWSE ] | W celu połączenia kilku rezultatów z różnych zapytań w jeden można użyć operatora UNION. Linia pierwsza nakazuje wybrać (SELECT) kolumny znajdujące się w lista_wyboru. Element ALL i DISTINCT nakazują wybrać wszystkie wiersze (ALL) lub wiersze bez powtórzeń (DISTINCT). Domyślną wartością jest ALL. Słowo kluczowe TOP może być wykorzystane do tworzenia listy tylko n początkowych wierszy lub n procent początkowych wierszy zestawu wyników. Nie jest ono zgodne ze standardem ANSI. Klauzula WITH TIES może być wykorzystana do uwzględnienia "powiązań" w zestawie wyników. Powiązania powstają wówczas, gdy dwie lub kilka wartości jest takich samych jak ostatni wiersz zwrócony w klauzuli ORDER BY. Należy pamiętać, że klauzula WITH TIES może być użyta tylko wówczas, gdy istnieje klauzula ORDER BY. Linia 2 nie jest często spotykana, gdyż nakazuje pobrane rekordy umieścić w nowej tabeli o nazwie nowa_tabela. Linia 3 jest obowiązkowa i wskazuje z jakich tabel mają być pobierane kolumny. Linia 4 zawiera listę warunków (warunki_wyszukiwania), które mają być uwzględnione przy wyborze wierszy z bazy. Ta klauzula jest nieobowiązkowa, lecz często wykorzystywana w celu zawężenia ilości zwróconych rekordów. Linia 5 to klauzula grupująca. W przypadku, gdy w lista_wyboru znajdzie się funkcja agregująca należy użyć klauzuli GROUP BY. Funkcje agregujące to m.in.: | AVG | - | średnia wartość w wyrażeniu numerycznym | | COUNT | - | liczba wartości w wyrażeniu | | COUNT(*) | - | liczba wybranych wierszy | | MAX | - | największa wartość w wyrażeniu | | MIN | - | najmniejsza wartość w wyrażeniu | | SUM | - | suma wartości w wyrażeniu numerycznym | | STDEV | - | odchylenie statystyczne dla wszystkich wartości | | STDEVP | - | odchylenie statystyczne dla populacji | | VAR | - | wariacja statystyczna dla wszystkich wartości | | VARP | - | wariacja statystyczna dla wszystkich wartości w populacji | Klauzula GROUP BY grupuje po wyrażeniu grupuj_wedlug_wyrazenia (wyrażeń może być więcej niż jedno). Dodatkowo można zawęzić wynik i użyć klauzuli HAVING, która podobnie jak WHERE posiada za sobą grupę warunków. Należy pamiętać, że HAVING dotyczy tylko i wyłącznie GROUP BY. Linia 6 odnosi się również do klauzuli GROUP BY. Operator CUBE może być wykorzystany do tworzenia i podsumowania wszystkich możliwych kombinacji grup na podstawie klauzuli GROUP BY, zaś operator ROLLUP umożliwia uzyskanie danych w standardowym formacie relacyjnym. Linia 7 to klauzula ORDER BY, która określa kolumny po których wynik ma być sortowany. Klauzula jest nieobowiązkowa. Elementy ASC i DESC określają kierunek sortowania (ASC - rosnąco, DESC - malejąco). Linia 8 zawiera klauzule COMPUTE lub COMPUTE BY, które generują dodatkowe wiersze podsumowań danych w formacie nierelacyjnym, który nie jest zgodny ze standardem ANSI. Format ten jest użyteczny do przeglądania, jednak dane nie są odpowiednio przystosowane do generowania zestawów wyników, które mogą być wykorzystane z innymi aplikacjami. Linia 9 .... Przykłady: | 1: | SELECT TOP 5 WITH TIES orderid, productid, quantity FROM orders ORDER BY quantity DESC | | 2: | SELECT COUNT(*) FORM orders | | 3: | SELECT productid, SUM(quantity) AS total_quantity FROM order_hist GROUP BY productid HAVING SUM(quantity) >= 20 | | 4: | SELECT productid, orderid, SUM(quantity) AS total_quantity FROM order_hist GROUP BY productid, orderid WITH CUBE ORDER BY productid | | 5: | SELECT productid, orderid, quantity FROM order_hist ORDER BY productid, orderid COMPUTE SUM(quantity) | | 6: | SELECT productid, orderid, quantity FROM order_hist ORDER BY productid, orderid COMPUTE BY productid COMPUTE SUM(quantity) Autor: Krzysztof Stelmach Strona pochodzi z http://www.stelmach.info/ |
|