Operacje wyboru danych dla pojedynczej tabeli, cz.1

Język SQL cechuje kilka właściwości, dwie podstawowe są następujące:

W poleceniach nie są rozróżniane duże i małe litery.

Pomijane są nadmiarowe białe znaki np. znaki tabulacji, spacje, znaki nowej linii.

Podstawową instrukcją języka SQL jest SELECT. Służy ona do pobierania informacji. Najprostsza składniowo postać polecenia, dokonującego pobierania danych z tabeli to:

SELECT * FROM nazwa_tabeli

Tak sformułowane polecenie powoduje zwrócenie przez RDBMS wartości ze wszystkich kolumn (decyduje o tym gwiazdka, umieszczona po słowie SELECT) ze wszystkich wierszy wybranej tabeli, której nazwa umieszczona jest po słowie FROM. Krótko mówiąc, rozważane zapytanie (tak nazywa się komendę SQL opartą o instrukcję SELECT) zwróci w odpowiedzi całą zawartość tabeli.

Dla dużych tabel rzadko się zdarza, abyśmy byli zainteresowani wszystkimi informacjami, zawartymi w tabeli. Ogólnie rzecz biorąc, będziemy zainteresowani wyłącznie informacjami, zawartymi w wyspecyfikowanych kolumnach i/lub wierszach, spełniających pewien warunek.

Operację wybrania pewnych kolumn z tabeli nazywamy
RZUTOWANIEM (albo PROJEKCJĄ)

Rzutowania dokonuje się poprzez podanie w zapytaniu zamiast gwiazdki, niepustej listy nazw kolumn, których zawartość ma znaleźć się w tabeli wynikowej (jeśli lista kolumn ma więcej niż jeden element, poszczególne nazwy oddziela się przecinkami) w następujący sposób:

SELECT nazwa_kolumny1,nazwa_kolumny2 FROM nazwa_tabeli

Warto zauważyć, że kolumny ma liście mogą pojawić się w dowolnej kolejności (niezależnej od np. kolejności kolumn w tabeli). Jest to kolejna cecha modelu relacyjnego.

Z zagadnieniem rzutowania, dotyczącym jednej tabeli wiąże się następujące zagadnienie: jeżeli w zapytaniu pominiemy kolumny, stanowiące część lub całość klucza głównego tabeli, w wyniku możemy otrzymać tabelę, nie spełniającą warunku unikalności wierszy. Nie stanowi to problemu, gdyż model relacyjny określa warunki poprawności tabel, zawartych w bazie danych, a nie tabel wynikowych. W pewnych sytuacjach potrzebujemy mechanizmu, służącego do przetworzenia wyniku zapytania w taki sposób, aby wiersze tabeli wynikowej stały się unikalne. W języku SQL istnieje specjalna klauzula DISTINCT, która służy w instrukcji SELECT do usunięcia zduplikowanych wierszy z tabeli wynikowej:

SELECT DISTINCT nazwa_kolumny1,nazwa_kolumny2 FROM nazwa_tabeli

Po wydaniu tak sformułowanego zapytania otrzymamy tabelę bez powtarzających się wierszy. Można w ten sposób uzyskać np. listę klientów sklepu na podstawie listy zamówień (niektórzy klienci dokonali kilkakrotnie zakupu).

W pewnych wypadkach nie chcemy, aby w tabeli wynikowej nazwa kolumny była taka sama, jak w tabeli, z której pobierane były dane. Jest tak na przykład w sytuacji, gdy nazwa kolumny jest za długa, lub przeciwnie; jest skrótem. W takim wypadku można nadać kolumnie tzw. alias, czyli nową nazwę, obowiązującą jedynie w tabeli wynikowej – tabela w bazie danych pozostaje bez zmian. Aliasy dla kolumn tworzy się, wstawiając w liście kolumn polecenia SELECT zamiast nazwy kolumny, konstrukcję:

nazwa_kolumny AS nowa_nazwa_kolumny

na przykład:

SELECT id AS Identyfikator, kolumna2, nazw AS Nazwisko FROM nazwa_tabeli

W niektórych bazach danych słowo AS można pominąć.

Często chcemy, aby tabela wynikowa była posortowana według pewnego kryterium np. listy osobowe sortowane są w porządku alfabetycznym tj. nazwiska rozpoczynające się na literę A są umieszczone przed nazwiskami rozpoczynającymi się na literę B itd. Do sortowania tabeli wynikowej służy klauzula ORDER BY. Sortowanie wierszy tabeli wynikowej dokonywane jest na podstawie wartości w wybranej kolumnie lub kolumnach. Można wybrać kierunek sortowania: rosnące lub malejące. Struktura zapytania z klauzulą ORDER BY przedstawia się następująco:

SELECT nazwa_k1, nazwa_k2 FROM nazwa_tabeli ORDER BY nazwa_k1 ASC

SELECT nazwa_k1, nazwa_k2 FROM nazwa_tabeli ORDER BY nazwa_k1 DESC

Skróty ASC oraz DESC oznaczają odpowiednio: wybór sortowania w porządku rosnącym (ang. ascend) oraz malejącym (ang. descend). Domyślne jest sortowanie w porządku rosnącym, stąd słowo ASC można pominąć, jeśli wyniki mają być sortowane w takim porządku. Sortowanie może odbywać się również względem wielu kolumn, podaje się je wtedy w kolejności malejącej ważności, oddzielając specyfikacje: nazwa kolumny – kierunek sortowania przecinkami, na przykład:

SELECT * FROM personalia ORDER BY wiek DESC,nazwisko,imie

Zapytanie to utworzy listę posortowaną względem malejącego wieku (tj. najstarsze osoby będą umieszczone na początku), a następnie alfabetycznie względem nazwisk, a potem imion.

Język SQL pozwala na przeprowadzanie obliczeń. Wykorzystuje się tu często aliasy, można używać operatorów arytmetycznych oraz nawiasów. W wyrażeniach jako zmiennych można używać nazw kolumn (zawierających wartości liczbowe). Dostępne są również pewne funkcje, jak np. pi (), exp (argument), pow (podstawa,wykładnik), sin (argument), cos (argument) i inne. Pełna lista zależy od wybranego RDBMS. Przykładowe zapytania dokonujące obliczeń:

SELECT 2*2	wynikiem jest iloczyn, równy 4.
SELECT pow(2,10)	wyznaczona zostaje wartość liczby 2, podniesionej do dziesiątej potęgi. Wynik wynosi 1024.
SELECT log(exp(10))	wyznaczenie logarytmu naturalnego z wartości liczby e, podniesionej do dziesiątej potęgi. Wynik wynosi 10.

Przykład zapytania, wykorzystującego obliczenia:

SELECT imie,nazwisko,wiek*365 AS dni_zycia FROM personalia ORDER BY dni_zycia

Zapytanie to wyświetla imiona i nazwiska, zawarte w tabeli personalia, oraz szacuje ilość przeżytych dni na podstawie kolumny z tabeli personalia, zawierającej wiek w latach, a następnie sortuje wynik rosnąco względem liczby przeżytych dni tj. osoby najstarsze umieszczone zostaną na końcu listy.

Adam Drzewiecki

2003-03-12T09:47:25