Zapytania SQL.doc

(658 KB) Pobierz
Rozdział 3

Rozdział 3. Zapytania SQL.

Polecenie select jest używane do pobierania danych z bazy danych (z tabel lub wido­ków). W tym rozdziale zapoznamy się ze składnią polecenia select.

Rozdział ten ma na celu nauczenie formułowania zapytań SQL do wyświetlana wsstkich wierszy z tabeli, wybierania określonych kolumn, używania warunków, używania stów klu­czowych BETWEEN, IN, LIKE Oraz DISTINCT.

Struktura polecenia SELECT

Tabela 3.1

select               opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje

from                             nazwy tabel lub widoków

where               warunek (wybieranie wierszy)

group by               nazwy kolumn

having               warunek (grupowanie wybieranych wierszy)

order by               nazwy kolumn lub pozycje kolumn                                    

 

Każde polecenie select musi posiadać klauzule select oraz from, pozostałe klauzule są opcjonalne.

Inne klauzule wchodzące w skład polecenia select zostaną szczegółowo omówione później.

Wybieranie wszystkich kolumn

Poniższe polecenie select wyświetla wszystkie kolumny i wiersze z tabeli PRA­COWNICY.

select *

from db2admin.pracownicy;

Rys. 3.1.

Wybieranie wszystkich kolumn i wierszy ma sens tylko w przypadku małych tabel, W praktyce buduje się zapytania, które znacznie ograniczają wynik zapytania.

Wybieranie określonych kolumn

Polecenie select, którego użyjemy za chwilę, wyświetla kolumny IMIĘ, NAZWISKO i DZIAŁ z tabeli PRACOWNICY.

SELECT  IMIE, NAZWISKO, DZIAL FROM DB2ADMIN.PRACOWNICY;

Rys.3.2

 

Wybieranie i jednoczesnym porządkowaniem

Następujące polecenie select wyświetla kolumny IMIĘ, NAZWISKO i DZIAŁ z ta­beli PRACOWNICY i jednocześnie porządkuje dane według nazwiska.

SELECT IMIE, NAZWISKO, DZIAL FROM DB2ADMIN.PRACOWNICY

ORDER BY NAZWISKO ASC;

Rys.3.3.

 

Wynik wykonania zapytania jest uporządkowany według kolumny wskazanej w klau­zuli ORDER BY.

Słowo kluczowe asc mówi o tym, że sortowanie zostanie dokonane w porządku rosną­cym. Sortowanie rosnące jest domyślne więc słowo kluczowe asc nie musi być wyspe­cyfikowane. Porządek malejący uzyskuje się przez zastosowanie słowa desc.

W zależności od implementacji bazy danych kolumna występująca w klauzuli ORDER by musi być częścią wyniku wykonania zapytania.

Możliwe jest wskazanie większej liczby kolumn w klauzuli order by. Przykładowo może istnieć potrzeba wybrania danych w tabeli z jednoczesnym sortowaniem według stanowiska, na którym dana osoba pracuje, a następnie według nazwiska.

SELECT IMIĘ, NAZWISKO, STANOWISKO, DZIAŁ

FROM DB2ADMIN.PRACOWNICY ...

ORDER BY STANOWISKO ASC, NAZWISKO ASC;

Rys.3.4.

Istnieje inny sposób na wskazanie kolumn w klauzuli order by. Zamiast nazywać ko­lumny, możemy je wskazać poprzez ich pozycje na liście select.

SELECT  IMIE, NAZWISKO, STANOWISKO, DZIAL FROM DB2ADMIN.PRACOWNICY

ORDER BY 3 ASC, 2 ASC;

Inne przykłady:

ORDER BY 3 ASC, NAZWISKO ASC

ORDER BY 3 ASC, 2 ASC, DZIAL ASC;

Dozwolona jest tylko jedna klauzula order by w zapytaniu select. Klauzulę order by określa się jako ostatnią w całym zapytaniu select.

Wybieranie niepowtarzających się wierszy

Słowo kluczowe distinct zapewnia, że wynik zwrócony z zapytania zawierać będzie tylko niepowtarzające się wiersze. Wszystkie powtarzające się wartości nie zostaną wy­świetlone.

SELECT DISTINCT STANOWISKO FROM DB2ADMIN.PRACOWNICY;

Rys.3.5.

Słowo kluczowe distinct musi występować zaraz po słowie kluczowym select.

SELECT DISTINCT STANOWISKO, DZIAŁ FROM DB2ADMIN. PRACOWNICY;

Takie zapytanie wyświetli wszystkie stanowiska obejmowane w danych działach. Jeżeli w danym dziale pojawią się dwa takie same stanowiska, tylko jedno zostanie wyświetlone.

Słowo distinct eliminuje wiersze, które posiadają duplikaty we wszystkich kolum­nach wyspecyfikowanych w wyrażeniu select. Tylko jedno słowo distinct może zostać użyte w całym zapytaniu select.

