Sql_celko - Capitolul 6

Capitolul 6. NULLS - lipsesc date în SQL

6.1. tabele goale și lipsă

Un tabel gol sau vizualiza diferit de lipsă. Acesta este definit, conține coloane și constrângeri, dar nu există linii. Acest lucru se întâmplă în cazul în care masa tocmai a fost creat sau scos din ea toate datele.
Absența unui tabel este numit, a fost eliminată din comanda schemei bazei de date DROP TABLE, sau că nu a existat niciodată în ea (poate ai tastat greșit). Lipsește idei de concept, cu toate acestea, este ceva mai complicat. Vederea poate fi, de asemenea, omise, ca rezultat al operatorului DROP VIEW sau de intrare erori, dar, în plus, în cazul în care masa sau vizualizarea a fost eliminat, pe care se bazează acest punct de vedere. Dacă proiectați o prezentare în timpul rulării, baza de date raportează o eroare.
Comportamentul unui tabel gol, sau că depinde de metoda de utilizare a acestora. Informații suplimentare cu privire la acest subiect se regăsește în capitolele 14 15 și 16 pentru o descriere a predicatelor cu subinterogari. În general, un tabel gol poate fi privit fie ca NULL, sau setul gol, în funcție de context.
Unele implementari ale SQL elimina toate obiectele schemei care depind de masa de șters, dar cele mai multe dintre această caracteristică nu este acceptată. Acest lucru înseamnă că, atunci când încercați să utilizați un obiect, veți găsi nici o masă. SQL standard-92 face ca acest comportament este posibil, dar nu obligatoriu.

6.2. Lipsa valorilor într-o coloană

6.3. valorile contextului și lipsă

6.4. Comparație între NULL valori

Lucrul cu NULL valori pare nenatural. Ele nu pot fi comparate între ele, folosind operatorii de comparare (egal, nu egal, mai puțin este mai mult, și așa mai departe), astfel încât în ​​loc de o logică cu două valori, obținem trei cifre. Este neobișnuit pentru cei mai mulți programatori. Dacă executați instrucțiunea:

puteți obține toate rândurile de masă SomeTable. Cu toate acestea, chiar și un operator trebuie să îndeplinească pentru a obține acest rezultat:

Predicatul IS [NOT] NULL returnează numai valorile TRUE sau FALSE.

6.5. NULL valori și logica

Logica cu două valori, a fost dezvoltat de George Boole, care a imortalizat pentru totdeauna numele său în algebra booleană (Boole, 1854). Este nu numai sistemul, dar funcționează cel mai bine cu calculatorul „binar“ (două stări) și setul de expresii matematice. În SQL oferă trei evaluate logica - TRUE, FALSE și NECUNOSCUT. Această din urmă valoare este rezultatul utilizării în comparații și alte predicate NULL valori. Rețineți că aceasta este o valoare boolean care nu coincide cu o NULL, care este o valoare a datelor. De aceea, limbajul SQL scriere (x este [NOT] NULL), Ana (x = NULL). Mai jos este un tabel cu rezultatele furnizate în trei operatori SQL Boolean:

Toate celelalte predicate sunt șiruri SQL la mintea celor trei operatori. În timp ce o astfel de reducere (pentru predicate care utilizează sub-interogări) se efectuează la run-time, nu este întotdeauna evidentă.

6.5.1. Aplicație NULL valori în predicate cu subinterogari

Mulți oameni uită că conține adesea o comparație subinterogare cu NULL. Uitați-vă la următoarele două tabele:

Rețineți că coloanele lor permit NULL. Efectuați această interogare:

Intră acum NULL și fă-o din nou:

Rezultatul va fi gol. Nu este foarte clar, dar este corect. NU IN predicat este definit după cum urmează:

IN predicat este definit după cum urmează:

Ultima expresie este întotdeauna NECUNOSCUT, astfel luând în considerare legile interogarea De Morgan, de fapt arata ca acest lucru:

Privind la tabelul de mai sus valori operatorii boolean, veți înțelege că expresia va fi întotdeauna NECUNOSCUT, care este respins în condiția de căutare în clauza WHERE.

6.5.2. Soluții în standardul SQL-92

În SQL-92, această problemă a fost rezolvată prin adăugarea unui nou predicat:

Acesta vă permite să afișați orice combinație a valorilor logicii de trei evaluate în două cifre. De exemplu, expresia ((vârstă <18) OR (gender = 'Female')) IS NOT FALSE возвращает TRUE, если (age IS NULL) или (gender IS NULL), а второе условие не имеет значения.

6.6. expresii matematice și NULL valori

Dacă NULL este întâlnită în expresii aritmetice (+, -, *, /), atunci ei dau raspunsul ca NULL. Citiți mai multe tipuri de date numerice sunt discutate în capitolul 3.

6.7. Funcții și valori NULL

Majoritatea dezvoltatorilor sunt tratate în mod egal NULL valori în funcțiile pe care le oferă ca o extensie a standardului SQL. De exemplu, cosinusul NULL va fi NULL. Secțiunea 3.5 descrie în detaliu două funcții care transformă un NULL înțelesuri uzuale.
1. NULLIF (V1, V2) returnează NULL, dacă primul parametru este egal cu o secundă. Funcția este echivalentă cu următoarele CASE Caietul de sarcini:

2. coaguleze (V1, V2, V3. Vn) scanează dreapta lista parametrovsleva și returnează primul dintre ele nu este egal cu NULL. În cazul în care toate valorile sunt nule, de asemenea, funcția returnează NULL.

6.8. NULL-valori și limbi de bază

6.9. Sfaturi privind proiectarea pentru valori NULL

6.9.1. Cum de a evita NULL valori în programul de bază

6.10. Utilizarea mai multor valori NULL

Definim o regulă: dacă sunt cunoscute toate valorile, obținem suma obișnuită (total). În cazul în care una dintre valorile are statut nu se aplică (acceptabilă), acest statut primește, iar întreaga sumă. În cazul în care nu, suma devine lipsă de stare (absentă). În cazul în care valorile lipsă sunt, de asemenea, acolo, baza de date afișează un avertisment cu privire la prezența unor valori aproximative (aproximative). Forma generală a interogării:

Se pune întrebarea: de ce ne încurcați cu suma valcol? Mnogoindikatornom coloanei de stare obținută la fel ca în tabelul original. Eu propun să fac următoarele exerciții:
1. Crearea unui set de reguli pentru lucrul cu lipsă de numărare cerere inapishite date valorile funcției SUM (), AVG (), MAX (), MIN () și C0UNT ().
2. În obținut "multiindikatore" grad set de aproximare (plus sau minus 5, 10, etc.). Se presupune că valcol este întotdeauna la mijloc.

articole similare