You are on page 1of 19

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE

SQL. wiczenia
praktyczne
Autor: Marcin Lis
ISBN: 83-246-0621-1
Format: A5, stron: 152

ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl

Poznaj zasady pracy z bazami danych


Projektowanie baz i tabel
Wprowadzanie i wybieranie danych
Konstruowanie zoonych zapyta
Bazy danych s krgosupem niemal kadej aplikacji. Rozbudowane systemy
finansowe, aplikacje korporacyjne, portale i sklepy internetowe, a nawet proste
programy do fakturowania opieraj si na bazach danych. Rynek systemw zarzdzania
bazami danych jest bardzo zrnicowany -- mona znale zarwno ogromne aplikacje
komercyjne, jak i systemy dostpne nieodpatnie. Na szczcie dla programistw
i uytkownikw z kadym z takich systemw mona porozumie si za pomoc
jzyka o nazwie SQL. Oczywicie, kada z baz danych ma specyficzne dla siebie
instrukcje, jednak rdze jzyka jest wsplny.
Dziki ksice SQL. wiczenia praktyczne na podstawie prostych i gotowych
do rozwizania przykadw poznasz podstawy tego jzyka. Nauczysz si planowa
i projektowa tabele, umieszcza w nich dane oraz przetwarza je. Dowiesz si,
w jaki sposb formuowa zapytania jzyka SQL, za pomoc ktrych mona
wprowadza dane, wybiera je wedug okrelonych kryteriw i przeprowadza
obliczenia. Poznasz rwnie sposoby pobierania danych z wielu tabel za pomoc
zcze oraz przeczytasz o transakcjach i wizach integralnoci.
Zasady projektowania tabel baz danych
Typy danych
Wprowadzanie danych do bazy
Pobieranie danych
Modyfikowanie i usuwanie danych
Zczenia
Transakcje w systemach baz danych
Po przeczytaniu tej ksiki bdziesz w stanie sprawnie posugiwa si
systemami baz danych opartymi na SQL

Wstp
Rozdzia 1. Podstawy relacyjnych baz danych
Tabele
Klucze
Relacje
Podstawowe zasady projektowania tabel

Rozdzia 2. Praca z tabelami


Typy danych
Tworzenie tabel
Atrybuty kolumn
Indeksy
Modyfikacja tabel
Usuwanie tabel

Rozdzia 3. Umieszczanie danych w bazie


Instrukcja INSERT INTO
Wprowadzanie wielu wierszy
Druga posta instrukcji INSERT

Rozdzia 4. Pobieranie danych z tabel


Podstawy instrukcji SELECT
Sortowanie wynikw zapyta
Kryteria pobierania danych
Niepowtarzalno wierszy

5
9
9
10
11
16

25
25
29
31
35
39
45

47
47
53
55

57
57
61
63
71

SQL wiczenia praktyczne

Rozdzia 5. Modyfikacja i usuwanie danych

73

Instrukcja UPDATE
Modyfikacja danych w tabelach
Usuwanie danych

73
74
78

Rozdzia 6. Zczenia
czenie wynikw zapyta
Pobieranie danych z wielu tabel
Zczenia

81
81
86
90

Rozdzia 7. Funkcje agregujce

97

Rozdzia 8. Grupowanie danych

105

Rozdzia 9. Podzapytania

113

Podzapytania w klauzuli FROM


Podzapytania klauzuli WHERE
Podzapytania w instrukcjach aktualizujcych dane

Rozdzia 10. Transakcje


Transakcje w systemach baz danych
Obejmowanie instrukcji transakcj
Wycofywanie transakcji
Izolacja transakcji

Rozdzia 11. Wizy integralnoci

114
115
119

123
123
124
125
126

129

Integralno danych
Definiowanie klucza obcego
Dodawanie i usuwanie wizw

129
130
133

Dodatek A

Co nowego?

135

Dodatek B

Instalacja PostgreSQL

144

Dane zapisane w tabelach bazy danych mona pobiera za


pomoc instrukcji SELECT. Jej podstawowa posta oglnie wyglda tak:
SELESELkolumna1,Lkolumna2,L...,LkolumnaN
FROMLtabela
[WHERELwarunek]
[ORDERLBYLkolumna1,Lkolumna2,L...,LkolumnaNL[ASSL|LDES]]

