KZ BD w03 2 id 256664 Nieznany

background image

Bazy danych – wykład trzeci

Konrad Zdanowski

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL - przypomnienie

Podstawowa forma kwerendy SQL:

s e l e c t A1 ,

. . . , Ak

from R1 ,

. . . , Rn

where <warunek > ;

Odpowiada jej w algebrze relacji operacja
π

A1,...,Ak

(σ

<warunek>

(

R1 × · · · × Rn))

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – semantyka

s e l e c t R . A , T . B from R, T where <warunek > ;

Tak ˛

a kwerend ˛e mo˙zna zrealizowa´c nast ˛epuj ˛

aco:

1

Utwór˙z iloczyn kartezja ´nski R × T ,

2

Wypisz pary atrybutów z tych wierszy R × T , które
spełniaj ˛

a <warunek>.

albo

for all t R do

for all t

0

T do

if t, t

0

spełniaj ˛

a <warunek>

then

print t.A,t’.B

end if

end for

end for

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – semantyka

Je´sli jedna z tablic wymienionych po “

from” jest pusta, to

iloczyn kartezja ´nski R × T b ˛edzie pusty.

W takim przypadku zapytanie nie zwróci ˙zadnych krotek.

Niech R(A, B), T (C, D) tabele takie, ˙ze T jest pusta.

s e l e c t A , B from R ;

zwróci nam tabel ˛e R.

s e l e c t A , B from R, T ;

nie zwróci ˙zadnej krotki.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – semantyka

Domy´slnie tabele w bazie danych to zbiory. Nie mo˙zna
trzyma´c w jednej tabeli dwóch krotek o tych samych
warto´sciach wszystkich atrybutów.

W wyniku zapytania mog ˛

a zosta´c zwrócone wielozbiory.

Dzi ˛eki temu w nie tracimy informacji (nawet je´sli jest ona
nam niepotrzebna).

Przykład. Osoby (imie, nazwisko, id ). Zapytanie

s e l e c t count ( i m i e )

from Osoby as o
where o . i m i e = ’Ewa ’ ;

zwraca liczb ˛e osób o imieniu Ewa.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – semantyka

Je´sli chcemy usun ˛

a´c powtarzaj ˛

ace si ˛e krotki mo˙zemy u˙zy´c

s e l e c t d i s t i n c t i m i e , nazwisko

from Osoby ;

Taka operacja wymaga posortowania wyniku. Usuni ˛ecie
powtórze ´n mo˙ze by´c kosztowniejsze ni˙z obliczenie
zapytania.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – operacje teoriomnogo´sciowe

Przy pomocy

union, intersect, except mo˙zemy obliczy´c

sum ˛e, cz ˛e´s´c wspóln ˛

a (przeci ˛ecie) oraz ró˙znic ˛e dwóch

tabel.

Operacje te domy´slnie usuwaj ˛

a duplikaty krotek!

Aby zachowa´c duplikaty trzeba u˙zy´c słowa kluczowego

all.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – operacje teoriomnogo´sciowe

Rozwa˙zmy tabel ˛e GRAF(poczatek, koniec)

POCZATEK

KONIEC

1

2

2

3

3

4

4

5

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – operacje teoriomnogo´sciowe

Rozwa˙zmy

s e l e c t poczatek , k o n i e c

from g r a f
union

s e l e c t poczatek , poczatek

from g r a f ;

Wyniki:

POCZATEK

KONIEC

1

1

1

2

2

2

2

3

3

3

3

4

4

4

4

5

Wyniki s ˛

a posortowane.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – operacje teoriomnogo´sciowe

Rozwa˙zmy

s e l e c t poczatek , k o n i e c

from g r a f
union a l l

s e l e c t poczatek , poczatek

from g r a f ;

Wyniki:

POCZATEK

KONIEC

1

2

2

3

3

4

4

5

1

1

2

2

3

3

4

4

