NULL (SQL)
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 2 september 2021; kontroller kräver
4 redigeringar .
NULL i en DBMS är ett speciellt värde (pseudo-värde) som kan skrivas till ett fält i en databastabell ( DB). NULL motsvarar begreppet "tomt fält", det vill säga "ett fält som inte innehåller något värde." Infört för att skilja mellan tomma (inte visuellt visade) värden i databasfält (till exempel en nolllängdssträng ) och saknade värden (när inget värde skrivs i fältet alls, även tomt) .
NULL betyder nej, okänd information. Värdet NULL är inte ett värde i ordets fulla betydelse: per definition betyder det frånvaron av ett värde och kan vara av typen NULL eller av någon annan typ (CREATE TABLE new_tab AS (SELECT NULL) är en speciell typ av null , CREATE TABLE new_table AS (SELECT 10+NULL) - heltalstyp). Därför är NULL varken den booleska FALSE eller den tomma strängen eller noll. Att jämföra NULL med valfritt värde kommer att resultera i NULL, inte FALSE eller 0. Dessutom är NULL inte lika med NULL!
Behovet av NULL i relationsdatabaser
- Åsikt 1: NULL är nödvändigt och obligatoriskt för alla databaser som påstår sig vara relationella. I synnerhet utan det är det omöjligt att korrekt bygga en yttre sammanfogning (OUTER JOIN) av rader från två tabeller. Det var denna synpunkt som E. Codd höll sig till , uttryckligen inkluderade den som den tredje av 12 regler för relationell DBMS. Denna princip är inskriven i de senaste standarderna för SQL- språket .
- Åsikt 2: NULL-värdet krävs inte, och dess användning är resultatet av ett databasdesignfel. I en databas utformad helt i enlighet med normaliseringskriterierna kan det inte finnas några fält utan värden, vilket innebär att det inte finns något behov av ett speciellt pseudovärde för sådana fält. I praktiken är det dock av effektivitetsskäl ofta bekvämt att försumma några av normaliseringsreglerna, men en av kostnaderna för en sådan försummelse är uppkomsten av tomma fält, vilket är NULL [1] .
Använda NULL i en databas
I databaser som stöder konceptet NULL, för ett tabellfält i beskrivningen, avgörs om det kan vara tomt. Om så är fallet kan inget värde skrivas till det här fältet, och det här fältet kommer att ha ett NULL-värde. Du kan också uttryckligen skriva ett NULL-värde till ett sådant fält.
Vanligtvis tillåter DBMS inte NULL-värden för fält som är en del av en tabells primärnyckel . I främmande nyckelfält är däremot NULL tillåtet. Närvaron av NULL i ett främmande nyckelfält kan tolkas som ett tecken på frånvaron av en relaterad post, och en sådan främmande nyckel kräver inte implementering av reglerna för referensintegritet som krävs för något annat främmande nyckelvärde.
Operationer med NULL
Eftersom NULL i generell mening inte är ett värde, är dess användning i aritmetiska , sträng , logiska och andra operationer strängt taget felaktig. De flesta DBMS stöder dock sådana operationer, men inför särskilda regler för dem:
- NULL kan tilldelas variabler och skrivas till fält, oavsett den deklarerade datatypen för dessa variabler (fält);
- NULL kan skickas till procedurer och fungerar som ett legalt parametervärde. Resultaten av att utföra en sådan procedur eller funktion bestäms av de operationer som utförs på parametrarna inom den.
- Alla jämförelseoperationer med NULL (även operationen "NULL = NULL" ) resulterar i värdet "okänt" ( UNKNOWN ). Det slutliga resultatet i detta fall beror på det fullständiga logiska uttrycket i enlighet med sanningstabellen för logiska operationer. Om jämförelse med NULL är hela den logiska operationen (och inte en del av den), så liknar dess resultat FALSE (ett uttryck som IF <något> = NULL THEN <action1> ELSE <action2> END IF kommer alltid att leda till exekvering av åtgärd2 ).
- Aggregerade och analytiska funktioner (används i SQL som operationer på uppsättningar och listor ) tenderar att ignorera NULL-värden till förmån för giltiga värden för resten av uppsättningens element. Till exempel, för AVG-funktionen, som är utformad för att hitta det aritmetiska medelvärdet av ett uttryck som utvärderas för varje rad från en grupp, är resultatet detsamma som om raderna som innehåller NULL för detta uttryck inte fanns i gruppen alls.
- Det finns en speciell systemfunktion eller operation (vanligtvis expr ÄR [NOT] NULL) som returnerar boolean TRUE om expr är (inte är) NULL och FALSE annars.
Dessutom kan det finnas speciella systemfunktioner för att bekvämt konvertera NULL till vissa värden, till exempel har Oracle en systemfunktion NVL som returnerar värdet på sin parameter om den inte är NULL, eller standardvärdet om operanden är NULL. SQL -92- standarden definierar två funktioner: NULLIF och COALESCE, så deras användning är mer att föredra (om en viss DBMS implementerar dem).
Se även
Anteckningar
- ↑ Datum K., Darwen H. Fundamentals of future databas systems. Tredje manifestet. 2:a uppl. (under redaktion av 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
|
---|
Nyckelord |
|
---|
Relaterade artiklar |
|
---|
Delar av ISO/IEC SQL |
- Ramverk
- fundament
- Samtalsnivågränssnitt
- Beständiga lagrade moduler
- Hantering av extern data
- Objektspråksbindningar
- Informations- och definitionsscheman
- SQL-rutiner och -typer för programmeringsspråket Java
- XML-relaterade specifikationer
|
---|