Taka konstrukcja oznacza: pobierz wartoci wymienionych kolumn


z tabeli tabela, speniajcych warunek warunek, a wyniki posortuj wzgldem kolumn wymienionych w klauzuli ORDER BY, rosnco (ASC) lub
malejco (DESC). Elementy ujte w nawiasy kwadratowe s opcjonalne.
Aby przewiczy dziaanie tej wersji instrukcji SELECT, utworzymy przykadow tabel pracopraco o nastpujcych kolumnach:
q ad typu INTEGER, bdca kluczem gwnym i zawierajca
identyfikator kadego wiersza;
q amae typu VARCHAR(20), z atrybutem NOT NULL, zawierajca
imi pracownika;
q razpasko typu VARCHAR(30), z atrybutem NOT NULL, zawierajca
nazwisko pracownika;

58

SQL wiczenia praktyczne

q placa typu DECIMAL(DE 2), z atrybutem NOT NULL, zawierajca

miesiczne wynagrodzenie pracownika;


q staropasko typu VARCHAR(20), z atrybutem NOT NULL, zawierajca
stanowisko pracownika1;
q pesel typu CHAR(11), zawierajca PESEL pracownika.
Taka tabela zostanie utworzona za pomoc instrukcji:
SREAEELEABLELpracownicy
(
LLidLINEEGERLPRIMARYLKEY,
LLimieLVARSHAR(20)LNOELNULL,
LLnazwiskoLVARSHAR(30)LNOELNULL,
LLplacaLDESIMAL(7,L2)LNOELNULL,
LLstanowiskoLVARSHAR(20),
LLpeselLSHAR(11)
)

Wypenimy j przykadowymi danymi:


INSERELINEOLpracownicyLVALUESL(1,L'Adam',L'Kowalski',L1624.I0,
'magazynier',L'1234I678901');
INSERELINEOLpracownicyLVALUESL(2,L'Adam',L'Nowak',L3760.00,L'kierownik',
'9234I678901');
INSERELINEOLpracownicyLVALUESL(3,L'Andrzej',L'Kowalski',L4200.00,
'kierownik',L'7234I678901');
INSERELINEOLpracownicyLVALUESL(4,L'Arkadiusz',L'Malinowski',L1600.00,
'kierowca',L'9234I678909');
INSERELINEOLpracownicyLVALUESL(I,L'Andrzej',L'Malinowski',L14I0.00,
'sprzedawca',LNULL);
INSERELINEOLpracownicyLVALUESL(6,L'Krzysztof',L'Nowicki',L1300.00,
'sprzedawca',LNULL);
INSERELINEOLpracownicyLVALUESL(7,L'Kacper',L'Adamczyk',L1610.I0,
'serwisant',L'92341678903');
INSERELINEOLpracownicyLVALUESL(8,L'Kamil',L'Andrzejczak',L1200.00,
'asystent',LNULL);
INSERELINEOLpracownicyLVALUESL(9,L'Krzysztof',L'Arkuszewski',L1I00,
'magazynier',L'02343678913');
INSERELINEOLpracownicyLVALUESL(10,L'Kamil',L'Borowski',L1600.00,
'sprzedawca',L'32349678913');

Jak wiesz z rozdziau 1., w realnie dziaajcej bazie nazwy stanowisk


powinny raczej znajdowa si w oddzielnej tabeli, jednak umieszczenie
ich w tabeli pracownicy uatwi nam wykonywanie dalszych wicze.

Rozdzia 4. Pobieranie danych z tabel

59

W I C Z E N I E

4.1

Wywietlenie zawartoci wybranej tabeli

Uyj instrukcji SELECT do wywietlenia zawartoci tabeli pracopraco.


Instrukcja SELECT, ktra pobierze wszystkie wiersze z tabeli pracopraco,
ma posta:
SELESEL*LFROMLpracownicy;

Symbol * oznacza tu, e interesuje nas zawarto wszystkich kolumn.


Przykadowy efekt dziaania tego polecenia zosta zaprezentowany
na rysunku 4.1. Wida na nim, e faktycznie wywietlone zostay
wszystkie dane wprowadzone uprzednio do tabeli pracopraco, jak rwnie to, e kolejno wierszy jest taka, w jakiej byy one wprowadzane do bazy.

