• Nie Znaleziono Wyników

Praktyczne wprowadzenie do języka SQL

3.2. Język Manipulacji Danymi

3.2.1. Układanie zapytań

Wybór określonych kolumn z tabeli (projekcja)

Przykładowo – użytkownik potrzebuje listę alfabetyczną pracowników w układzie: nazwisko, imię, data urodzenia. Listę można utworzyć, uruchamiając wykonanie zda-nia SQL:

SELECT Nazwisko, Imie, Data_ur FROM Pracownicy

ORDER BY Nazwisko

W wyniku wykonania takiego polecenia utworzona zostanie lista wszystkich pra-cowników w kolejności nazwisk od A do Z. Zastosowanie klauzuli ORDER BY po-woduje sortowanie danych wynikowych w kierunku rosnącym (opcja ASC –

ascen-ding), jeżeli wymagany jest kierunek malejący, należy po nazwie kolumny, według

której odbywa się sortowanie, wpisać DESC (descending – malejąco). Wynik działania polecenia SQL:

Nazwisko Imię Data_ur

Adamska Ewa 1963-10-27 Bielska Janina 1958-07-15 Bielski Leszek 1955-12-04 Burski Adam 1975-04-10 Frankowski Jerzy 1973-10-23 Gawron Anna 1976-03-03 Kowalski Piotr 1973-11-06 Mirski Tadeusz 1975-08-12 Nawrot Kamila 1950-02-07 Nowak Jan 1965-12-23 Pakulski Damian 1974-06-14 Porada Maria 1971-05-09 Wirski Jakub 1969-05-13 Wyzga Anatol 1959-11-09

Działanie klauzuli DISTINCT

Zastosowanie klauzuli DISTINCT w zdaniu SQL powoduje eliminowanie wartości powtarzających się. Działanie tej klauzuli zilustrowano w tabeli PRODUKTY, w której przechowywane są dane dotyczące asortymentu produktów oferowanych przez hurtow-nię „Fitness”. Polecenie wybierające całą zawartość tabeli PRODUKTY:

SELECT * FROM PRODUKTY

ID_P Nazwa Opis Rozmiar Kolor Ilość Cena_jedn

10 t-shirt damski M czarny 200 10.00

11 t-shirt damski L czerwony 200 10.00

12 t-shirt męski XL czarny 150 15.00

13 bluza polar Bez wym szary 250 20.00

14 bluza bawełna Bez wym szary 250 20.00

15 dres damski S granatowy 80 45.00

16 dres męski L czarny 50 50.00

17 szorty damskie S Czarny 120 12.50

Lista nazw produktów utworzona poprzez zastosowanie zdania SELECT bez klau-zuli DISTINCT i z klauzulą DISTINCT:

SELECT Nazwa SELECT DISTINCT Nazwa

Wynik działania zdania SELECT Wynik działania zdania SELECT bez klauzuli DISTINCT: z klauzulą DISTINCT:

Nazwa Nazwa t-shirt t-shirt t-shirt bluza t-shirt dres bluza szorty bluza dres dres szorty

Zapytania z zastosowaniem wyliczeń

W treści zapytania do bazy danych mogą być umieszczane obliczenia, na przykład, jeżeli w tabeli PRACOWNICY w jednej z kolumn przechowywane są dane dotyczące uposażenia miesięcznego każdego z pracowników, a potrzebna jest wielkość rocznych dochodów pracowników, to można zastosować konstrukcję:

SELECT Id_Pracownika, Nazwisko, Imię, Uposażenie*12 FROM PRACOWNICY

Wynik działania takiego zdania SQL (ostatnia kolumna, której nazwa tworzona jest przez system poprzez nazwę własną oraz wykonane wyliczenie, zawiera wartości wyliczone; należy pamiętać, że rzeczywista zawartość kolumny Uposażenie nie zmie-nia się, dalej zapisane są w niej zarobki miesięczne):

Id_pracownika Nazwisko Imię Uposażenie*12

