W liście wyboru możemy wstawić informację jakie zostaną zawarte obliczenia na danych liczbowych i stałych.
Możemy użyć następujących operatorów arytmetycznych:
Symbol Operacja
+ dodawanie
– odejmowanie
/ dzielenie
* mnożenie
Działania arytmetyczne- możemy je wykonywać w dowolnej kolumnie liczbowej. Dodatkowo możemy też wykorzystywać operator dzielenia modulo, oznaczamy go jako %. Daje on nam możliwość otrzymania reszty z dzielenia dwóch liczb całkowitych. Istnieje również możliwość wykonywania działań arytmetycznych na kolumnach zawierających dane typu data.
Wszystkie operatory mogą być stosowane na liście wyboru. Możemy ich używać w dowolnej kombinacji niezależnie do nazwy kolumny czy stałej numerycznej.
Możemy zobaczyć jak będą wyglądały ceny samochodów po podwyżce o 10 %.
select typ_samochodu, cena*1.10
from szczegoly zaplaty
Wynik:
Wybieranie tabel: lista tabel
Lista tabel- obejmuje ona nazwy tabel, perspektyw lub jednych i drugich, zawierające kolumny wymienione na liście wyboru oraz w klauzuli WHERE. Nazwy tabel na liście tabel jak zawsze oddzielamy przecinkami. Klauzule FROM przedstawiamy w następujący sposób:
select lista wyboru
from [kwalifikator] {nazwa tabeli | nazwa perspektywy}
Możemy używać pełnych nazw tabel na liście tabel i perspektyw wraz z nazwami baz danych i właścicieli jako kwalifikatorów. Korzystać z pełnych nazw powinniśmy w chwili kiedy pojawia się możliwość popełnienia błędu w wyborze właściwej nazwy.
W celu zaoszczędzenia pisania nazwom tabel możemy nadać aliasy. Nadając aliasy na liście tabel, podajemy alias po nazwie tabeli.
select k.id_klienta, k.nazwisko
from klienci k
Litera k poprzedzająca nazwę każdej kolumny na liście wyboru działa jako alternatywa dla pełnej nazwy tabeli.
select klienci.id_klienta, klienci.nazwisko
from klienci
W przypadku zapytania zawierającego jedna tabele nie mamy tu mowy o niejednoznaczności, którą kolumnę wybrać. W takim przypadku użycie nazwy tabeli lub aliasu jako identyfikatora, zależy tylko do użytkownika. Aliasy są najbardziej użyteczne w zapytaniach które składają się z wielu tabel, ponieważ musimy rozróżniać kolumny z wielu tabel.
Wybieranie wierszy: klauzula WHERE
Klauzula WHERE jest częścią zapytania SELECT, w której podajemy warunki wyszukiwania. Dokładnie określa warunki, które wiersze zostaną wyszukane w bazie.
Ogólna postać zapytania:
select lista wyboru
from lista tabel
where warunki wyszukiwania
Podczas konstruowania zapytania SELECT zawierającego klauzule WHERE, system weryfikuje czy zostały spełnione warunki i wybiera odpowiednie wiersze.
Język SQL zawiera masę rozmaitych operatorów i słów kluczowych, służących do definiowania warunków wyszukiwania.
- operatory porównawcze (=, <, >, itd.)
- kombinacje i logiczne negacje warunków (AND, OR, NOT)
- przedziały (BETWEEN i NOT BETWEEN)
- listy (IN, NOT IN)
- wartości nieznane (IS NULL i IS NOT NULL)
- zgodność znakowa (LIKE i NOT LIKE)
Operatory porównawcze
Często zdarza się, że musimy porównać ze sobą jakieś wartości. Musimy się dowiedzieć, co jest „większe” bądź „mniejsze” lub „leży niżej” w sortowaniu alfabetycznym, lub też sprawdzić czy jest „równe” jakieś wartości. W języku SQL zawarte są następujące operatory porównania:
Operator Znaczenie
= równe
> większe niż
< mniejsze niż
>= większe niż lub równe
<= mniejsze niż lub równe
!= nie równe (lub)
<> nie równe
Operatory stosujemy w następujący sposób
where wyrażenie operator porównawczy wyrażenie
Wyrażenie może być nazwą kolumny, stałą, podzapytaniem, funkcją lub dowolną kombinacją wcześniej wymienionych elementów połączonych wyrażeniami arytmetycznymi. Operatory logiczne głownie używane z operatorami liczbowymi, choć możemy je stosować z danymi typu char lub varchar bądź też datami. Kidy stosujemy wartości typu znakowego lub daty musimy pamiętać aby umieścić je w cudzysłowach. Kiedy porządkujemy wielkie i małe litery oraz znaki specjalne ich kolejność zależy od kolejności znaków określonych przez system bazodanowy.
SELECT typ_samochodu, cena
FROM szczegoly zaplaty
where cena > 500
Wynik:
Powyższa instrukcja pozwala nam na wyszukanie cen samochodów większych niż 500 PLN.
SELECT nazwisko, imie
FROM klienci
WHERE nazwisko > ‚dykiel’
Wynik:
Instrukcja wyszukuje klientów, których nazwiska występują w porządku leksykograficznym po Dykiel.
SELECTnazwisko, miasto, telefon
FROM klienci
WHERE miasto = ‚warszawa’
Wynik:
Zapytanie pozwala nam wyszukać klientów mieszkających w Warszawie oraz ich numery telefonu. Jeżeli chcielibyśmy znaleźć np. wszystkich klientów poza tymi mieszkającymi w Warszawie należy zmienić operator na „nie równe” (!=).
Łączenie warunków z operatorami logicznymi
Jeżeli zdarzy nam się taka sytuacja, że w naszym zapytaniu musimy skorzystać z więcej niż jednego warunku stosujemy wtedy operatory logiczne AND, OR I NOT.
Za pomocą operator AND łączymy dwa lub więcej warunków, wynik zostanie zwrócony kiedy wszystkie warunki zostaną spełnione.
SELECT marka,model,rok produkcji,moc km
FROM samochody
WHERE rok produkcji > ‚2005’
and moc km > ‚400’
Wynik:
Zapytanie wyszukuje nam samochody wyprodukowane po roku 2005 oraz które posiadają więcej niż 400 koni mechanicznych .
Operator OR również łączy ze sobą dwa lub więcej warunków, lecz wynik jest zwracany w momencie gdy którykolwiek z warunków zostanie spełniony.
SELECT marka, model, rok produkcji, moc km
FROM samochody
WHERE marka = ‚alfa romeo’
or marka = ‚ferrari’
Wynik:
Za pomocą tego zapytania wyszukujemy wiersze zawierające w kolumnie marka samochody o nazwie ferrari lub alfa romeo.
Operatora logicznego NOT używamy do zaprzeczenia wyrażenia. Kiedy go używamy go z operatorami porównania, umieszczamy go przed wyrażeniami, nie jak przed operatorami porównania.
SELECT nazwisko, miasto
FROM klienci
WHERE not miasto = ‚warszawa’
Zapytanie jest równoznaczne do poniższego zapytania
SELECT nazwisko, miasto
FROM klienci
WHERE miasto != ‚warszawa’
Wynik:
Priorytety operatorów logicznych.
W przypadku operatorów logicznych jak i arytmetycznych, są one realizowane zgodnie z regułami pierwszeństwa. Kiedy stosujemy w jednej instrukcji jednocześnie oba rodzaje operatorów, wtedy operacje arytmetyczne wykonywane są przed operacjami logicznymi. Jednak kiedy w zapytaniu występuje więcej niż jeden operator logiczny, wtedy najpierw wykonywany jest operator NOT, potem AND, na końcu OR.