Rysunek 4.1. Efekt dziaania instrukcji SELECT pobierajcej wszystkie dane


z tabeli pracownicy

Aby wywietli zawarto tylko niektrych kolumn z wybranej tabeli,


nazwy tych kolumn naley umieci za sowem SELECT, oddzielajc
poszczeglne nazwy znakami przecinka. Przykadowo mog nas interesowa jedynie imiona, nazwiska i stanowiska pracownikw.
W I C Z E N I E

4.2

Pobieranie danych z wybranych kolumn

Pobierz z tabeli pracopraco dane o imionach, nazwiskach i stanowiskach.


Wykonanie wiczenia zapewni nam instrukcja:
SELESELimie,Lnazwisko,LstanowiskoLFROMLpracownicy;

60

SQL wiczenia praktyczne

Efekt dziaania zosta zaprezentowany na rysunku 4.2.


Rysunek 4.2.
Wynik pobrania
danych z trzech
wybranych kolumn

Istnieje rwnie moliwo zmiany nazw kolumn w wynikach zapytania. Wystarczy, jeli wystpujce w zapytaniu SELECT nazwy zastpimy sekwencjami o oglnej postaci:
nazwa_kolumnyLASLalias

gdzie nazwa_kolumny to nazwa oryginalnej kolumny, a alias to nazwa,


jaka ma si pojawi w wynikach zapytania.
W I C Z E N I E

4.3

Zmiana nazw kolumn w wynikach zapytania

Pobierz z tabeli pracopraco dane o imionach, nazwiskach i stanowiskach, tak aby kolumna placa miaa nazw poragrodzerae.
Wykonanie wiczenia zapewni nam instrukcja:
SELESELimie,Lnazwisko,LplacaLASLwynagrodzenieLFROMLpracownicy;

Efekt wykonania wiczenia zosta zaprezentowany na rysunku 4.3.


Rysunek 4.3.
Nazwy kolumn
w wynikach
zapytania zostay
zmienione

Rozdzia 4. Pobieranie danych z tabel

61

Wyniki zapytania typu SELECT mog by sortowane, co umoliwia klauzula ORDER BY. Sortowanie moe odbywa si w porzdku rosncym
bd malejcym wzgldem jednej bd kilku kolumn.
W I C Z E N I E

4.4

Sortowanie w porzdku rosncym

Wywietl zawarto tablicy pracopraco posortowan wzgldem kolumny razpasko w porzdku rosncym.
Zatem aby wywietli wszystkie wiersze tabeli posortowane wzgldem kolumny razpasko rosnco w porzdku alfabetycznym, naley
zastosowa konstrukcj:
SELESEL*LFROMLpracownicyLORDERLBYLnazwiskoLASS;

lub prociej:
SELESEL*LFROMLpracownicyLORDERLBYLnazwisko;

opcja ASC jest bowiem opcj domyln. Wynik dziaania takiego zapytania zosta zaprezentowany na rysunku 4.4.

Rysunek 4.4. Wynik sortowania tabeli pracownicy wzgldem kolumny


nazwisko w porzdku rosncym

62

SQL wiczenia praktyczne

W I C Z E N I E

4.5

Sortowanie w porzdku malejcym

Wywietl zawarto tablicy pracopraco posortowan wzgldem kolumny razpasko w porzdku malejcym.
Aby wywietli wszystkie wiersze tabeli posortowane wzgldem kolumny razpasko malejco w porzdku alfabetycznym, naley zastosowa konstrukcj:
SELESEL*LFROMLpracownicyLORDERLBYLnazwiskoLDESS;

Wynik dziaania tego zapytania jest widoczny na rysunku 4.5.

Rysunek 4.5. Wynik sortowania tabeli pracownicy wzgldem kolumny


nazwisko w porzdku malejcym

Sortowanie moe si rwnie odbywa wzgldem wikszej liczby kolumn. Moemy sobie na przykad zayczy, aby tablica zostaa posortowana najpierw wzgldem nazwiska, a nastpnie wzgldem pacy.
Przy czym kierunek sortowania jest niezaleny dla kadej kolumny,
czyli mona jednoczenie sortowa wzgldem nazwiska w porzdku
rosncym i pacy w porzdku malejcym.
W I C Z E N I E

4.6

Sortowanie wzgldem kilku kolumn

