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
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 |
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 |
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:
σC1(σC2…(σCn(R))… ) = σC1 AND C2…AND Cn(R)
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 |
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 |
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 |