SkillsTest.pl SQL pytania i zadania rekrutacyjne Analiza kodu - zadanie 2

: 2017-10-31 | Nr 23 z 24

Analiza kodu

Analiza kodu - zadanie 2 SQL

Mamy dwie tabele:
SELECT * FROM Vehicle
Id Mark
1 Truck
2 SportCar
3 Motorcycle
SELECT * FROM VehiclePrice
Id Price VehicleId
1 1100 1
2 1300 2
3 150 NULL

Programista za zadanie miał wyświetlić wszystkie pojazdy bez przypisanej ceny.
Co będzie rezultatem poniższego zapytania?

SELECT *
FROM Vehicle 
WHERE Id NOT IN (SELECT VehicleId FROM VehiclePrice)

Uzasadnij swoją odpowiedź. Jeśli uważasz, że te zapytanie można poprawić, podaj poprawną wersję.

Rezultatem powyższego zapytania będzie zbiór pusty.

Uzasadnienie
Jeśli porównujemy jakąkolwiek wartość do NULL, wynikiem logicznym porównania będzie 'unknown' (pamiętaj - false nie równa się 'unknown').
Mimo tego, że w wyniku podzapytania nie będzie VehicleId = 3, rezultatem całego zapytania nie będzie 3 Motorcycle. Jeśli zbiór zwracany przez podzapytanie zawiera wartość NULL, efektem końcowym zapytania będzie zbiór pusty. W naszym przypadku jest to porównanie Id <> NULL - wynik to 'unkown'.

By zapytanie działo poprawnie w podzapytaniu w klauzuli WHERE powinniśmy użyć warunku IS NOT NULLZapytanie powinno wyglądać następująco:
SELECT *
FROM Vehicle 
WHERE Id NOT IN (SELECT VehicleId FROM VehiclePrice WHERE VehicleId IS NOT NULL)

Polecamy

Na co możesz wydać swoje 15k?

Zabawki dla dwulatka