Zauwa˙zmy, ˙ze w tym przypadku wyniki s ˛

a nieposortowane.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – operacje teoriomnogo´sciowe

Zapytania

s e l e c t poczatek

from g r a f ;

s e l e c t poczatek

from g r a f
union

s e l e c t poczatek

from g r a f ;

s e l e c t poczatek

from g r a f
union a l l

s e l e c t poczatek

from g r a f ;

mog ˛

a zwróci´c inne wyniki!

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – operacje teoriomnogo´sciowe

Oracle 11g stosuje

minus zamiast except.

Oracle 11g nie implementuje

intersect all oraz minus all.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – zł ˛

aczenia

Operacj ˛e ł ˛

aczenia z algebry relacji mo˙zemy wykona´c przy

u˙zyciu

join.

Iloczyn kartezja ´nski dwóch tabel R × T otrzymamy za
pomoc ˛

a R

cross join T .

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – zł ˛

aczenia

Je´sli chcemy ograniczy´c krotki w zł ˛

aczeniu do spełniaj ˛

acych

pewien warunek mo˙zemy napisa´c:

Zapytanie:

s e l e c t

from g r a f g j o i n g r a f t

on g . k o n i e c = t . poczatek ;

Wynik:

POCZATEK

KONIEC

POCZATEK1

KONIEC1

1

2

2

3

2

3

3

4

3

4

4

5

Otrzymali´smy tylko te krotki, które spełniaj ˛

a warunek po

on.

Z grafów g i t “zgineły” krotki!

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – zł ˛

aczenia

Mo˙zemy zachowa´c wszystkie zaginione krotki.

Zapytanie:

s e l e c t

from g r a f g f u l l outer j o i n g r a f t

on g . k o n i e c = t . poczatek ;

Wynik:

POCZATEK

KONIEC

POCZATEK1

KONIEC1

(null)

(null)

1

2

1

2

2

3

2

3

3

4

3

4

4

5

4

5

(null)

(null)

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – zł ˛

aczenia

Mo˙zemy zachowa´c zaginione (wisz ˛

ace) krotki z grafu g.

Zapytanie:

s e l e c t

from g r a f g l e f t outer j o i n g r a f t

on g . k o n i e c = t . poczatek ;

Wynik:

POCZATEK

KONIEC

POCZATEK1

KONIEC1

1

2

2

3

2

3

3

4

3

4

4

5

4

5

(null)

(null)

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – zł ˛

aczenia

Mo˙zemy zachowa´c wisz ˛

ace krotki z grafu t.

Zapytanie:

s e l e c t

from g r a f g r i g h t outer j o i n g r a f t

on g . k o n i e c = t . poczatek ;

Wynik:

POCZATEK

KONIEC

POCZATEK1

KONIEC1

1

2

2

3

2

3

3

4

3

4

4

5

(null)

(null)

1

2

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – zł ˛

aczenia

Niech tabela graf posiada dwa wiersze (1, null) oraz (null, 2).
Zapytanie

s e l e c t

from g r a f g j o i n g r a f t

on g . k o n i e c = t . poczatek ;

nie zwróci ˙zadnej krotki.

Warto´s´c porównania null = null nie jest zdefiniowana.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – podzapytania

Po słowach

from, where mo˙ze wyst ˛

api´c nowe zapytanie.

s e l e c t poczatek , k o n i e c

from g r a f g
where ( g . poczatek ∗2 , g . k o n i e c +2) i n

(

s e l e c t from g r a f ) ;

To zapytanie zwróci nam jedn ˛

a krotk˛e (2, 3).

Po

where nie mo˙zemy u˙zy´c samej tabeli. Napisanie

where ( g . poczatek ∗2 , g . k o n i e c +2) i n ( g r a f )

byłoby niepoprawne składniowo (Oracle).

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – podzapytania

W warunkach wykorzystuj ˛

acych relacje R i krotk˛e s

mo˙zemy u˙zywa´c:

