Polecenie SELECT jest podstawowym, najczęściej wykorzystywanym poleceniem języka SQL. Nie można się bez niego obejść podczas manipulacji danymi zapisanymi w bazie danych. Poniżej przedstawiono podstawową składnię polecenia SELECT:
SELECT nazwa_pola1,nazwa_pola2.. FROM nazwa_tabeli
WHERE warunek_wyszukiwania;
Najprostsze zapytanie SELECT wyświetlające wszystkie dane z podanej tabeli wygląda następująco:
SELECT * FROM nazwa_tabeli;
* w zapytaniu zastępuje wszystkie nazwy pól. W sytuacji, gdy chcemy wyświetlić określone pola z tabeli musimy je jawnie podać. Przykładowo, gdy chcemy wyświetlić imię i nazwisko wszystkich pracowników z tabeli pracownik musimy zdefiniować zapytanie w sposób następujący:
SELECT Imie,Nazwisko FROM Pracownik;
Możliwe jest wyświetlenie danych z jednoczesnym dokonaniem obliczeń. Przykładowo:
SELECT Imie,Nazwisko,Placa*0.10 FROM Pracownik;
spowoduje wyświetlenie 10% zarobków wszystkich pracowników. W celu zwiększenia przejrzystości wyświetlanych danych możliwa jest zmiana nazwy wyświetlanego pola. Przykładowo powyższe zapytanie zwróci informację w sposób następujący:
Imie | Nazwisko | ?list?
Jan | Kowalski | 123.24
Adam | Nowak | 231,32
Jeśli chcemy zmienić opis pola - dodając jego alias - wykorzystujemy słowo AS:
SELECT Imie,Nazwisko,Placa*0.10 AS "Premia 10%" FROM Pracownik;
Otrzymamy:
Imie | Nazwisko | Premia 10%
Jan | Kowalski | 123.24
Adam | Nowak | 231,32
W sytuacji, gdy nowy opis jest jednowyrazowy możemy pominąć znaki "".
Klauzula WHERE
Do tej pory wyświetlaliśmy wszystkie rekordy z podanej tabeli. KlauzulaWHEREumożliwia wybieranie tylko interesujących nas wierszy. Przykładowo Jeśli chcemy wyświetlić wszystkich pracowników, którzy mają na imię Adam napiszemy:
SELECT * FROM Pracownik
WHERE Imie='Adam';
Warunek, jaki powinny spełniać dane do wyświetlania może być bardziej skomplikowany. Możemy używać operatorów logicznych (AND, OR, NOT) jak również innych operatorów opisanych poniżej w podrozdzialeOPERATORY.Przykładowo zapytanie wyświetlające Kowalskich i Nowaków z tabeli Pracownik:
SELECT * FROM Pracownik
WHERE Nazwisko='Kowalski' OR Nazwisko='Nowak';
Złączenia tabel
Instrukcja SELECT umożliwia wyświetlanie danych z więcej niż jednej tabeli. Przykładowe wyświetlenie danych z dwóch tabel przedstawiono poniżej:
SELECT Imie,Nazwisko,Stanowisko FROM Pracownik,Stanowiska
WHERE Pracownik.id_stanowiska=Stanowisko.id;
W podanym przykładzie wyświetlimy Imię i Nazwisko z tabeli Pracownik oraz odpowiadający każdemu pracownikowi opis stanowiska. Jak można zauważyć pojawia się opis "Stanowisko.id", czyli nazwa tabeli i jej pole. Jest to związane z możliwością pojawienia się identycznej nazwy pola w obu tabelach jednocześnie. Stosując złączenia tabel często wykorzystuje się aliasy dla ich nazw. Zwiększa to przejrzystość zapytań, jak również przyspiesza pisanie zapytań.
SELECT Imie,Nazwisko,Stanowisko FROM Pracownik AS P,Stanowiska AS S
WHERE P.id_stanowiska=S.id;
Powyższy przykład pokazuje sposób użycia aliasów dla nazw tabel.
Operatory logiczne
Język SQL umożliwia stosowanie operatorów logicznych w zapytaniach. Typowe operatory stosowane do wybierania danych to AND, OR, NOT. Przykładowe zapytanie wykorzystujące operatory logiczne wygląda w sposób następujący:
SELECT * from Pracownik
WHERE Nazwisko='Kowalski' AND Placa>1200;
Powyższe zapytanie wyświetli wszystkich Kowalskich, których płaca jest wyższa od 1200zł. Nie ma potrzeby stosowania nawiasów, ponieważ występuje tylko jeden operator logiczny. W przypadku, gdy w zapytaniu występuje większa liczba operatorów może zajść konieczność użycia nawiasów wskazujących kolejność operacji.
SELECT * from Pracownik
WHERE Nazwisko='Kowalski' AND (grupa=1 OR grupa=2);
Powyższe zapytanie spowoduje wyświetlenie wszystkich kowalskich należących do grupy pierwszej lub drugiej. Brak nawiasów spowodowałby wyświetlenie wszystkich Kowalskich należących do grupy pierwszej oraz wszystkich (niezależnie od nazwiska) należących do grupy drugiej.
Operatory przyrównania
W języku SQL możemy korzystać z typowych operatorów matematycznych. Listę dstępnych operatorów przedstawia tabelka:
Operator | Prawda, gdy... |
---|---|
= | równy |
!=,<> | nierówny |
> | większy niż |
<= | mniejszy niż |
>= | nie mniejszy |
<= | nie większy |
Operatory SQL
W języku SQL zdefiniowano dodatkowo specyficzne dla niego operatory. Operatorów SQL używamy identycznie jak operatorów logicznych. Dostępne są następujące operatory:
- BETWEEN ... AND ...
- IN ( ... )
- LIKE ...
- IS NULL
- BETWEEN ... AND ...
Operator BETWEEN umożliwia sprawdzenie, czy podana wartość znajduje się w podanym przedziale. Przykładowo:
SELECT * from Produkt
WHERE cena BETWEEN 20 AND 30;
wyśietli nam wszystkie progukty, których cena zawiera się pomiędzy 20 a 30 zł włączając w to obie wartości.
IN ( ... )
Operator IN umożliwa wybranie wszystkich wartości, które odpowiadają wartościom znajdującym się na liści. Przykładowo:
SELECT * from Produkt
WHERE cena IN (20,24,30);
wyświetli wszystkie produkty, których cena wynosi: 20, 24 lub 30zł.
LIKE ...
Operator LIKE umożliwia wyszukanie rekordów pasujących do podanego wzorca. We wzorcu możemy wykorzystać znaki specjalne:*,% oraz?,_,#. Znaki te zastępują odpowiednio: ciąg znaków oraz dokładnie jeden znak.
UWAGA: w PostgreSQL prawidłowo funkcjonują: % oraz _
SELECT * from Pracownik
WHERE Nazwisko LIKE 'K%';
Powyższe polecenie wyświetli nam wszystkich pracowników, których nazwisko rozpoczyna się na literę "K", natomiast wyrażenie poniżej:
SELECT * from Pracownik
WHERE Nazwisko LIKE 'Kowalsk_';
Wyświetli wszystkie panie Kowalskie, jak również panów Kowalskich ("Kowalska","Kowalski").
IS NULL
Operator IS NULL umożliwia wyszukiwanie pół o wartościach nieustalonych. Przykładowo wprowadzając nowego pracownika nie musimy od razu wypełniać wszystkich informacji. Poniższe wyrażenie umożliwi wyszukanie wszystkich pracowników, którzy nie posiadają wprowadzonego numeru telefonu:
SELECT * from Pracownik
WHERE nr_telefonu IS NULL;
Hierarchia operatorów
W języku SQL obowiązuje hierarchia wykonywania operacji. Jako pierwsze wykonują się operacje umieszczone w nawiasach, następnie operacje porównania (=,!=....), później operator NOT, a następnie AND i OR.
Porządkowanie danych
Wyświetlając dane z tabel często pojawia się problem eliminacji duplikatów. W sytuacji, gdy chcemy się dowiedzieć czy w bazie jest wpisany np. Kowalski, a nie interesuje nas ilu Kowalskich jest w bazie możemy ograniczyć powtarzające się wpisy. Umożliwia to klauzulaDISTINCT.
SELECT * from Pracownik
WHERE Nazwisko Like 'Kowalski';
SELECT DISTINCT * from Pracownik
WHERE Nazwisko Like 'Kowalski';
Wyrażenie pierwsze spowoduje wyświetlenie wszystkich Kowalskich, natomiast wyrażenie drugie spowoduje wyświetlenie tylko jednego rekordu z nazwiskiem Kowalski.
ORDER BY.
Wszystkie opisane dotychczas składnie umożliwiają wyświetlenie poszczególnych rekordów w kolejności ich wpisywania do bazy. Najczęściej jednak zależy nam na przedstawieniu wyników w sposób czytelny dla użytkownika. Należy w takim wypadku zastosować dyrektywę ORDER BY umożliwiającą posortowanie wyników zapytania. Sortowanie może być wykonane od najmniejszej do największej wartości, oraz w przeciwną stronę. Do określenia sposobu sortowania służą poleceniaASC orazDESCOdpowiednio od najmniejszej do największej i odwrotnie. Przykładowe wykorzystanie funkcji ORDER By przedstawiają poniższe zapytania:
SELECT * from Pracownik
ORDER BY Nazwisko;
SELECT * from Towar
ORDER BY Cena DESC;
Pierwsze z nich wyświetli zawartość tabeli Pracownik sortując dane wg nazwiska, drugie wyświetli dane z tabeli Towar surtując dane od najwyższej do najniższej ceny. Możliwe jest sortowanie danych według więcej niż jednej kolumny. Poniższy przykład umożliwi wyświetlenie danych pracowników uporządkowanych według nazwiska a następnie wg imienia, przy czym nazwiska sortowane są od Ż do A.
SELECT * from Pracownik
ORDER BY Nazwisko DESC, Imie;