Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Bazy danych

Słowa kluczowe: COUNT() w SQL SELECT w SQL

W tabeli Koty kolumna wlasciciel w części wierszy ma wartość NULL. Które zapytanie policzy tylko te koty, które mają wpisanego właściciela?

A.
SELECT COUNT(*) FROM Koty WHERE wlasciciel = NULL;
Źle. Porównanie = NULL nigdy nie jest prawdziwe, więc wynik zawsze wynosi 0. Do tego służy IS NULL.
B.
SELECT COUNT(*) FROM Koty;
Źle. COUNT(*) liczy wszystkie wiersze, także koty bez właściciela.
C.
SELECT SUM(wlasciciel) FROM Koty;
Źle. SUM dodaje wartości kolumny, a nie liczy wierszy.
D.
SELECT COUNT(wlasciciel) FROM Koty;
Dobrze. COUNT(wlasciciel) pomija wiersze z NULL, więc liczy tylko koty z wpisanym właścicielem.

Funkcja COUNT z nazwą kolumny w nawiasie liczy tylko te wiersze, w których ta kolumna ma wartość, czyli nie jest NULL. COUNT(wlasciciel) pominie więc koty bez właściciela i zwróci dokładnie liczbę kotów z wpisanym właścicielem.

Ta różnica jest częstym źródłem pomyłek w raportach: COUNT(*) liczy wszystkie wiersze, a COUNT(kolumna) tylko niepuste. Ten sam wynik da zapis z warunkiem: SELECT COUNT(*) FROM Koty WHERE wlasciciel IS NOT NULL;. Funkcje SUM, AVG, MIN i MAX również pomijają NULL. Na przykład AVG(ocena) liczy średnią tylko z wpisanych ocen, a nie traktuje braków jak zer.

COUNT(*) liczy wszystkie wiersze tabeli, bez względu na zawartość kolumn. To dobre zapytanie, gdy pytamy o liczbę wszystkich kotów, ale tutaj koty bez właściciela wejdą do wyniku i liczba będzie za duża.

Wiele osób wybiera warunek wlasciciel = NULL, bo wygląda logicznie. W SQL żadne porównanie ze znakiem równości nie daje prawdy dla NULL, bo NULL oznacza wartość nieznaną. Taki warunek nie przepuści żadnego wiersza i zapytanie zawsze zwróci 0. Do sprawdzania braku wartości służą IS NULL i IS NOT NULL. Zresztą nawet poprawne IS NULL policzyłoby koty bez właściciela, czyli odwrotnie, niż chce treść.

SUM dodaje wartości zamiast je liczyć. Na kolumnie z imionami czy nazwiskami właścicieli wynik nie ma sensu i nie odpowiada liczbie kotów.

Wartość NULL to brak danych, a nie zero ani pusty napis.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.