Wywietl zawarto tablicy pracopraco posortowan wzgldem kolumn


razpasko (w porzdku rosncym) i placa (w porzdku malejcym).
Zadanie takie zostanie zrealizowane przez instrukcj SELECT o postaci:
SELESEL*LFROMLpracownicyLORDERLBYLnazwiskoLASS,LplacaLDESS;

63

Rozdzia 4. Pobieranie danych z tabel

Efekt jego dziaania zosta przedstawiony na rysunku 4.6.

Rysunek 4.6. Wynik sortowania tabeli pracownicy wzgldem dwch kolumn

Moliwoci pobierania danych z tabeli nie ograniczaj si, rzecz jasna,


do wszystkich zapisanych w niej wierszy. Najczciej interesuje nas
przecie tylko pewien podzbir danych, speniajcych zadane kryteria. Otrzymanie okrelonego zestawu wierszy zapewnia nam klauzula
WHERE instrukcji SELECT. Za klauzul WHERE naley umieci warunek,
jaki musz spenia wiersze, aby znalazy si w wynikach zapytania.
Warunek w klauzuli WHERE moe zawiera operatory relacyjne przedstawione w tabeli 5.1 oraz operatory logiczne przedstawione w tabeli 5.22.
Tabela 5.1. Operatory relacyjne

Operator

Opis

Przykad

Operator rwnoci. Zwraca warto ERUE,


jeli argument znajdujcy si z lewej strony
jest rwny argumentowi znajdujcemu si
z prawej strony, w przeciwnym razie
zwracaLFALSE.

id=10,
nazwisko=
'Kowalski'

Poszczeglne dialekty SQL mog rwnie zawiera inne operatory.

64

SQL wiczenia praktyczne

Tabela 5.1. Operatory relacyjne (cig dalszy)


Operator

Opis

Przykad

<>

Zwraca warto ERUE, jeli argument znajdujcy


si z lewej strony jest rny od argumentu
znajdujcego si z prawej strony,
w przeciwnym razie zwraca FALSE.

id<>2, nazwisko
<>'Kowalski'

!=

Takie samo znaczenie jak <>.

id!=2, nazwisko!
='Kowalski'

<

Zwraca warto ERUE, jeli argument


znajdujcy si z lewej strony jest mniejszy
od argumentu znajdujcego si z prawej
strony, w przeciwnym razie zwraca FALSE.

id<10

>

Zwraca warto ERUE, jeli argument znajdujcy


si z lewej strony jest wikszy od argumentu
znajdujcego si z prawej strony,
w przeciwnym razie zwraca FALSE.

id>10

<=

Zwraca warto ERUE, jeli argument


znajdujcy si z lewej strony jest mniejszy
lub rwny argumentowi znajdujcemu si
z prawej strony, w przeciwnym razie
zwraca FALSE.

id<=10

>=

Zwraca warto ERUE, jeli argument znajdujcy


si z lewej strony jest wikszy lub rwny
argumentowi znajdujcemu si z prawej
strony, w przeciwnym razie zwraca FALSE.

id>=10

ISLNULL

Zwraca warto ERUE, jeli argument


znajdujcy si z lewej strony jest rwny NULL,
w przeciwnym razie zwraca FALSE.

adresLISLNULL,
idLISLNULL

ISLNOELNULL

Zwraca warto ERUE, jeli argument


znajdujcy si z lewej strony jest rny
od NULL, w przeciwnym razie zwraca FALSE.

adresLISLNOE
NULL, idLISLNOE
NULL

BEEWEEN
NLANDLM

Zwraca warto ERUE, jeli argument


znajdujcy si z lewej strony ma warto
z przedziau od N do M, w przeciwnym razie
zwraca FALSE.

idLBEEWEEN
10LANDL20

65

Rozdzia 4. Pobieranie danych z tabel


Tabela 5.1. Operatory relacyjne (cig dalszy)
Operator

Opis

Przykad

NOELBEEWEEN
NLANDLM

Zwraca warto ERUE, jeli argument


znajdujcy si z lewej strony nie ma wartoci
z przedziau od N do M, w przeciwnym razie
zwraca FALSE.

idLNOELBEEWEEN
10LANDL20

IN

Zwraca warto ERUE, jeli argument