100 Bielski Leszek 36000.00 120 Wyzga Anatol 33600.00 101 Adamska Ewa 30000.00 112 Bielska Janina 30000.00 103 Kowalski Piotr 21600.00 122 Burski Adam 24000.00 126 Frankowski Jerzy 24000.00 125 Gawron Anna 18000.00 106 Mirski Tadeusz 24000.00 104 Wirski Jakub 25200.00 117 Nawrot Kamila 27600.00 115 Porada Maria 24000.00 116 Nowak Jan 30000.00 109 Pakulski Damian 20400.00

W zdaniach SQL można umieszczać wyliczenia polegające na dodawaniu, odej-mowaniu, mnożeniu i dzieleniu – oczywiście w odniesieniu do kolumn, które zawiera-ją wartości liczbowe. W wyliczeniach może wystąpić więcej niż jedna kolumna; przy-kładowo, w tabeli PRODUKTY pamiętane są w kolumnie Cena_jedn ceny jednostkowe poszczególnych pozycji oraz w kolumnie Ilość – ilość produktu na sta-nie. Po pomnożeniu obu kolumn przez siebie otrzymamy wartość całkowitą całego zapasu każdego z produktów:

SELECT Id_P, nazwa, ilosc*cena_jedn FROM PRODUKTY

ID_P Nazwa Ilość * Cena_jedn

10 t-shirt 2000.00 11 t-shirt 2000.00 12 t-shirt 2250.00 13 bluza 5000.00 14 bluza 5000.00 15 dres 3600.00 16 dres 2500.00 17 szorty 1500.00

W przypadkach układania zapytań z wyliczeniami często wykorzystuje się możli-wość stosowania tzw. nazw zastępczych (aliasów) dla kolumn zawierających wyniki wyliczeń. Możliwość nadania nazwy aliasowej zapewnia klauzula AS:

SELECT Id_P, nazwa, ilosc*cena_jedn AS Wartość_towaru FROM PRODUKTY

ID_P Nazwa Wartość_towaru

10 t-shirt 2000.00 11 t-shirt 2000.00 12 t-shirt 2250.00 13 bluza 5000.00 14 bluza 5000.00 15 dres 3600.00 16 dres 2500.00 17 szorty 1500.00

Podane przykłady konstrukcji zdań SQL dotyczyły sytuacji, gdy z tabel wybierane były wszystkie wiersze. Nie zawsze jednak zachodzi taka potrzeba. Klauzula WHERE umożliwia wyszukiwanie wierszy, które spełniają określone kryteria. Do konstruowa-nia kryteriów wyszukiwakonstruowa-nia używa się:

• Operatorów porównania

= równy, > większy,

< > nie równy, <= mniejszy równy, < mniejszy, >= większy równy. • Operatorów logicznych

AND, OR, NOT, w odniesieniu do których obowiązują następujące reguły: – wyrażenia w kryterium wyboru są przeliczane od strony lewej do prawej, – jeżeli w kryterium wyboru znajdują się podwyrażenia w nawiasach, są one

wyliczane pierwsze,

– warunki z operatorami NOT są wyliczane przed warunkami z operatorami AND i OR,

– warunki z operatorami AND są wyliczane przed OR. • Operatorów SQL

BETWEEN AND, IN/NOT IN, LIKE/NOT LIKE, IS NULL/IS NOT NULL.

Zapytania z zastosowaniem operatorów porównania

Generowanie listy pracowników, których uposażenie miesięczne jest mniejsze niż 2000,00 zł.

SELECT Id_pracownika, Nazwisko, Imię, Uposażenie FROM PRACOWNICY

WHERE Uposażenie < 2000

Id_pracownika Nazwisko Imię Uposażenie

103 Kowalski Piotr 1800.00

125 Gawron Anna 1500.00

109 Pakulski Damian 1700.00

Zapytania z zastosowaniem operatorów logicznych

Za pomocą operatorów logicznych konstruowane są złożone kryteria wyszukiwa-nia. Przykładowo, lista produktów w rozmiarze „s” lub „xl”:

