SQL tabel- felt- og alias-navne
|
<< Click to Display Table of Contents >> SQL tabel- felt- og alias-navne |
![]() ![]()
|
Tabel-, felt- (kolonne-) og alias-navne: tegnsætning og afgrænsere
se også Udveksling af SQL-udtryk mellem forskellige typer databaser samt SQL-tips på tværs af databaser
Tabel alias navne
For nemheds skyld gives tabeller ofte alias-navne, når de refereres i SELECT-udsagn som i:
FROM TabelNavn1 AS tn1, TabelNavn2 AS tn2
eller med optionel udeladelse af AS som i:
FROM TabelNavn1 tn1, TabelNavn2 tn2
hvorefter feltnavne i resten af udsagnet kan referere til det korte alias-navne tn1 og tn2 fremfor til de fulde tabelnavne.
SQL-anvendte særtegn
Navne skal altid omgives af afgrænsere, hvis de indeholder tegn, der i SQL kan have særlig betydning:
mellemrumstegn ( ), punktum (.), komma (,), procent (%), "havelåge" (#), dollar ($), regnetegn (* / - +), komparative tegn (<, =, >) eller enkelte anførselstegn/apostrof ( ' ); sidstnævnte accepteres kun i felt- eller alias-navne eller i konstanter, hvis det indsættes som to hosstående enkelte anførsesltegn som f.eks.
'ris à l''amande', der i det endelige resultat vil vises som ris à l'amande.
Undgå desuden helt anvendelsen af kantede klammer ( [ ] ) i navne, da disse i Microsoft Access og SQL Server tolkes som afgrænsere for tabel- og feltnavne.
Hvis det har været nødvendigt at afgrænse navne eller referencer kaldes de delimited identifiers eller quoted identifiers til forskel fra de ikke-afgrænsede regular identifiers.
Afgrænser-tegn
Afgrænser-tegn er tegn, der afgrænser en tekststreng som een enhed: 'enkelte anførselstegn', "dobbelte anførselstegn" eller [kantede parenteser].
ANSI og ISO/IEC SQL:1999 standarden anbefaler dobbelte anførselstegn for navne (identifiers) der henfører til objekter (tabeller, felter/kolonner, etc.).
Tabel-navne
Tabel-navne accepteres at indeholde mellemrum, men anbefales altid holdt som eet ord, således som anvendt i NeoBasen.
For interne referencer i et SQL-udtryk må det anbefales til hvert tabel-reference at knytte et alias eller korrelationsnavn, der defineres under FROM,
f.eks. som hér med korrelationsnavnet np:
SELECT np.PersonId, np."GA hele uger" FROM NeoPers np;
Alias- (korrelations-) navne kan også, om nødvendigt, defineres for de udtrukne eller afledte feltnavne.
Felt-navne, uden tabel-reference
Hvis et felt-navn er uden mellemrum og ikke kan forveksles med et af de reserverede SQL-ord, kan det refereres uden afgrænsere omkring ordet.
Hvis et felt-navn derimod indeholder mellemrum eller SQL-anvendte særtegn eller kan forveksles med et reserveret SQL-ord, skal det omgives af afgrænsere som skal være kantede parenteser som f.eks. [Reg. dato] (da afgrænsning med enkelte eller dobbelte anførselstegn ellers får referencen til at optræde som konstant). Eksempel:
SELECT Fornavn, Efternavn, Vej, [By], [Reg. dato] FROM Medlemmer;
eller mere konsekvent som:
SELECT [Fornavn], [Efternavn], [Vej], [By], [Reg. dato] FROM Medlemmer;
Felt-navne, med tabel-reference
Felt-navne kan altid anbefales refereret med tabel-reference som præfiks adskilt af punktum efter syntaksen {tabelreference.feltnavn}, både af hensyn til overskueligheden og dermed minimering af fejl, samt for at gøre evt. udveksling til/fra andre SQL-dialekter nemmere.
Hvis et felt-navn indeholder mellemrum eller SQL-anvendte særtegn, skal det omgives af afgrænsere, men ved anvendelse af tabel-reference har man frihed til at bruge enten enkelte eller dobbelte anførselstegn, alternativt kantede parenteser, som f.eks.:
SELECT ml.Fornavn, ml.Efternavn, ml.Vej, ml.By, ml.[Reg. dato] FROM Medlemmer ml;
eller
SELECT ml.'Fornavn', ml.'Efternavn', ml.'Vej', ml.'By', ml.'Reg. dato' FROM Medlemmer ml;
eller
SELECT ml."Fornavn", ml."Efternavn", ml."Vej", ml."By", ml."Reg. dato" FROM Medlemmer ml;
eller
SELECT ml.[Fornavn], ml.[Efternavn], ml.[Vej], ml.[By], ml.[Reg. dato] FROM Medlemmer ml;
Af hensyn til muligheden for at kunne udveksle med andre databaser må det dog klart anbefales at anvende de dobbelte anførselstegn, der ar den anbefalede SQL-standard, bl.a. fordi enkelte anførselstegn i andre databaser oftest anvendes til at angiver specifikke værdier, dvs. konstanter.
Alias-navne (korrelationsnavne) for felter eller beregnede kolonne-værdier:
Disse alias-navne skal for det givne udtræk altid være helt unikke blandt de udlæste felter (kolonner) og skal ikke præfikses med tabel-navne eller tabel-alias'er.
Disse alias'er kan enten lades uden afgrænsere, eller - hvis behov for dette - med anvendelse af kanterede parenteser:
SELECT EXTRACT(YEAR FROM n2.Indlæggelsesdato) AS IndlÅr
FROM Tabel n2
ORDER BY IndlÅr;
eller
SELECT EXTRACT(YEAR FROM n2.Indlæggelsesdato) AS "Indl-År"
FROM Tabel n2
ORDER BY [Indl-År];
Alle felter, der senere i et SQL-udtryk skal behandles som et felt under f.eks. GROUP BY eller ORDER BY, og som ikke er præfikset med en tabelreference (f.eks. fordi det er et afledt eller ad hoc genereret felt), skal afgrænses med kantede parenteser for ikke at blive forvekslet med en (på dét sted illegal) konstant eller illegal reference til et ikke forekommende felt. Læg mærke til, at det kun er nødvendigt med de kantede parenteser, når sådanne navne refereres, hvor der ved dannelsen kan anvendes f.eks. dobbelte anførselstegn.
Vær opmærksom på, at AbsDB i modsætning til paradox's LocalSQL ikke accepterer tabel-præfiks for afledte eller alias feltnavne.
Se nederste del af SQL-eksemplet efter UNION: Børn udskrevet i live.
Temporære tabeller, in-Memory tabeller og successive SQL-udtryk i samme kørsel
De fleste databaser kan arbejde med temporære tabeller, som kan sikre samlet integrerede SQL-udtryk (eller "scripts"), som også friholder tabelsamlingen for forstyrrende temporære tabelnavne ved at lagre disse mellemlagrings-tabeller temporært i computerens hukommelse (RAM) fremfor på harddisken.
RAM-lagrede virtuelle tabeller markeres i AbsDB med prædikatet MEMORY foran tabelnavnet, f.eks.:
SELECT * INTO MEMORY Temp FROM KildeTabel;
hvor "Temp" er et arbitrært valgt navn for denne temporære tabel.
Se også SQL aggregationer samt SQL MEMORY mellemlagringer.
Se også Udveksling af SQL-udtryk mellem forskellige databaser.
_____________________________
27-10-2017 - © 2003-2017 Niels Knabe