znajdujcy si z lewej strony jest rwny
jednej z wartoci wymienionych w nawiasie
okrgym za operatorem, w przeciwnym
razie zwraca FALSE.

idLIN(1,L3,LI),
nazwisko
IN('Kowalski',
'Nowak')

NOELIN

Zwraca warto ERUE, jeli argument


znajdujcy si z lewej strony nie jest rwny
jednej z wartoci wymienionych w nawiasie
okrgym za operatorem, w przeciwnym
razie zwraca FALSE.

idLNOE
IN(1,L3,LI),
nazwiskoLNOE
IN('Kowalski',
'Nowak')

Tabela 5.2. Operatory logiczne


Operator

Opis

Przykad

AND

Logiczny iloczyn. Zwraca warto ERUE


wtedy i tylko wtedy, gdy oba argumenty maj
warto ERUE. W kadym innym przypadku
zwraca warto FALSE.

imie='Jan'
ANDLNazwisko=
'Kowalski'

OR

Logiczna suma. Zwraca warto ERUE,


kiedy przynajmniej jeden z argumentw
ma warto ERUE. W kadym innym przypadku
zwraca warto FALSE.

imie='Jan'LOR
imie='Andrzej'

XOR

Logiczna rnica symetryczna (logiczna


alternatywa wykluczajca). Zwraca warto
ERUE, kiedy oba argumenty maj rne wartoci
logiczne, oraz warto FALSE, kiedy oba
argumenty maj takie same wartoci logiczne.

kolumna1LXOR
kolumna2,
poleLXORL64

NOE

Logiczna negacja. Zmienia warto argumentu


na przeciwn. Jeli wartoci argumentu byo
ERUE, wynikiem bdzie FALSE, a jeli wartoci
argumentu byo FALSE, wynikiem bdzie ERUE.

NOELAktywny

66

SQL wiczenia praktyczne

Oprcz przedstawionych w powyszych tabelach operatorw relacyjnych i logicznych stosunkowo czsto wykorzystywane s take dwa
wyraenia operujce na cigach znakw. S to LIKE i NOT LIKE3. Wywoanie funkcji LIKE ma posta:
wyraenieLLIKELwzorzec

Zwraca ona warto TRUE, jeli wyraenie pasuje do wzorca, w przeciwnym razie zwraca FALSE. Jako wyraenie zazwyczaj jest stosowana
nazwa kolumny. Argument wzorzec moe zawiera dwa znaki specjalne. Pierwszy z nich to %, ktry zastpuje dowoln liczb znakw, drugi
to _ (podkrelenie), ktry zastpuje dokadnie jeden znak. Oznacza to,
e do przykadowego wzorca Jar% bd pasoway cigi Jar, Jarusz,
Jarek, Jaropska itp., a do wzorca Warszap_ bd pasoway cigi Warszapa,
Warszapo, Warszapo itp.
Funkcja NOT LIKE ma posta:
wyraenieLNOELLIKELwzorzec

i dziaa odwrotnie do LIKE, czyli zwraca warto TRUE, jeli wyraenie


nie jest zgodne ze wzorcem, lub warto FALSE, kiedy jest zgodne.
Wykonajmy zatem seri wicze, ktre w praktyce poka, jak wykorzystywa warunki i wyraenia w klauzuli WHERE. Operowa bdziemy
na znanej Ci z poprzednich przykadw tabeli pracopraco.
W I C Z E N I E

4.7

Kryteria dla pojedynczej kolumny

Wywietl dane pracownikw o nazwisku Kopalska.


Interesuj nas wiersze tabeli, ktre w kolumnie razpasko zawieraj
warto Kopalska, powinnimy zatem zastosowa warunek razpasko=
'Kopalska', a wic pene zapytanie bdzie miao posta:
SELESEL*LFROMLpracownicyLWHERELNazwisko='Kowalski';

Wynik jego dziaania zosta przedstawiony na rysunku 4.7.

W zalenoci od systemu bazy danych okrela si je rwnie mianem


operatorw lub funkcji.

Rozdzia 4. Pobieranie danych z tabel

67

Rysunek 4.7. Wyszukiwanie ze wzgldu na nazwisko


W I C Z E N I E

4.8

Uycie operatora mniejszoci

Wykorzystaj operator mniejszoci do pobrania listy osb o zarobkach


