Kiválasztás (szelekció)


Ha az R relációra alkalmazzuk a kiválasztás operátort, akkor olyan új relációt kapunk, amely az R sorainak egy részhalmazát tartalmazza. Az eredménybe azok a sorok kerülnek, amelyek teljesítenek egy adott "feltételt", melyet az R attribútumra fogalmazunk meg.

Ezen műveletet a Feltétel(R) kifejezéssel jelöljük.

Az eredeti R reláció és az eredményreláció sémája megegyezik, és megegyezés szerint az attribútumokat ugyanabban a sorrendben tüntetjük fel, mint ahogyan az R relációban használtuk.

F alakja (Codd eredeti javaslata szerint): AQB, AQc, cQA, ahol:

  A és B attribútumnevek,

  c egy konkrét érték,

  Q pedig elemi összehasonlító operátorok halmaza: Q Î {=,≠, <, >,≤,≥}.

F formulákat atomoknak nevezzük. Az atomok kombinálhatók a ¬, ∧, ∨ jelekkel.
A F olyan feltétel, mint amilyen a hagyományos programozási nyelveknél is használatos. Például az if kulcsszót ilyen feltétel követi mind a sokak által ismert Pascal, Delphi, C, C++, stb. programozási nyelvekben. A különbség viszont az, hogy a kifejezésben szereplő F feltételben lévő operandusok vagy konstansok, vagy az R attribútumai.
Ha a kiválasztás műveletet alkalmazzuk, akkor alkalmazzuk a "feltétel"t az R reláció minden egyes t sorára oly módon, hogy a "feltétel"-ben előforduló minden egyes A attribútumra behelyettesítjük a t sornak az A attribútumhoz tartozó komponensét. Ha a "feltétel" összes attribútumát behelyettesítve a "feltétel" értéke igaz, akkor a t sor egyike azon soroknak melyek megjelennek a σFeltétel(R) eredményében, különben a t sor nincsen benne az eredményben.

A szelekció kommutatív

σfeltétel1feltétel2(R))=σfeltétel2feltétel1(R))=σ(feltétel1 AND feltétel2)(R)



1.Példa:

Dolgozók reláció
név adószám születési év beosztás fizetés
Kerekes Ádám 3869828 1970 igazgató 200000
Szirmai Katalin 5745325 1970 titkárnő 90000
Binte Tamás 5326223 1964 könyvelő 150000

Végezzük el a σfizetés>100000(Dolgozók)műveletet. Ekkor az eredményrelációnk a következő lesz:

név adószám születési év beosztás fizetés
Kerekes Ádám 3869828 1970 igazgató 200000
Binte Tamás 5326223 1964 könyvelő 150000

Az első sor kielégíti a feltételt, mivel ha a fizetés helyére behelyettesítjük a sor megfelelő attribútumának értékét, akkor feltétel 200000>100000 igaz, ezért az első sor belekerül az eredményrelációba. Ugyanilyen indokkal a harmadik sor is megfelel a feltételnek, és így ez is az eredmény tagja lesz. A második sor fizetés komponense 90000, ezt behelyettesítve a 90000>100000 feltétel hamis lesz. így ez a sor nem lesz benne az eredményrelációban.

Bonyolultabb feltételek

Ha bonyolultabb feltételekre van szükség, akkor használhatjuk az AND (=és) és OR (=vagy) logikai műveleteket, így lehetőségünk van több részfeltétel összekapcsolására. Az AND és OR értelmezése a szokásos. C1 AND C2 akkor igaz, ha mindkét feltétel igaz, minden más esetben hamis, C1 OR C2 akkor hamis, ha mindkét feltétel hamis, minden más esetben igaz:


Ezért például egy szelekciósorozat mindig értelmezhető egyetlen szelekcióként:
σC1C2…Cn(R))… ) = σC1 AND C2…AND Cn(R)


2.Példa (AND):

Szeretnénk megkapni azon sorok halmazát a Dolgozók relációból, amelyek az 1970-ben születettek közül legalább 100000-et keresnek. Ezeket a sorokat két részfeltétel AND összekapcsolásával kaphatjuk meg.
A megoldás a σfizetés>100000 AND születési év=1970(Dolgozók) kifejezés lesz. Ekkor az eredményreláció a következő:

név adószám születési év beosztás fizetés
Kerekes Ádám 3869828 1970 igazgató 200000


3.Példa (OR):

Keressük meg azon egyéneket, amelyeknek a beosztása igazgató vagy könyvelő.
A megoldás: σbeosztás=’igazgató’ OR beosztás=’könyvelő’(Dolgozók)
Az eredményreláció:


név adószám születési év beosztás fizetés
Kerekes Ádám 3869828 1970 igazgató 200000
Binte Tamás 5326223 1964 könyvelő 150000


4.Példa (AND és OR):

Természetesen lehetőség van az AND és az OR kifejezések egy feltételben történő használatára is:
Keressük meg azon személyeket, akiknek a beosztása igazgató vagy könyvelő és a fizetése kevesebb, mint 170000.
A megoldás: σbeosztás=’igazgató’ OR beosztás=’könyvelő’ AND fizetés<170000>(Dolgozók)


név adószám születési év beosztás fizetés
Binte Tamás 5326223 1964 könyvelő 150000