Bazy Danych cz 4

background image

1

Porządkowanie wyników

Do uporządkowania wyniku służy klauzula

ORDER BY

Lista kolumn oddzielona przecinkami

SELECT pracownikNr, imie FROM Personel ORDER BY imie;

Alternatywnie zamiast nazwy można używać numerów

kolumn

Numery kolumn są zgodne z kolejnością występowania
nazwy kolumny w klauzuli

SELECT

SELECT pracownikNr, imie FROM Personel ORDER BY 2, 1;

Numery kolumn stosujemy wyłącznie, gdy kolumna nie

ma określonej nazwy

(kolumny wyliczane)

i nie ma

określonej nazwy zastępczej

(klauzula AS)

background image

2

Klauzula

ORDER BY

zawsze znajduje się na końcu

zapytania

SQL

Sortowanie może odbywać się w porządku rosnącym

ASC

(wartość domyślna) lub malejącym

DESC

Typ sortowania jest umieszczony bezpośrednio po
nazwie kolumny w klauzuli

ORDER BY

SELECT pracownikNr, imie FROM Personel ORDER BY imie
DESC, pracownikNr;

Sortowanie może odbywać się po kilku kolumnach

SELECT pracownikNr, imie FROM Personel ORDER BY imie,

pracownikNr;

background image

3

Sortowanie po kilku kolumnach

Umieszczenie kilku kolumn w klauzuli

ORDER BY

pozwala na sortowanie złożone

SELECT pracownikNr, imie FROM Personel ORDER BY imie,

pracownikNr;

Pierwszy element z listy nazywamy

głównym kluczem

sortowania

Wyznacza kolejność uporządkowania całej tabeli

wynikowej

Jeżeli wartości głównego klucza sortowania są

identyczne przeprowadzane jest sortowanie względem

kolejnej kolumny z listy

Podrzędny klucz sortowania

background image

4

SELECT nieruchomoscNr, typ, pokoje, czynsz

FROM Nieruchomosc

ORDER BY typ, czynsz DESC;

nieruchomoscNr

typ

pokoje

czynsz

PG16

mieszkanie

4

450

PL94

mieszkanie

4

400

PG36

mieszkanie

3

375

PG4

mieszkanie

3

350

PA14

dom

6

650

PG21

dom

5

600

background image

5

Funkcje agregujące

COUNT

zwraca liczbę wartości występujących w kolumnie

SUM

zwraca sumę wartości występujących w kolumnie

AVG

średnia wartości występujących w kolumnie

MIN, MAX

minimalna i maksymalna wartość w kolumnie

Funkcje obliczane są na podstawie jednej kolumny tabeli i
zwracają jedną wartość

Funkcje COUNT, MIN, MAX

można stosować do każdego

rodzaju pól

SUM i AVG

tylko do pól liczbowych

Funkcja

COUNT

nie pomija wartości

NULL

background image

6

Funkcje agregujące mogą być zastosowane wyłącznie
na liście SELECT oraz HAVING

W ilu nieruchomościach czynsz jest wyższy niż 350

zł ?

SELECT

COUNT(*)

AS

Liczba

FROM

Nieruchomość WHERE czynsz > 350;

Klauzula

WHERE

czynsz

>

350

powoduje

ograniczenie liczby wierszy

Funkcja COUNT(*) powoduje zliczenie wszystkich
wierszy dla których klauzula WHERE jest prawdziwa

liczba
5

background image

7

Ile nieruchomości odwiedzono w maju 2001 roku ?

SELECT COUNT(DISTINCT nieruchomoscNr) AS Liczba
FROM Wizyta WHERE dataWizyty BETWEEN '1.05.2001'
AND '31.05.2001';

Klauzula WHERE ogranicza datę wizyty do miesiąca maj 2001

roku

Funkcja Count() zlicza całkowitą liczbę wizyt w danej

nieruchomości (nieruchomoscNr)

Ponieważ jedna nieruchomość może być odwiedzana kilka razy
klauzula DISTINCT eliminuje nieruchomości występujące