poniej 1600 z.
Zapytanie SQL bdzie miao posta:
SELESEL*LFROMLpracownicyLWHERELplacaL<L1600;

Efekt jego dziaania zosta przedstawiony na rysunku 4.8.

Rysunek 4.8. Dane osb o zarobkach poniej 1600 z.

Czsto do uzyskania podanych danych niezbdne jest uycie kilku


warunkw poczonych operatorem logicznym. Taki przykad przedstawia nastpne wiczenie.
W I C Z E N I E

4.9

Wykorzystanie operatorw relacyjnych


i iloczynu logicznego

Uyj operatora logicznego AND do uzyskania listy osb o identyfikatorach z przedziau 3 6.


Aby uzyska w wyniku zapytania wartoci pl z podanego zakresu,
naley uy dwch warunkw: ad = 3 i ad <= 6, poczonych operatorem AND, a wic konstrukcji o postaci:
SELESEL*LFROMLpracownicyLWHERELidL>=L3LANDLidL<=L6;

68

SQL wiczenia praktyczne

co naley rozumie jako: wywietl takie wiersze z tabeli pracopraco,


ktrych warto w kolumnie ad jest wiksza lub rwna 3 i jednoczenie mniejsza lub rwna 6. Efekt jej dziaania zosta przedstawiony
na rysunku 4.9.

Rysunek 4.9. Dziaanie iloczynu logicznego

Jeli chcielibymy w prosty sposb wybra dane z pewnego przedziau,


zamiast z dwch warunkw poczonych operatorem AND moemy skorzysta z operatora BETWEEN. Wtedy zamiast pisa:
kolumnaL>=Lpocztek_zakresuLANDLkolumnaL<=Lkoniec_zakresu

jak w poprzednim wiczeniu, moemy zastosowa konstrukcj:


kolumnaLBEEWEENLpocztek_zakresuLANDLkoniec_zakresu
W I C Z E N I E

4.10

Operator BETWEEN zamiast warunku zoonego

Pobierz list pracownikw o pacach od 1400 do 1600 zotych. Uyj


operatora BETWEEN. Posortuj dane wzgldem pacy rosnco.
Jeli do pobrania listy osb o pacach z zakresu 1400 1600 ma zosta
wykorzystany operator BETWEEN, naley uy instrukcji:
SELESEL*LFROMLpracownicyLWHERELplacaLBEEWEENL1400LANDL1600LORDERLBYLplaca;

Niekiedy konieczne jest pobranie danych o wartociach nalecych


do pewnego zbioru, a nie przedziau. W takiej sytuacji mona uy
zarwno serii instrukcji warunkowych poczonych operatorami logicznymi, jak i operatora IN. Dziaanie bdzie takie samo, cho ta druga
moliwo pozwala na prostszy i duo czytelniejszy zapis instrukcji.
Operator IN ma ogln posta:
wartoLINL(warto1,Lwarto2,L...,LwartoN)

Oba sposoby zostan wykorzystane w dwch nastpnych wiczeniach.

Rozdzia 4. Pobieranie danych z tabel

69

W I C Z E N I E

4.11

Wybranie wierszy o identyfikatorach z okrelonego zbioru

Wywietl dane osb o identyfikatorach 3, 5 i 7, wykorzystujc instrukcje warunkowe poczone operatorem logicznym.
Aby uzyska dane osb o identyfikatorach 3, 5 i 7, naley zastosowa
trzy instrukcje warunkowe: ad = 3, ad = 5 i ad = D, poczone za pomoc operatora OR (czyli sumy logicznej). Instrukcja taka bdzie wic
miaa posta:
SELESEL*LFROMLpracownicyLWHERELid=3LORLid=ILORLid=7;

Co oznacza: wywietl takie wiersze z tabeli pracopraco, ktrych warto


w kolumnie ad jest rwna 3 lub rwna 5 lub rwna 7. Po wykonaniu
tej instrukcji na ekranie ujrzymy widok taki jak zaprezentowany na
rysunku 4.10.

Rysunek 4.10. Wiersze o identyfikatorach z okrelonego zbioru


W I C Z E N I E

4.12

Uycie operatora IN zamiast operatorw relacyjnych

Wykonaj zadanie z wiczenia 4.11, wykorzystujc operator IN.