Wybieranie określonych wierszy

Do wybrania określonych wierszy z tabeli używa się klauzuli where, która służy do okre­ślenia kryterium wyboru wierszy. W klauzuli WHERE specyflkujemy warunek, który musi być spełniony dla szukanych wierszy.

SELECT IMIĘ, NAZWISKO, STANOWISKO, DZIAL

PROM DB2ADMIN.PRACOWNICY

WHERE STANOWISKO = 'SPRZEDAWCA;

 

Rys.3.6.

W przypadku kolumn typu znakowego, daty lub czasu, wartości dla których sprawdzany jest warunek muszą być otoczone apostrofem. Przy porównywaniu kolumn typu znakowego należy pamiętać, że rozróżniane są wielkie i małe litery. Dla kolumn typu numerycznego jak np. INTEGER, SMALLINT, wartości do porównania nie są otaczane apostrofem.

SELECT NR_KLIENTA, NR_SAMOCHODU, NR_PRACOW_WYP, CENA_JEDN

FROM DB2ADMIN.WYPOZYCZENIA

WHERE CENA_JEDN >= 100;

 

Operatory logiczne używane w klauzuli WHERE

SELECT  NR_KLIENTA, NR_SAMOCHODU, NR_PRACOW WYP, CENA_JEDN

FROM DB2ADMIN. WYPOZYCZENIA

WHERE                CENA_JEDN  = 100 - równa

CENA_JEDN <> 100 - nie równa

CENA_JEDN  > 100 - większa niż

CENA_JEDN >= 100 - większa lub równa

CENA_JEDN  < 100 - mniejsza niż      

CENA_JEDN <= 100 - mniejsza lub równa

 

Operatory AND oraz OR

Kiedy w warunku używamy operatora and, aby wiersz został zawarty w wyniku, oba wa­runki połączone operatorem and muszą zostać spełnione, tzn. muszą zwrócić wartość prawdy (TRUE). Warunek z operatorem or zwróci wartość TRUE, gdy przynajmniej jed­na ze stron zwróci wartość TRUE.

 

 

Rys.3.7.

SELECT IMIE, NAZWISKO, STANOWISKO, DZIAL

FROM DB2ADMIN.PRACOWNICY

WHERE STANOWISKO = 'SPRZEDAWCA'

AND DZIAL = 'OBSŁUGA KLIENTA’;

 

Takie zapytanie SQL zwróci w wyniku wszystkich pracowników pracujących na sta­nowisku sprzedawca w dziale obsługi klienta.

 

SELECT IMIE, NAZWISKO, STANOWISKO, DZIAL

FROM DB2ADMIN.PRACOWNICY

WHERE STANOWISKO = 'SPRZEDAWCA'

OR DZIAL = 'TECHNICZNY';

 

Rys.3.8.

Następne zapytanie zwróci wszystkich pracowników pracujących na stanowisku sprze­dawca oraz wszystkich pracowników pracujących w dziale technicznym niezależnie od tego, czy pracują na stanowisku sprzedawca.

Operatorów and i or możemy używać razem do budowy bardziej złożonych warunków. Następujące zapytanie zwróci wszystkich pracowników pracujących na stanowisku kierow­nika w dziale obsługi klienta oraz wszystkich pracowników z działu technicznego.

Wiersze zostaną uporządkowane wg działu a następnie wg nazwiska.

SELECT IMIE, NAZWISKO, STANOWISKO, DZIAL

FROM DB2ADMIN.PRACOWNICY

WHERE STANOWISKO = 'KIEROWNIK'

AND DZIAL = 'OBSŁUGA KLIENTA'

OR DZIAL = 'TECHNICZNY'

ORDER BY DZIAL, NAZWISKO;

 

Rys.3.9.

W poprzednim przykładzie widoczna jest wyższość operatora and nad operatorem or. Następne zapytanie posiada w klauzuli where warunki otoczone nawiasami. Nawiasy pozwalają określić kolejność sprawdzania warunków.

SELECT IMIE, NAZWISKO, STANOWISKO, DZIAL

FROM DB2ADMIN.PRACOWNICY

WHERE STANOWISKO = 'KIEROWNIK

AND (DZIAL = 'OBSŁUGA KLIENTA' OR DZIAŁ = 'TECHNICZNY')

ORDER BY DZIAL, NAZWISKO;

Zapytanie wyświetli osoby pracujące tylko na stanowisku kierownika w dziale obsługi klienta lub w dziale technicznym.

Rys.3.10.

Predykat IN

Predykat in pozwala porównać wartość do wartości ze zbioru. Wartości typu znakowe­go, daty i czasu muszą być otoczone apostrofem.

SELECT IMIE, NAZWISKO, STANOWISKO, DZIAL

FROM DB2ADMIN.PRACOWNICY

...

Zgłoś jeśli naruszono regulamin