1

EXISTS R,

2

s

in R,

3

s > ALL R,

4

s > ANY R,

5

s<> ALL R.

Wyra˙zenia mo˙zemy poprzedza´c negacj ˛

a, np. NOT EXISTS

R.
Pewne wyra˙zenia s ˛

a równowa˙zne:

1

s = ANY R jest równowa˙zne s

in R,

2

NOT s > ALL S jest równowa˙zne s <= ANY R.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – podzapytania

Je´sli wiemy, ˙ze zapytanie zwróci tylko jedn ˛

a warto´s´c,

mo˙zemy u˙zy´c jego wyniku do porównania:

where n = ( s e l e c t numer

from R, T
where R . numer = T . i d

)

Podobnie, mo˙zemy porówna´c całe krotki

where ( n , k o l o r ) = ( s e l e c t R . numer , T . k o l o r

from R, T
where R . numer = T . i d

)

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – podzapytania skorelowane

Wyniki pewnych podzapyta ´n zale˙z ˛

a od aktualnie

testowanych krotek na zewn ˛

atrz danego podzapytania.

Wtedy trzeba oblicza´c je za ka˙zdym przypisaniem warto´sci
tym krotkom.

Przykład. Tabela Filmy(tytul, rok, dlugosc).

s e l e c t t y t u l

from f i l m y s t a r y
where r o k < ANY

(

s e l e c t r o k

from f i l m y

where t y t u l = s t a r y . t y t u l

) ;

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – agregowanie

W SQL mo˙zemy oblicza´c warto´sci dla wszystkich wierszy
w tabeli.

Dost ˛epne funkcje: SUM(A), AVG(A), MIN(A), MAX(A),
COUNT(*), COUNT(DISTINCT A).

Ich argumetny mog ˛

a by´c wyra˙zeniami, np. SUM(A 2).

Przykład Filmy(tytul, rok, dlugosc).

s e l e c t count ( d i s t i n c t t y t u l )

from F i l m y ;

s e l e c t sum( d l u g o s c )

from F i l m y
where r o k =2010;

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – agregowanie

Je´sli chcemy obliczy´c warto´s´c funkcji agreguj ˛

acej

oddzielnie dla ró˙znych grupi wyniku u˙zywamy

group by.

Przykład Filmy(tytul, rok, rezyser, dlugosc).

s e l e c t sum( d l u g o s c )

from F i l m y
group by r o k ;

s e l e c t

rok , r e z y s e r ,

sum( d l u g o s c )

from F i l m y
group by rok , r e z y s e r ;

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – agregowanie

Mo˙zemy te˙z ograniczy´c wynik zapytania u˙zywaj ˛

ac funkcji

agreguj ˛

acej:

having.

Przykład Filmy(tytul, rok, rezyser, dlugosc).
Je´sli interesuje nas długo´s´c filmów, wyprodukowanych przez
re˙zyserów, którzy zaczeli pracowa´c po roku 2000 napiszemy:

s e l e c t r e z y s e r , sum( d l u g o s c )

from F i l m y
group by r e z y s e r
having min ( r o k ) >=2000;

Albo sami re˙zyserzy:

s e l e c t

r e z y s e r

from F i l m y
group by r e z y s e r
having min ( r o k ) >=2000;

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – perspektywy

SQL daje nam mo˙zliwo´s´c tworzenia perspektyw.

Perspektywy nie s ˛

a przechowywane jako oddzielne tabele

w bazie danych.

Mo˙zemy je interpretowa´c jako skróty dla zapyta ´n, które je
definiuj ˛

a - w zapytaniu perspektywa zamieniana jest na

podzapytanie SQL.

Mo˙zemy korzysta´c z perspektyw w zapytaniach jak z tabel
ale ich warto´s´c jest za ka˙zdym razem obliczalna.

Zapewniaj ˛

a lepsz ˛

a izolacj ˛e danych i czytelno´s´c zapyta ´n.