Jeli do wywietlenia rekordw o identyfikatorach 3, 5 i 7 ma by uyty
operator IN, naley zastosowa instrukcj:
SELESEL*LFROMLpracownicyLWHERELidLIN(3,LI,L7);

Efekt jej wykonania bdzie taki sam jak zaprezentowany na rysunku 4.10.

Wybranie z tabeli danych, ktre pasuj do okrelonego wzorca, umoliwi opisany na pocztku rozdziau operator LIKE.

70

SQL wiczenia praktyczne

W I C Z E N I E

4.13

Dane pasujce do okrelonego wzorca

Wywietl dane wszystkich osb, ktrych imiona zaczynaj si od


cigu Ka.
Jeli chcemy pozna dane wszystkich osb, ktrych imiona zaczynaj
si od cigu Ka, powinnimy zastosowa instrukcj:
SELESEL*LFROMLpracownicyLWHERELimieLLIKEL'Ka%';

Efekt dziaania tego polecenia jest widoczny na rysunku 4.11.

Rysunek 4.11. Wywietlenie danych pasujcych do wybranego wzorca


W I C Z E N I E

4.14

Wyszukiwanie wartoci pustych

Wyszukaj w tabeli identyfikatory oraz imiona i nazwiska pracownikw, dla ktrych baza nie zawiera numerw PESEL.
Wyszukanie wszystkich pracownikw, dla ktrych nie zosta wprowadzony numer PESEL, zapewni nam operator IS NULL. Zapytanie bdzie
miao posta:
SELESELid,Limie,LnazwiskoLFROMLpracownicyLWHERELpeselLISLNULL;

a jego wynik zosta przedstawiony na rysunku 4.12.


Rysunek 4.12.
Dane osb,
dla ktrych brakuje
numerw PESEL

Rozdzia 4. Pobieranie danych z tabel

71

Warunek w klauzuli WHERE nie musi ogranicza si do danych pobieranych z jednej kolumny; mona stosowa warunki zoone poczone
operatorami logicznymi.
W I C Z E N I E

4.15

Wiele kolumn w klauzuli WHERE

Wywietl znajdujce si w tabeli pracopraco dane osb, ktrych paca


jest wiksza ni 1400 z, pracujcych na stanowiskach innych ni kierownik, dla ktrych znany jest numer PESEL.
Aby wykona wiczenie, naley zastosowa instrukcj:
SELESEL*LFROMLpracownicyLWHERELplacaL>L1400LANDLstanowiskoL<>
'kierownik'LANDLpeselLISLNOELNULL;

Efekt dziaania tego zapytania zosta zaprezentowany na rysunku 4.13.

Rysunek 4.13. Wywietlenie danych speniajcych kilka warunkw

Instrukcja SELECT moe by rwnie uzupeniona o klauzul DISTINCT,


ktra gwarantuje niepowtarzalno wierszy wynikowych, innymi
sowy, eliminuje duplikaty z wynikw zapytania. Zamy, e chcemy
si dowiedzie, jakie rne nazwiska nosz osoby, ktrych dane s zapisane w tabeli pracownicy. Jeli zastosujemy typow instrukcj:
SELESELnazwiskoLFROMLpracownicyLORDERLBYLnazwisko;

w wynikach znajd si podwjne dane dla nazwisk Kowalski i Malinowski (rysunek 4.14). Nie o to nam jednak chodzio. Do uzyskania
prawidowych wynikw niezbdne bdzie wic uycie sowa DISTINCT.

72

SQL wiczenia praktyczne

Rysunek 4.14.
W wynikach
zapytania
pojawiy si
duplikaty danych

W I C Z E N I E

4.16

Uycie klauzuli DISTINCT

Napisz zapytanie, ktre pobierze z tabeli pracopraco list nazwisk.


W wynikach nie mog si pojawi duplikaty danych.
Wyeliminowanie duplikatw danych uzyskamy, umieszczajc za sowem SELECT sowo DISTINCT. Instrukcja bdzie wic miaa posta:
SELESELDISEINSELnazwiskoLFROMLpracownicyLORDERLBYLnazwisko;

Wynik jej dziaania zosta zaprezentowany na rysunku 4.15.


Rysunek 4.15.
Podwjne dane
zostay usunite
z wynikw
zapytania

You might also like