NULL (SQL)
Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den
version , der blev gennemgået den 2. september 2021; checks kræver
4 redigeringer .
NULL i en DBMS er en speciel værdi (pseudo-værdi), der kan skrives til et felt i en databasetabel ( DB). NULL svarer til begrebet "tomt felt", det vil sige "et felt, der ikke indeholder nogen værdi." Introduceret for at skelne mellem tomme (ikke visuelt viste) værdier i databasefelter (for eksempel en nul-længde streng ) og manglende værdier (når ingen værdi er skrevet i feltet overhovedet, selv tom) .
NULL betyder nej, ukendt information. Værdien NULL er ikke en værdi i ordets fulde betydning: per definition betyder den fraværet af en værdi og kan være af typen NULL eller af enhver anden type (CREATE TABLE new_tab AS (SELECT NULL) er en speciel type null , CREATE TABLE new_table AS (SELECT 10+NULL) - heltalstype). Derfor er NULL hverken den boolske FALSE, den tomme streng eller nul. Sammenligning af NULL med en hvilken som helst værdi vil resultere i NULL, ikke FALSE eller 0. Desuden er NULL ikke lig med NULL!
Behovet for NULL i relationelle databaser
- Udtalelse 1: NULL er nødvendig og obligatorisk for enhver database, der hævder at være relationel. Især uden det er det umuligt at bygge en ydre joinforbindelse (OUTER JOIN) af rækker fra to tabeller korrekt. Det var dette synspunkt, som E. Codd holdt sig til , og udtrykkeligt inkluderede det som den tredje af 12 regler for relationel DBMS. Dette princip er forankret i de nyeste standarder for SQL -sproget .
- Udtalelse 2: NULL-værdien er ikke påkrævet, og dens brug er resultatet af en databasedesignfejl. I en database designet i fuld overensstemmelse med normaliseringskriterierne kan der ikke være felter uden værdier, hvilket betyder, at der ikke er behov for en speciel pseudoværdi for sådanne felter. I praksis er det dog af effektivitetshensyn ofte praktisk at negligere nogle af normaliseringsreglerne, men en af omkostningerne ved en sådan forsømmelse er fremkomsten af tomme felter, som er NULL [1] .
Brug af NULL i en database
I databaser, der understøtter begrebet NULL, afgøres det for et tabelfelt i beskrivelsen, om det kan være tomt. Hvis det er tilfældet, kan der ikke skrives nogen værdi til dette felt, og dette felt vil have en NULL-værdi. Du kan også udtrykkeligt skrive en NULL-værdi til et sådant felt.
Typisk tillader DBMS ikke NULL-værdier for felter, der er en del af en tabels primære nøgle . I fremmednøglefelter er NULL derimod tilladt. Tilstedeværelsen af NULL i et fremmednøglefelt kan fortolkes som et tegn på fraværet af en relateret post, og en sådan fremmednøgle kræver ikke implementering af reglerne for referentiel integritet , der kræves for enhver anden fremmednøgleværdi.
Operationer med NULL
Da NULL ikke i generel forstand er en værdi, er brugen af den i aritmetiske , streng , logiske og andre operationer strengt taget forkert. De fleste DBMS understøtter dog sådanne operationer, men indfører særlige regler for dem:
- NULL kan tildeles variabler og skrives til felter, uanset den erklærede datatype for disse variabler (felter);
- NULL kan overføres til procedurer og fungerer som en lovlig parameterværdi. Resultaterne af at udføre en sådan procedure eller funktion bestemmes af de operationer, der udføres på parametrene i den.
- Enhver sammenligningsoperation med NULL (selv operationen "NULL = NULL" ) resulterer i værdien "ukendt" ( UNKNOWN ). Det endelige resultat i dette tilfælde afhænger af det komplette logiske udtryk i overensstemmelse med sandhedstabellen for logiske operationer. Hvis sammenligning med NULL er hele den logiske operation (og ikke en del af den), så ligner dens resultat FALSE (et udtryk som IF <noget> = NULL THEN <action1> ELSE <action2> END IF vil altid føre til udførelsen handling2 ).
- Aggregerede og analytiske funktioner (brugt i SQL som operationer på sæt og lister ) har en tendens til at ignorere NULL-værdier til fordel for gyldige værdier for resten af sættets elementer. For eksempel, for AVG-funktionen, som er designet til at finde det aritmetiske middelværdi af ethvert udtryk, der evalueres for hver række fra en gruppe, er resultatet det samme, som hvis rækkerne, der indeholder NULL for dette udtryk, slet ikke var indeholdt i gruppen.
- Der er en speciel systemfunktion eller -operation (normalt expr ER [NOT] NULL), der returnerer den boolske SAND, hvis expr er (ikke er) NULL og FALSK ellers.
Derudover kan der være specielle systemfunktioner til bekvemt at konvertere NULL til bestemte værdier, for eksempel har Oracle en systemfunktion NVL, der returnerer værdien af dens parameter, hvis den ikke er NULL, eller standardværdien, hvis operanden er NULL. SQL-92- standarden definerer to funktioner: NULLIF og COALESCE, så deres brug er mere at foretrække (hvis en bestemt DBMS implementerer dem).
Se også
Noter
- ↑ Dato K., Darwen H. Fundamentals of future database systems. Tredje Manifest. 2. udg. (under redaktion af S. D. Kuznetsov). M.: Janus-K, 2004.
SQL |
---|
Versioner |
- SQL-86
- SQL-89
- SQL-92
- SQL:1999
- SQL:2003
- SQL:2006
- SQL:2008
- SQL:2011
- SQL:2016
|
---|
Nøgleord |
|
---|
Relaterede artikler |
|
---|
Dele af ISO/IEC SQL |
- Ramme
- Fundament
- Call Level Interface
- Vedvarende lagrede moduler
- Håndtering af eksterne data
- Objektsprogbindinger
- Informations- og definitionsskemaer
- SQL-rutiner og -typer til Java-programmeringssproget
- XML-relaterede specifikationer
|
---|