SELECT *

FROM PRODUKTY

WHERE Rozmiar = ‘s’ OR Rozmiar = ‘xl’

ID_P Nazwa Opis Rozmiar Kolor Ilość Cena_jedn

12 t-shirt męski XL czarny 150 15.00

15 dres damski S granatowy 80 45.00

Zapytania z zastosowaniem operatorów SQL

• Zastosowanie operatora BETWEEN/NOT BETWEEN

Lista produktów, których cena zawarta jest między 10 zł a 15 zł SELECT Id_p, Nazwa, Opis, Ilość, Cena_jedn

FROM PRODUKTY

WHERE Cena_jedn BETWEEN 10 AND 15

ID_P Nazwa Opis Ilość Cena_jedn

10 t-shirt damski 200 10.00

11 t-shirt damski 200 10.00

12 t-shirt męski 150 15.00

17 szorty damskie 120 12.50

Użycie operatora SQL BETWEEN AND jest równoważne z zastosowaniem dwóch operatorów porównania:

SELECT Id_p, Nazwa, Opis, Ilość, Cena_jedn FROM PRODUKTY

WHERE Cena_jedn >=10 AND Cena_jedn <= 15

W podanym przykładzie warto zwrócić uwagę na przewagę stosowania operato-rów SQL nad operatorami matematycznymi – składnia zdania SELECT jest zdecydo-wanie prostsza w pierwszym przypadku.

• Zastosowanie operatora IN/NOT IN

Lista pracowników pracujących na stanowiskach kierowniczych lub samodzielnych SELECT Nazwisko, Imię, Stanowisko

FROM PRACOWNICY

WHERE Stanowisko IN (‘kierownik’, ‘specjalista’, ‘menedżer’)

Nazwisko Imię Stanowisko

Bielski Leszek kierownik Wyzga Anatol menedżer

Adamska Ewa specjalista

Bielska Janina specjalista

Nowak Jan menedżer

Podobnie w tym przypadku konstrukcja z operatorem IN może być zastąpiona przez:

SELECT Nazwisko, Imię, Stanowisko FROM PRACOWNICY

WHERE Stanowisko = ‘kierownik’ OR Stanowisko = ‘menedżer’ OR Stanowisko = ‘specjalista’

• Kryterium wyboru z zastosowaniem wzorca wyszukiwania – operator LIKE/NOT LIKE

Znakiem używanym do tworzenia wzorca wyszukiwania jest „%”, znak ten repre-zentuje dowolną sekwencję znaków w łańcuchu, natomiast podkreślenie, czyli „_” oznacza dowolny pojedynczy znak w łańcuchu. Przykłady wzorców:

‘B%’ – oznacza, że szukany jest łańcuch znaków rozpoczynający się na literę B, ‘B___’ – oznacza, że szukany jest łańcuch o długości 4 znaków, rozpoczynający się na literę B,

‘%B’ – oznacza, że szukany jest łańcuch znaków o długości przynajmniej = 1, z literą B na końcu,

‘%B% – oznacza, że szukany jest łańcuch znaków zawierający na dowolnej pozy-cji literę B.

Lista nazwisk, imion i dat urodzenia pracowników, których nazwiska zaczynają się na literę B:

SELECT Nazwisko, Imię, Data_ur FROM PRACOWNICY

WHERE Nazwisko LIKE ‘B%’

Nazwisko Imię Data_ur

Bielska Janina 1958-07-15 Bielski Leszek 1955-12-04 Burski Adam 1975-04-10

Wszystkie wymienione operatory SQL (BETWEEN, IN, LIKE) mogą być użyte w składni zdania z zaprzeczeniem NOT; gdyby w poleceniu prezentowanym powyżej użyte zostało zaprzeczenie NOT, oznaczałoby to wybór pracowników, których nazwi-ska nie zaczynają się na literę B:

SELECT Nazwisko, Imię, Data_ur WHERE Nazwisko

FROM PRACOWNICY NOT LIKE ‘B%’