wielokrotnie

Zastosowanie klauzuli DISTINCT przed nazwą kolumny pozwala

wyeliminować powtórzenia przed przystąpieniem do obliczania funkcji

Nie wpływa na wynik działania funkcji MIN(), MAX()

Może być użyta tylko raz w zapytaniu

background image

8

Oblicz, ilu jest dyrektorów i jaka jest ich sumaryczna pensja

SELECT Count(pracownikNr) AS Liczba,
SUM(pensja) AS Suma FROM Personel WHERE

stanowisko='dyrektor';

Oblicz najmniejszą, największą i średnią pensję

pracownika

SELECT Min(pensja) AS Minimum, Max(pensja) AS
Maksimum, AVG(pensja) AS 'Średnia' FROM

Personel;

Minimum

Maksimum

Średnia

9000.00

30000.00

17000.00

Liczba

Suma

2

54000.00

background image

9

GROUP BY

Zapytanie

zawierające

klauzulę

GROUP

BY

nazywamy zapytaniem grupującym

Wyniki zapytania SELECT dzielone są na grupy i dla

każdej

grupy

zwracany

jest

jeden

wiersz

podsumowania

Kolumny wymienione w klauzuli GROUP BY

nazywamy kolumnami grupowania

Dla każdego elementu z listy SELECT musi istnieć

możliwość jednoznacznego wyznaczenia wartości w

grupach

background image

10

Ograniczenia klauzuli GROUP BY

W klauzuli

SELECT

mogą się znaleźć

Nazwy kolumn grupowania

Funkcje agregujące

Stałe

Wyrażenia

zawierające

kombinacje

powyższych

elementów

Wszystkie nazwy na liście

SELECT

muszą występować w

klauzuli

GROUP BY

Wyjątek stanowią nazwy kolumn stosowane w

funkcjach agregujących

W klauzuli

GROUP BY

mogą pojawić się kolumny nie

występujące w klauzuli

SELECT

background image

11

Oblicz dla każdego biura liczbę zatrudnionych w nim

pracowników oraz ich sumaryczną pensję

SELECT biuroNr, COUNT(pracownikNr) AS Liczba,
Sum(Pensja) AS Suma FROM Personel GROUP BY
biuroNr ORDER BY biuroNr;

Kolumny

pracownikNr

oraz pensja występują w

klauzuli

SELECT

jako argumenty funkcji agregujących

Kolumna biuorNr musi wystąpić w klauzuli

GROUP BY

biuroNr

Liczba

Suma

B003

3

54000.00

B005

2

39000.00

B007

1

9000.00

background image

12

Pracownicy są dzieleni na grupy według biur

W ramach każdej grupy pracownicy mają ten samu

numer biura

Dla każdej grupy jest wyliczana liczba pracowników

oraz suma wartości z kolumny pensja

Wynik jest porządkowany według rosnących wartości

numerów biur

background image

13

Wybór grup

W celu wybrania grup stosuje się klauzulę

HAVING

Kolumny występujące w klauzuli

HAVING

muszą

się pojawić na liście

GROUP BY

Argumenty funkcji agregujących

Dla każdego biura zatrudniającego więcej niż jednego

pracownika, podaj liczbę pracowników biura oraz sumę ich

zarobków

SELECT biuroNr, COUNT(pracownikNr) AS Liczba,
SUM(pensja) AS Suma FROM Personel GROUP BY
biuroNr HAVING COUNT(pracownikNr) > 1 ORDER
BY
biuroNr;

background image

14

Podzapytania

Podzapytania są to zapytania SELECT umieszczone
w innym zapytaniu SELECT

Zapytanie wewnętrzne

pomaga określić wynik

zapytania zewnętrznego

Zapytania wewnętrzne można wykorzystać w
klauzulach

WHERE

i

HAVING

zapytania

zewnętrznego

INSERT, UPDATE, DELETE

background image

15

Rodzaje podzapytań

Podzapytania skalarne

Zwracają jedną kolumnę i jeden wiersz – jedną wartość

Mogą być stosowane zawsze gdy wymagana jest

