sql >> Databáze >  >> RDS >> Oracle

SQL nezobrazuje hodnoty null v dotazu nerovná se?

V několika jazycích se s hodnotou NULL zachází odlišně:Většina lidí ví o dvouhodnotové logice, kde true a false jsou jediné srovnatelné hodnoty v booleovských výrazech (i když je false, je definováno jako 0 a true jako cokoli jiného).

Ve standardním SQL musíte přemýšlet o tříhodnotové logice. NULL není považována za skutečnou hodnotu, spíše ji můžete nazvat "neznámá". Pokud je tedy hodnota neznámá, není jasné, zda ve vašem případě state je 0, 1 nebo cokoliv jiného. Takže NULL != 1 výsledky na NULL znovu.

Z toho vyplývá, že kdekoli filtrujete něco, co může být NULL, musíte hodnoty NULL ošetřit sami. Všimněte si, že syntaxe je také odlišná:hodnoty NULL lze porovnávat pouze s x IS NULL místo x = NULL . Podívejte se na Wikipedii, kde najdete pravdivostní tabulku ukazující výsledky logických operací.



  1. Chyba SQL:ORA-01861:literál neodpovídá formátovacímu řetězci 01861

  2. Ladění výkonu kolenem:Nesprávné použití dočasných tabulek

  3. Dílčí dotazy vs spojení

  4. Převedení řetězce odděleného čárkami na jednotlivé řádky