Nulls, strings en logica - De aard van nulls - Null, 0 lege string

9 belangrijke vragen over Nulls, strings en logica - De aard van nulls - Null, 0 lege string

Hoe geef je een lege waarde op bij een rij in een tabel?

Met de waarde null, dus:

insert into Tabel values (1, 'Inge', null, 'Berk', 'DAT');

Hoe noem je het aan elkaar plakken van waarden in een tabel?

Concateneren

Wat is het concateneer statement van sql en hoe gebruik je dat?

||, dus :


select nr,
voornaam || ' ' || voorvoegsel || ' ' || naam
from Student1order by nr; 


Het resultaat is echter niet wat we willen:
NR CONCATENATION
========= =============
1 <null>
2 <null>
3 <null>4 Iris van Eik
  • Hogere cijfers + sneller leren
  • Niets twee keer studeren
  • 100% zeker alles onthouden
Ontdek Study Smart

Wat is het nadeel van concateneren met null? Waarom is dat?

Dat het een waarde null geeft.


select nr,
voornaam || ' ' || voorvoegsel || ' ' || naam
from Student1
order by nr;
Het resultaat is echter niet wat we willen:
NR CONCATENATION
========= =============
1 <null>
2 <null>
3 <null>
4 Iris van Eik
Alle namen zonder voorvoegsel zijn null geworden. De oorzaak is dat
concatenatie met een null een null geeft:
'Inge' || null null(onbekend!) (onbekend!

Firebird vat de null op als onbekende string. Als we een onbekende string ergesn aan vastplakken is het resultaat onbekend.

Wat is de oplossing voor het probleem van concatneren met null?

Een null converteren naar een lege string met de null-vervangfunctie coalesce:


select nr,
voornaam || ' ' || coalesce (voorvoegsel || ' ', '') || naam
from Student1
order by nr;
Waarom ging dit wel goed? Omdat in Firebird het vastplakken van eenlege string aan een string weer diezelfde string geeft: 

coalesce returned de eerste waarde die niet null is in een lijst.

Hoe staat een lege string in verhouding tot 0 bij optellen?

Een lege string is hetzelfde als 0 bij optellen, maar dan bij concateneren.

Hoe zorg je ervoor dat je coalesce niet hoeft te gebruiken bij een tabel met null waarden? Hoe doe je dat aan de applicatiekant?

Je vult een lege string in, dus bij een insert statement.

aan de applicatiekant kan dat niet, dan moet je dus toch aan de DB kant gebruikmaken van coalesce.

Wat is een oplossing voor een niet Codd-relationele tabel om deze wel Codd relationeel te maken?

Een default waarde te gebruiken voor de nulls of een kunstmatige primary key te gebruiken. Deze is per defintie codd relationeel

Hoe definieer je een niet-optionele kolom in Firebird?

Met 'unique' constraint.

De vragen op deze pagina komen uit de samenvatting van het volgende studiemateriaal:

  • Een unieke studie- en oefentool
  • Nooit meer iets twee keer studeren
  • Haal de cijfers waar je op hoopt
  • 100% zeker alles onthouden
Onthoud sneller, leer beter. Wetenschappelijk bewezen.
Trustpilot-logo