cr ea te view s t o p i e n _ w i e r z c h o l k a as

s e l e c t poczatek w i e r z c h o l e k , count ( ∗ ) s t o p i e n

from g r a f
group by poczatek ;

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – perspektywy

W poprzednim przykładzie tracili´smy wierchołki o stopniu
wychodz ˛

acym 0 ale raczej nie chcemy te˙z, ˙zeby obliczenie

perspektywy trwało długo.

cr ea te view s t o p i e n _ w i e r z c h o l k a as

s e l e c t poczatek w i e r z c h o l e k , count ( ∗ ) s t o p i e n

from g r a f
group by poczatek
union a l l

s e l e c t

k o n i e c w i e r z c h o l e k , 0 s t o p i e n

from g r a f
where g r a f . k o n i e c not i n

(

s e l e c t poczatek from g r a f ) ;

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – perspektywy

Je´sli perspektywa jest utworzona z jednej tabeli (lub
perspektywy) i wykorzystane w niej atrybuty mo˙zna
uzupełni´c warto´sciami domy´slnymi do pełnego wiersza
wyj´sciowej tabeli do do perspektywy mo˙zemy wstawia´c
krotki.

Wynikiem jest wtedy wstawienie krotek do wyj´sciowej
tabeli.

Usuni ˛ecie krotki z perspektywy (je´sli jest to mo˙zliwe)
skutkuje usuni ˛eciem

wszystkich pasuj ˛

acych do niej krotek

z tabeli.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – definiowanie relacji w zapytaniu

Potrzebn ˛

a nam relacj ˛e mo˙zemy zdefiniowa´c te˙z przed

wła´sciwym zapytaniem.

Słu˙zy do tego konstrukcja

with R( A1 ,

. . . , Ak )

as

(

s e l e c t

. . . .

)

s e l e c t

. . . .

from R,

. . .

where . . . . ;

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – definiowanie relacji w zapytaniu

Rozwa˙zmy tabel ˛e GRAF(poczatek, koniec)

POCZATEK

KONIEC

1

2

2

3

3

4

4

5

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – definiowanie relacji w zapytaniu

with GrafOdwrotny ( poczatek , k o n i e c ) as

(

s e l e c t koniec , poczatek from g r a f
)

s e l e c t go . poczatek , g . k o n i e c

from g r a f g , GrafOdwrotny go
where go . k o n i e c = g . poczatek ;

POCZATEK

KONIEC

2

2

3

3

4

4

5

5

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – zapytania rekurencyjne

Chcemy obliczy´c tranzytywne domkni ˛ecie relacji GRAF,
czyli relacj ˛e osi ˛

agalno´sci.

Obliczenie par wierzchołków (p,k) takich, ˙ze z p mo˙zna
osi ˛

agn ˛

a´c k w

dwóch krokach:

s e l e c t g1 . poczatek , g2 . k o n i e c

from g r a f g1 , g r a f g2
where g1 . k o n i e c = g2 . poczatek ;

Obliczenie par wierzchołków (p,k) takich, ˙ze z p mo˙zna
osi ˛

agn ˛

a´c k w

trzech krokach:

s e l e c t g1 . poczatek , g3 . k o n i e c

from g r a f g1 , g r a f g2 , g r a f g3
where g1 . k o n i e c = g2 . poczatek and

g2 . k o n i e c = g3 . poczatek ;

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – zapytania rekurencyjne

with t r a n s _ g r a f ( poczatek , k o n i e c ) as

(

s e l e c t poczatek , k o n i e c

from g r a f
union a l l

s e l e c t t 1 . poczatek , g . k o n i e c

from t r a n s _ g r a f t1 , g r a f g
where t 1 . k o n i e c = g . poczatek

)

s e l e c t

from t r a n s _ g r a f

order by poczatek , k o n i e c ;

Uwaga. Relacja trans_graf pojawia si ˛e po from w jednym z
członów sumy, która j ˛