SELECT *
FROM samochody
WHERE marka = ‚alfa romeo’
or marka = ‚ferrari’
and moc km > ‚400’
Wynik :
Zapytanie wyszukuje wszystkie samochody marki ferrari oraz wszystkie samochody marki alfa romeo które posiadają więcej niż 400 koni mechanicznych. Warunek odnoszący się do ilości koni mechanicznych dotyczy tylko marki alfa romeo, a nie do marki ferrari ponieważ operator AND jest wykonywany przed OR. Dlatego w wyniku otrzymaliśmy wszystkie samochody marki ferrari potem zostały wyszukane wszystkie samochody marki alfa romeo o mocy większej niż 400 koni mechanicznych.
SELECT *
FROM samochody
WHERE (marka = ‚alfa romeo’
or marka = ‚ferrari’)
and moc km > ‚400’
Wynik:
Po dodaniu nawiasów otrzymaliśmy samochody o moc powyżej 400 koni mechanicznych, zapytanie zostało zrealizowane zgodnie z zasadami pierwszeństwa. Najpierw zostały wyszukane wszystkie samochody marek ferrari i alfa romeo a potem wybrane spośród nich te o mocy większej niż 400 koni mechanicznych.
Przedziały BETWEN I NOT BETWEEN
Kolejnym przydatnym warunkiem wyszukiwania są przedziały. Możemy je realizować na dwa sposoby:
– przy pomocy operatorów > i <,
-przy pomocy słowa kluczowego BETWEEN.
Klauzuli BETWEEN powinniśmy używać do określenia przedziały domkniętego, kiedy poszukujemy wartości najmniejszej i największej oraz wartości zawartych między nimi.
SELECT marka, model, moc km
FROM samochody
Where moc km between 320 and 550
Wynik:
Takie zapytanie pozwala nam wyszukać wszystkie samochody w bazie o mocy z przedziału między 320 a 550 koni mechanicznych. Możemy zauważyć, że wynik zawiera samochód o mocy 32o km . W taki sposób możemy zaobserwować czym różni się przedział wyznaczony przez BETWEEN od przedziału określonego za pomocą warunku większy niż- mniejszy niż (><).
SELECT marka, model, moc km
FROM samochody
Where moc km > 320 and moc km < 550
Wynik:
Od razu można zauważyć, że to samo zapytanie z użyciem operatorów większy niż i mniejszy niż zwraca nam inne wyniki, ponieważ wyznaczony przedział nie jest przedziałem domkniętym .
Wyrażenia NOT BETWEEN używamy do wyszukania wszystkich wierszy znajdujących się poza zdefiniowanym przedziałem.
SELECT marka, model, moc km
FROM samochody
Where moc km not between 320 and 550
Wynik:
Przy pomocy tego zapytanie udało nam się znaleźć wszystkie samochody o mocy nie mieszczącej się w przedziale od 320 do 550 koni mechanicznych.
Listy IN i NOT IN
Słowa kluczowego IN używamy do wybierania wartości pokrywającej się z którąkolwiek wymienioną na liście wartością. Wszystkie elementy następujące po IN muszą być oddzielone przecinkami oraz zawarte w między nawiasami okrągłymi.
SELECT nazwisko, miasto
FROM klienci
WHERE miasto in (‚warszawa’, ‚kraków’)
Wynik:
Jeżeli potrzebujemy poznać nazwiska klientów zamieszkujących Kraków oraz Warszawę, wystarczy po operatorze IN w nawiasie wymienić wszystkie miasta które nas interesują.
Operator not in spowoduje wyszukanie klientów, którzy nie spełniają warunków zawartych w zapytaniu.
SELECT nazwisko, miasto
FROM klienci
WHERE miasto not in (‚warszawa’, ‚kraków’)
Wynik:
Takie zapytanie pozwoliło nam wyszukać wszystkich klientów nie zamieszkujących Krakowa i Warszawy.
Wybierania wartości null
Wartość NULL zawiera nieznaną wartość, czyli nie oznacza ona ani zera ani pustego miejsca. Z racji tego, że nul reprezentuje wartość nieznaną nie możemy go porównać z niczym innym, nawet z innymi null. Wartość null nie jest ani większe, ani mniejsze, ani równe jakiejkolwiek wartości, gdyż null jest nieznane. Za to istnieje możliwość wyszukiwania wierszy zawierające wartość null lub not null, do wyszukiwania służy następująca składnia:
WHERE nazwa klumny is (not) null
Taki wzorzec możemy również stosować z innymi operatorami porównania.
SELECT nazwisko, imie, pesel, miasto
FROM klienci
Where miasto = ‚warszawa’
or pesel is null
Wynik:
Powstaje nam zapytanie które przedstawia klientów zamieszkujących Warszawę oraz pesel o wartości null.
Dopasowywanie wyników: LIKE
Czasami zdarza nam się, że chcemy wyszukać jakąś wartość ale do końca nie posiadamy dokładnej wartości. Np.:
- Chcemy wyszukać klienta po nazwisku ale dokładnie nie pamiętamy czy nazywa Kowalski czy też Kowalczyk.
- Potrzebujemy wyszukać numer rejestracyjny samochodu zaczynającego się na KR.
Jeżeli znamy jakiś wzorzec który możemy użyć aby odnaleźć cały wiersz lub jego część. Do takiego wyszukiwania wyników przeznaczone jest słowo kluczowe LIKE. Możemy go używać z polami znakowymi. Z polami zdefiniowanymi jako liczby całkowite, waluty, liczby dziesiętne lub zmiennopozycyjne takie wyszukiwanie nam nie zadziała. Oto składnia:
Where nazwa kolumny (NOT) LIKE ’wzorzec’ (ESCAPE znak ucieczki)
Wzorzec musi być zawarty w cudzysłowie oraz zawierać jeden lub więcej znaków uniwersalnych. Używamy słowa kluczowego ESCAPE, kiedy wzorzec zawiera jeden ze znaków uniwersalnych, który musimy potraktować jako literał.
W SQL dostępne są dwa znaki uniwersalne, które możemy stosować z LIKE:
% – zastępuje on dowolny napis składający się z zera lub większej liczby znaków
_ – zastępuje jeden dowolny znak
SELECT nazwisko, imie
FROM klienci
WHERE nazwisko like ‚ko%’
Wynik:
Zapytanie poszukuje nazwisk zaczynających się od liter „ko” i składającego się z dowolnej liczby znaków. Możemy również zauważyć, że znaki uniwersalne umieszczone są wewnątrz cudzysłowów.
SELECT nazwisko, imie
FROM klienci
WHERE nazwisko like ‚%ow%’
Wynik:
Czasami zdarza się, że nie wiemy co jest na początku czy na końcu oraz nie wiemy czy na początku jest wielka czy mała litera. Możemy uwzględnić taką możliwość, nie umieszczając pierwszej litery we wzorcu tylko stosujemy same znaki uniwersalne na początku i końcu wzorca. Takie zapytanie pozwala nam wyszukać nazwisko nawet jeżeli nie znamy początkowej jaki i końcowej części nazwiska.
SELECT nazwisko, imie
FROM klienci
WHERE nazwisko like ‚_owalsk_’
Wynik:
Jeżeli nie znamy brakujących znaków a znamy ich liczbę możemy zamiast brakującego znaku zastosować znak uniwersalny dla każdego znaku. W tym zapytaniu używamy znaku podkreślenia dla każdej brakującej litery.
Znaków uniwersalnych możemy używać także z NOT LIKE. Kiedy byśmy chcieli znaleźć wszystkie nazwiska które nie zaczynają się na „Ko”.
SELECT nazwisko, imie
FROM klienci
WHERE nazwisko not LIKE ‚ko%’
Znaków uniwersalnych używamy głownie ze słowem kluczowym LIKE. Bez słowa LIKE będą one traktowane dosłownie i traktowane jako wartość.