pojedyncza wartość

Podzapytanie krotkowe

Zwracają kilka kolumn i jeden wiersz (projekcja – jeden

atrybut)

Podzapytania tabelowe

Zwracają jedną lub więcej kolumn i wiele wierszy

Podzapytanie stosowane jest gdy potrzebna jest relacja

background image

16

Podzapytania na liście kolumn klauzuli SELECT

Zapytanie skalarne – zwraca wyłącznie jeden rekord

Podzapytanie musi być otoczone nawiasami

Podaj między pensją każdego pracownika a wartością

średnią pensji wszystkich pracowników

SELECT imie, nazwisko, pensja FROM Personel;

Dane o pracowniku i jego pensji

SELECT AVG(pensja) FROM Personel;

Średnia wartość pensji wszystkich pracowników

SELECT imie, nazwisko, pensja

-

(SELECT

AVG(pensja) FROM Personel)

AS 'Różnica'

FROM

Personel

;

background image

17

Jeżeli w podzapytaniu odwołujemy się do tej samej tabeli
co zapytanie zewnętrzne należy zastosować nazwy

zastępcze

SELECT

biuroNr

,

(SELECT COUNT(pracownikNr) AS Liczba FROM Personel p
WHERE p.biuroNr =

b.biuroNr

)

,

(SELECT SUM(pensja) AS Suma FROM Personel p WHERE

p.biuroNr =

b.biuroNr

)

FROM Biuro b
ORDERED BY biuroNr;

background image

18

Podzapytania w klauzuli WHERE

Podzapytanie typu skalarnego i krotkowego

Może być stosowane po operatorach:

=, <, >, <=, >=, <>, IN, ANY, ALL, SOME

Podaj wszystkich pracowników, których pensja
jest wyższa od średniej

SELECT pracownikNr, imie, nazwisko, pensja
FROM Personel WHERE pensja > ( SELECT
AVG
(pensja) FROM Personel);

background image

19

Zasady tworzenia podzapytań

W podzapytaniach nie wolno stosować klauzuli ORDER
BY

Może być zastosowana w najbardziej zewnętrznym
zapytaniu

SELECT

Lista SELECT podzapytania musi składać się z

pojedynczej nazwy kolumny lub wyrażenia

Wyjątek stanowią podzapytania z operatorem EXIST

Nazwy kolumn w podzapytaniu odnoszą się do tabeli z
klauzuli FROM podzapytania

Odwołanie do kolumny zapytania zewnętrznego wymaga
poprzedzenia jej nazwą tabeli

Jeżeli podzapytanie jest jednym z dwóch argumentów, to

musi występować po prawej stronie porównania

background image

20

SELECT * FROM Personel WHERE pensja <
( SELECT AVG(pensja) FROM Personel

ORDER BY

imie

);

Błędna klauzula ORDER BY w podzapytaniu

SELECT * FROM Personel WHERE (

SELECT

AVG(pensja) FROM Personel

< pensja ) ORDER BY

imie;

Podzapytanie z lewej strony operatora <

SELECT * FROM Personel WHERE pensja <
(

SELECT

AVG(pensja),

MIN(pensja)

FROM

Personel);

Dwie nazwy kolumn w podzapytaniu

Podzapytanie zwraca rekord składający się z dwóch
atrybutów

background image

21

Zastosowanie IN

Operator IN pozwala sprawdzić czy szukana wartość
atrybutu znajduje się w określonym zbiorze

Podaj wszystkie nieruchomości nadzorowane przez
pracowników zatrudnionych w biurze przy '163 Main St'

Biuro znajdujące się przy wskazanej ulicy może zatrudniać wielu

pracowników

Każdy pracownik może nadzorować kilka nieruchomości

Niezbędne informacje znajdują się w tabeli Nieruchomosc

SELECT * FROM Nieruchomosc WHERE Pracownik IN

( SELECT pracownikNr FROM Personel WHERE BiuroNr =

( SELECT biuroNr FROM Biuro WHERE ulica = '163 Main St')

)