a sam ˛

a definiuje.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – zapytania rekurencyjne

Wyniki zapytania:

POCZATEK

KONIEC

1

2

1

3

1

4

1

5

2

3

2

4

2

5

3

4

3

5

4

5

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – zapytania rekurencyjne

Silnik bazy danych Oracle sprawdza czy obliczenie
zapytania nie doprowadzi do niesko ´nczonej p ˛etli.
W powy˙zszym przykładzie zapytanie

with t r a n s _ g r a f ( poczatek , k o n i e c ) as

(

s e l e c t poczatek , k o n i e c

from g r a f
union a l l

s e l e c t t 1 . poczatek , g . k o n i e c

from t r a n s _ g r a f t1 , t r a n s _ g r a f t 2
where t 1 . k o n i e c = t 2 . poczatek

)

s e l e c t

from t r a n s _ g r a f

order by poczatek , k o n i e c ;

nie zwróciłoby wyniku.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – zapytania rekurencyjne

Podobnie doło˙zenie kraw ˛edzi (1, 1) do grafu sprawia, ˙ze
Oracle “rozpoznaje” p ˛etle podczas obliczania odpowiedzi.

Warto wi ˛ec zastanowi´c si ˛e czy naprawd ˛e potrzebujemy
rekursji.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

Funkcje agreguj ˛

ace pozwalaj ˛

a obliczy´c warto´s´c zale˙zn ˛

a od

wszystkich (pogrupowanych) wierszy w odpowiedzi.

Funkcje analityczne pozwalaj ˛

a oblicza´c funkcje zale˙zne

tylko od cz ˛e´sci wyniku.

Np. pozwalaj ˛

a oblicza´c post ˛epuj ˛

ac ˛

a sum ˛e, N najwi ˛ekszych

(najmniejszych) warto´sci, wyznacza´c ranking, oblicza´c
funkcje na podstawie danego rekordu i jego N s ˛

asiadów

Funkcje analityczne wykonywane s ˛

a po instrukcjach

join,

where, group by, having a przed instrukcj ˛

a

order by.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

Składnia funkcji analitycznej:

f u n c t i o n ( A2 ,

. . . , Ak )

over ( < p a r t i t i o n by argument >

<

order by argument >

<windowingclause > )

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

partition by ... dzieli wynik zapytania na cz ˛e´sci, dla
których bed ˛

a, oddzielnie, obliczane warto´sci funkcji,

order by ... definiuje porz ˛

adek w jakim b ˛ed ˛

a podawane

wiersze przy obliczaniu funkcji, nie musi by´c to porz ˛

adek

wypisywania wyników,

windowing-clause definiuje, od których wierszy z tabeli
zale˙zy wynik funkcji.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

Przykład. Osoby(imie, nazwisko, id).

IMIE

NAZWISKO

ID

Jan

Kowalski

1

Ewa

Kowalska

2

Marian

Kowalski

3

Roman

Kowalski

4

Ewa

Kowalska

5

Chcemy obliczy´c kolejno´s´c osób zgodn ˛

a z imieniem.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

Chcemy obliczy´c kolejno´s´c osób zgodn ˛

a z imieniem.

s e l e c t i m i e , nazwisko , rank ( ) over
(

order by i m i e ) as m i e j s c e

from osoby ;

IMIE

NAZWISKO

MIEJSCE

Ewa

Kowalska

1

Ewa

Kowalska

1

Jan

Kowalski

3

Marian

Kowalski

4

Roman

Kowalski

5

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

Chcemy obliczy´c kolejno´s´c osób zgodn ˛

a z imieniem.

s e l e c t i m i e , nazwisko , dense_rank ( ) over
(

order by i m i e ) as m i e j s c e

from osoby ;

IMIE

NAZWISKO

MIEJSCE

Ewa

Kowalska

1

Ewa

Kowalska

1

Jan

Kowalski

