W algebrze relacji operacja selekcji polega na
A. wybraniu krotek niezawierających wartości NULL.
B. wyeliminowaniu krotek z powtarzającymi się polami.
C. wybraniu krotek spełniających określone warunki.
D. wyeliminowaniu pustych wierszy.
Pytanie z egzaminu CKE, styczeń 2015 (arkusz E.14-X-15.01).
Operacja selekcji w algebrze relacji oznacza wybranie z relacji tylko tych krotek, które spełniają podany warunek logiczny. Mówiąc prościej: filtrujemy wiersze tabeli, ale nie zmieniamy zestawu kolumn. Jeśli mamy relację Uczniowie z polami id, imie, klasa, srednia, to selekcja może zwrócić tylko osoby z klasy 3TP albo tylko tych uczniów, których średnia jest większa niż 4.0. W praktyce bazodanowej najbliższym odpowiednikiem jest klauzula WHERE w SQL, na przykład: SELECT * FROM uczniowie WHERE klasa = '3TP'. Moim zdaniem to jedna z najważniejszych operacji, bo prawie każde sensowne zapytanie do bazy danych zawiera jakieś ograniczenie danych. Dobra praktyka polega na tym, żeby warunki były jednoznaczne, logiczne i oparte na właściwych typach danych, np. liczby porównujemy jak liczby, a daty jak daty. Warto też pamiętać, że selekcja działa na krotkach, czyli całych rekordach, a nie na pojedynczych polach wyświetlanych w wyniku.
W algebrze relacji łatwo pomylić selekcję z innymi operacjami, bo w języku potocznym słowo „wybór” bywa używane do wszystkiego. Jednak technicznie selekcja nie oznacza usuwania rekordów z wartościami NULL. W klasycznej algebrze relacji NULL nawet nie jest podstawowym pojęciem w takim sensie jak w SQL, gdzie oznacza brak znanej wartości. Filtrowanie rekordów bez NULL-i można oczywiście wykonać warunkiem, ale to tylko konkretny przypadek selekcji, a nie definicja tej operacji. Nie chodzi też o eliminowanie powtarzających się pól czy duplikatów. Usuwanie duplikatów wiąże się raczej z własnościami relacji jako zbioru albo z operacją projekcji, gdy wybieramy kolumny i w wyniku mogą powstać identyczne krotki. Selekcja nie zmienia struktury tabeli i nie wybiera kolumn, tylko zostawia lub odrzuca całe wiersze według predykatu. Puste wiersze to też trochę mylące pojęcie, bo poprawnie zaprojektowana relacja składa się z krotek o określonym schemacie, a „pusty wiersz” nie jest typowym elementem modelu relacyjnego. Z mojego doświadczenia uczniowie często kojarzą selekcję z czyszczeniem danych, ale w bazach danych trzeba rozróżniać filtrowanie rekordów, usuwanie wartości brakujących, eliminację duplikatów i wybór kolumn. To są różne operacje i mają różne zastosowania w zapytaniach.