;

background image

22

ANY/SOME - ALL

Operatory mogą być stosowane z podzapytaniami,

które dają w wyniku pojedynczą kolumnę rekordów

ALL

warunek będzie prawdziwy, gdy spełniają go

wszystkie wartości otrzymane w podzapytaniu

ANY

warunek prawdziwy, gdy spełnia go dowolna (jedna

lub kilka) wartość otrzymana za pomocą podzapytania

Znajdź wszystkich pracowników, którzy mają pensje wyższą niż

przynajmniej jeden pracownik biura o numerze B003

SELECT * FROM Personel

WHERE pensja >

( SELECT Min(pensja) FROM Personel

WHERE biuroNr = 'B003' );

background image

23

SELECT * FROM Personel

WHERE pensja >

SOME (SELECT pensja FROM Personel

WHERE biuroNr = 'B003');

Zapytanie wewnętrzne daje w wyniku zbiór {12000, 18000, 24000}

Zapytanie zewnętrzne pozwala wybrać tych pracowników, których

pensja jest większa niż przynajmniej jedna wartość z tego zbioru

Znajdź wszystkich tych pracowników, którzy mają pensję wyższa niż

pensja każdego z pracowników biura o numerze B003

SELECT * FROM Personel

WHERE pensja

>

ALL ( SELECT pensja FROM Personel

WHERE biuroNr > 'B003' );

Pensja szukanego pracownika musi być większa od każdej pensji

zawartej w zbiorze {12000, 18000, 24000}

background image

24

EXIST – NOT EXIST

Słowa kluczowe

EXIST

,

NOT EXIST

można stosować

jedynie z podzapytaniami

Wartością wyrażenia jest

prawda

lub

fałsz

Predykat EXIST jest prawdziwy wtedy i tylko wtedy,

gdy w tabeli będącej wynikiem podzapytania istnieje

przynajmniej

jeden wiersz

Jeżeli wynikiem podzapytania jest tabela pusta

otrzymujemy fałsz

NOT EXIST jest predykatem o znaczeniu przeciwnym

Sprawdzany jest tylko fakt istnienia lub braku wierszy

Podzapytanie może zwracać dowolną liczbę kolumn

background image

25

Znajdź wszystkich pracowników zatrudnionych w

biurach w Londynie

SELECT * FROM Personel p
WHERE EXIST

( SELECT * FROM Biuro b

WHERE

p.biuroNr

= b.biuroNr AND miasto =

'Londyn');

Warunek

p.biuroNr

=

b.biuroNr

zapewnia, że dla

danego pracownika rozważamy jedynie wiersz z

danymi biura w którym zatrudniony jest pracownik

Pominięcie tego warunku spowoduje wybranie

wszystkich wierszy z relacji Personel


Document Outline


Wyszukiwarka

Podobne podstrony:
kwerendy wybierające, SCI, OB-IV, bazy danych cz I
Bazy Danych cz III [tryb zgodności]
Bazy danych - cz zagadnie do egzaminu, Automatyka i Robotyka, Semestr 3, Bazy danych, BD, BD, Ba
Bazy Danych cz II [tryb zgodnos Nieznany (2)
kwerendy podsumowujące, SCI, OB-IV, bazy danych cz I
Bazy Danych cz 2
Bazy Danych cz 3
Bazy Danych cz 5
Bazy Danych cz 6
Bazy Danych cz 1
3 Bazy danych SQL cz 1 wykład
Bazy danych - podstawowe kroki w projektowaniu cz 2 - wyklady, Zajęcia z Baz Danych - MS Access, cz
Bazy danych - podstawowe kroki w projektowaniu cz 2 - wyklady, Zajęcia z Baz Danych - MS Access, cz
M Smyczek i M Kaim Od zera do ECeDeeLa cz 5 Bazy danych
3 Bazy danych SQL cz 2 wykład
3 Bazy danych SQL cz 2 wykład
Bazy Danych Elementy Jezyka SQL cz I
3 Bazy danych SQL cz 2 wykład

więcej podobnych podstron