2

Marian

Kowalski

3

Roman

Kowalski

4

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

Mo˙zemy skorzysta´c te˙z z funkcji agreguj ˛

acych.

Bed ˛

a obliczane dla ka˙zdego wiersza oddzielnie, nie tylko

dla całej grupy.

s e l e c t i m i e , nazwisko , i d

sum( i d ) over

(

p a r t i t i o n by i m i e order by i d )

as suma

from osoby ;

IMIE

NAZWISKO

ID

SUMA

Ewa

Kowalska

2

2

Ewa

Kowalska

5

7

Jan

Kowalski

1

1

Marian

Kowalski

3

3

Roman

Kowalski

4

4

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

Porz ˛

adek generowania wyników mo˙ze zosta´c zmieniony,

przez dodanie na ko ´ncu zapytania polecenia

order by.

Nie zmienia to warto´sci funkcji analitycznej.

s e l e c t i m i e , nazwisko , i d

sum( i d ) over

(

p a r t i t i o n by i m i e order by i d )

as suma

from osoby order by i d ;

IMIE

NAZWISKO

ID

SUMA

Jan

Kowalski

1

1

Ewa

Kowalska

2

2

Marian

Kowalski

3

3

Roman

Kowalski

4

4

Ewa

Kowalska

5

7

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

Mo˙zemy modyfikowa´c porz ˛

adek:

asc, desc.

Warto´sci null mo˙zemy ustawia´c na ko ´ncu lub pocz ˛

atku:

nulls [first|last].

Inne funkcje:

ntile(N), percent_rank(), cume_dist()

Je´sli chcemy tylko przypisa´c wierszom unikatowe numery
mo˙zemy u˙zy´c funkcji

row_number().

To pozwala łatwo znale´z´c pierwszych N krotek.

Je´sli chcemy powtarzalnych wyników musimy sortowa´c po
unikatowym kluczu.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

Przykład. U˙zycie row_number().

s e l e c t i m i e , nazwisko , i d , row_number ( ) over

(

order by i d desc ) as r n

from osoby ;

IMIE

NAZWISKO

ID

RN

Ewa

Kowalska

5

1

Roman

Kowalski

4

2

Marian

Kowalski

3

3

Ewa

Kowalska

2

4

Jan

Kowalski

1

5

Uwaga. U˙zycie rn w klauzuli where jest nielegalne - funkcje
analityczne s ˛

a obliczane po

where, group by, having a przed

order by.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

Przykład. U˙zycie row_number(). Aaaaaby otrzyma´c wiersze z
pewnego zakresu mo˙zemy zagnie´zdzi´c zapytanie u˙zywaj ˛

ace

row_number().

s e l e c t i m i e , nazwisko , r n from
(
s e l e c t i m i e , nazwisko , i d , row_number ( ) over

(

order by i d desc ) as r n

from osoby

)

where 1< r n and r n < 5 ;

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

Funkcje SUM, COUNT, AVG, MIN, MAX nie zale˙z ˛

a od

porz ˛

adku wierszy.

Je´sli obliczenie zale˙zy od porz ˛

adku generowania wierszy

powinni´smy go poda´c w

over (...) przez order by.

Forma:

order by expr [asc | desc] nulls [first | last].

Funkcje zale˙z ˛

ace od porz ˛

adku: LEAD, LAG, RANK,

DENSE_RANK, ROW_NUMBER, FIRST, FIRST VALUE,
LAST, LAST VALUE.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

first_value(sql-expr) oblicza warto´s´c sql-expr na pierwszej
krotce w grupie zdefiniowanej przez

partition.

s e l e c t i m i e , nazwisko , i d ,

i d f i r s t _ v a l u e ( i d )

over

(

p a r t i t i o n by nazwisko

order by

nazwisko , i m i e , i d )

as d i f f

from osoby ;

IMIE

NAZWISKO

ID

DIFF

Ewa

Kowalska

