NULL (SQL)
Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită la 2 septembrie 2021; verificările necesită
4 modificări .
NULL într-un SGBD este o valoare specială (pseudo-valoare) care poate fi scrisă într-un câmp al unui tabel al bazei de date (DB). NULL corespunde conceptului de „câmp gol”, adică „un câmp care nu conține nicio valoare”. Introdus pentru a distinge între valorile goale (nu afișate vizual) în câmpurile bazei de date (de exemplu, un șir de lungime zero ) și valorile lipsă (când nu este scrisă nicio valoare în câmp, chiar și goală) .
NULL înseamnă nu, informații necunoscute. Valoarea NULL nu este o valoare în sensul deplin al cuvântului: prin definiție înseamnă absența unei valori și poate fi de tip NULL sau de orice alt tip (CREATE TABLE new_tab AS (SELECT NULL) este un tip special de null , CREATE TABLE new_table AS (SELECT 10+NULL) - tip întreg). Prin urmare, NULL nu este nici booleanul FALSE, nici șirul gol, nici zero. Compararea NULL cu orice valoare va avea ca rezultat NULL, nu FALSE sau 0. Mai mult, NULL nu este egal cu NULL!
Necesitatea NULL în bazele de date relaționale
- Opinia 1: NULL este necesar și obligatoriu pentru orice bază de date care pretinde a fi relațională. În special, fără acesta este imposibil să construiți corect o îmbinare exterioară (OUTER JOIN) de rânduri din două tabele. Acesta a fost punctul de vedere la care E. Codd a aderat , incluzându-l în mod explicit ca a treia dintre cele 12 reguli pentru SGBD relațional. Acest principiu este consacrat în cele mai recente standarde pentru limbajul SQL .
- Opinia 2: Valoarea NULL nu este necesară, iar utilizarea acesteia este rezultatul unei erori de proiectare a bazei de date. Într-o bază de date concepută în deplină conformitate cu criteriile de normalizare , nu pot exista câmpuri fără valori, ceea ce înseamnă că nu este nevoie de o pseudo-valoare specială pentru astfel de câmpuri. În practică însă, din motive de eficiență, este adesea convenabil să neglijăm unele dintre regulile de normalizare, dar unul dintre costurile unei astfel de neglijeri este apariția câmpurilor goale, care este NULL [1] .
Folosind NULL într-o bază de date
În bazele de date care suportă conceptul de NULL, pentru un câmp de tabel din descriere, se stabilește dacă acesta poate fi gol. Dacă da, atunci nu poate fi scrisă nicio valoare în acest câmp, iar acest câmp va avea o valoare NULL. De asemenea, puteți scrie în mod explicit o valoare NULL într-un astfel de câmp.
De obicei, DBMS nu permite valori NULL pentru câmpurile care fac parte din cheia primară a unui tabel . În câmpurile de cheie străină , dimpotrivă, este permis NULL. Prezența lui NULL într-un câmp de cheie străină poate fi interpretată ca un semn al absenței unei înregistrări aferente, iar o astfel de cheie străină nu necesită implementarea regulilor de integritate referențială care sunt necesare pentru orice altă valoare a cheii străine.
Operații cu NULL
Deoarece NULL nu este, în sens general, o valoare, utilizarea sa în operații aritmetice , șiruri , logice și alte operațiuni este, strict vorbind, incorectă. Cu toate acestea, majoritatea DBMS acceptă astfel de operațiuni, dar introduc reguli speciale pentru acestea:
- NULL poate fi atribuit variabilelor și scris în câmpuri, indiferent de tipul de date declarat al acestor variabile (câmpuri);
- NULL poate fi transmis procedurilor și funcțiilor ca valoare de parametru legal. Rezultatele executării unei astfel de proceduri sau funcție sunt determinate de operațiile efectuate asupra parametrilor din cadrul acesteia.
- Orice operație de comparare cu NULL (chiar și operația „NULL = NULL” ) are ca rezultat valoarea „necunoscut” ( UNKNOWN ). Rezultatul final în acest caz depinde de expresia logică completă în conformitate cu tabelul de adevăr al operațiilor logice. Dacă compararea cu NULL este întreaga operație logică (și nu o parte a acesteia), atunci rezultatul acesteia este similar cu FALSE (o expresie de genul IF <ceva> = NULL THEN <acțiune1> ELSE <acțiune2> END IF va duce întotdeauna la execuție. de acțiune2 ).
- Funcțiile agregate și analitice (utilizate în SQL ca operații pe seturi și liste ) tind să ignore valorile NULL în favoarea valorilor valide pentru restul elementelor setului. De exemplu, pentru funcția AVG, care este concepută pentru a găsi media aritmetică a oricărei expresii evaluate pentru fiecare rând dintr-un grup, rezultatul este același ca și cum rândurile care conțin NULL pentru această expresie nu ar fi deloc conținute în grup.
- Există o funcție sau operație specială de sistem (de obicei expr IS [NOT] NULL) care returnează valoarea booleană TRUE dacă expr este (nu este) NULL și FALSE în caz contrar.
În plus, pot exista funcții speciale de sistem pentru conversia convenabilă a NULL în anumite valori, de exemplu, Oracle are o funcție de sistem NVL care returnează valoarea parametrului său dacă nu este NULL sau valoarea implicită dacă operandul este NULL. Standardul SQL-92 definește două funcții: NULLIF și COALESCE, deci utilizarea lor este mai de preferat (dacă un anumit SGBD le implementează).
Vezi și
Note
- ↑ Date K., Darwen H. Fundamentals of future database systems. Al treilea Manifest. a 2-a ed. (sub redactia S. D. Kuznetsov). M.: Janus-K, 2004.
SQL |
---|
Versiuni |
- SQL-86
- SQL-89
- SQL-92
- SQL:1999
- SQL:2003
- SQL:2006
- SQL:2008
- SQL:2011
- SQL:2016
|
---|
Cuvinte cheie |
|
---|
Articole similare |
|
---|
Părți ale ISO/IEC SQL |
- Cadru
- fundație
- Interfață la nivel de apel
- Module stocate persistente
- Managementul Datelor Externe
- Legături de limbaj obiect
- Scheme de informații și definiții
- Rutine și tipuri SQL pentru limbajul de programare Java
- Specificații legate de XML
|
---|