2

0

Ewa

Kowalska

5

3

Jan

Kowalski

1

0

Marian

Kowalski

3

2

Roman

Kowalski

4

3

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

lead(sql-expr,offset, default) oblicza warto´s´c sql-expr na
krotce wyst ˛epuj ˛

acej w grupie offset pozycji

po aktualnej.

s e l e c t i m i e , nazwisko , i d ,

i d + l e a d ( i d ,1 , 10)

over

(

p a r t i t i o n by nazwisko

order by

nazwisko , i m i e , i d )

as sum

from osoby ;

IMIE

NAZWISKO

ID

SUM

Ewa

Kowalska

2

7

Ewa

Kowalska

5

-5

Jan

Kowalski

1

4

Marian

Kowalski

3

7

Roman

Kowalski

4

-6

Warto´s´c domy´slna dla offset to 1. Je´sli dana krotka nie istnieje,
to zostanie zwrócona warto´s´c default.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

Funkcja analogiczna do

first_value to last_value.

Funkcja analogiczna do

lead to lag(sql-expr, offset,

default).

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – funkcje analityczne

s e l e c t i m i e , nazwisko , i d , sum( i d ) over

(

order by

nazwisko , i m i e , i d

rows between 1 p r e c e d i n g and

i d f o l l o w i n g )

as sum

from osoby ;

IMIE

NAZWISKO

ID

SUM

Ewa

Kowalska

2

8

Ewa

Kowalska

5

15

Jan

Kowalski

1

9

Marian

Kowalski

3

8

Roman

Kowalski

4

7

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – dygresja

Czasem zamiast row_number() wystarczy u˙zy´c
pseudokolumny Oracle

rownum.

Dla ka˙zdej tabeli i wyniku zapytania mo˙zemy posłu˙zy´c si ˛e
rownum, która przechowuje kolejne numery wierszy tabeli
(licz ˛

ac od 1).

s e l e c t i m i e , nazwisko , rownum

from osoby
where rownum <4;

IMIE

NAZWISKO

ROWNUM

Jan

Kowalski

1

Ewa

Kowalska

2

Marian

Kowalski

3

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

SQL – dygresja

s e l e c t i m i e , nazwisko , rownum

from osoby
where rownum <4;

zwraca tylko pierwsze trzy wiersze

s e l e c t i m i e , nazwisko , rownum

from osoby
where rownum >1;

nie zwróci ˙zadnego wiersza, bo

rownum przypisuje

pierwszemu wierszowi numer 1. Ka˙zdy kolejno testowany
wiersz b ˛edzie miał domy´slnie przypisany

rownum = 1.

U˙zycie

rownum mo˙ze wył ˛

aczy´c pewne optymalizacje w

obliczaniu zapyta ´n.

Konrad Zdanowski

Bazy danych – wykład trzeci

background image

Koniec

Konrad Zdanowski

Bazy danych – wykład trzeci


Wyszukiwarka

Podobne podstrony:
KZ BD w09 id 256667 Nieznany
KZ BD w07 id 256666 Nieznany
KZ BD w14 2 id 256670 Nieznany
KZ BD w12 id 256669 Nieznany
KZ BD w11 2 id 256668 Nieznany
KZ BD w09 id 256667 Nieznany
bd lab2 id 81995 Nieznany (2)
bd dbastudio id 81961 Nieznany (2)
BD 408e id 130025 Nieznany (2)
bd w1 id 81977 Nieznany (2)
gs w03 2 id 197500 Nieznany
lop drgania w03 id 273123 Nieznany
E gospodarka W03 id 148932 Nieznany
bd lab2 id 81995 Nieznany (2)
bd dbastudio id 81961 Nieznany (2)
BD 1st 2 4 lab3 tresc 1 1 id 81 Nieznany
bd lab 04 id 81967 Nieznany (2)
Bazy danych w03 07 id 81702 Nieznany

więcej podobnych podstron