SQL-syntax

Syntaxen för SQL- programmeringsspråket definieras och underhålls av ISO/IEC SC 32 som en del av ISO /IEC 9075 . Denna standard är inte fritt tillgänglig. Trots existensen av standarden är SQL-koden inte helt portabel mellan olika databassystem utan justeringar.

Språkelement

Ett diagram som visar flera av SQL-språkelementen som utgör en enda sats. Detta lägger till en till befolkningen i USA i landtabellen.

SQL-språket är uppdelat i flera språkelement, inklusive:

  • Nyckelord är ord som är definierade i SQL-språket. De är antingen reserverade (t.ex. SELECT , COUNT och YEAR ), eller icke-reserverade (t.ex. ASC , DOMAIN och KEY ). Lista över reserverade SQL-ord .
  • Identifierare är namn på databasobjekt, som tabeller, kolumner och scheman. En identifierare kanske inte är lika med ett reserverat nyckelord, såvida det inte är en avgränsad identifierare. Avgränsade identifierare betyder identifierare omslutna av dubbla citattecken. De kan innehålla tecken som normalt inte stöds i SQL-identifierare, och de kan vara identiska med ett reserverat ord, t.ex. en kolumn med namnet YEAR anges som "YEAR" .
    • I MySQL är dubbla citattecken stränga bokstavliga avgränsare som standard istället. Aktivering av ansi_quotes SQL-läge upprätthåller SQL-standardbeteendet. Dessa kan också användas oavsett detta läge genom backticks: ` YEAR` .
  • Klausuler , som är ingående komponenter i uttalanden och frågor. (I vissa fall är dessa valfria.)
  • Uttryck , som kan producera antingen skalära värden eller tabeller som består av kolumner och rader med data
  • Predikat , som specificerar villkor som kan utvärderas till SQL- logik med tre värden (3VL) (sant/falskt/okänt) eller booleska sanningsvärden och används för att begränsa effekterna av satser och frågor, eller för att ändra programflödet.
  • Frågor , som hämtar data baserat på specifika kriterier. Detta är en viktig del av SQL .
  • Uttalanden , som kan ha en bestående effekt på scheman och data, eller som kan styra transaktioner, programflöde, anslutningar, sessioner eller diagnostik.
    • SQL-satser inkluderar även semikolon (";")-satsterminator. Även om det inte krävs på varje plattform, definieras det som en standarddel av SQL-grammatiken.
  • Obetydligt blanksteg ignoreras i allmänhet i SQL-satser och frågor, vilket gör det lättare att formatera SQL-kod för läsbarhet.

Operatörer

Operatör Beskrivning Exempel
= Lika med Författare = 'Alcott'
<> Inte lika med (många DBMS accepterar != förutom <> ) Avdelning <> 'Försäljning'
> Större än Hire_Date > '2012-01-31'
< Mindre än Bonus < 50 000 . 00
>= Större än eller lika med Beroende >= 2
<= Mindre än eller lika 0 Betygsätt <= . 05
[ INTE ] MELLAN [ SYMMETRIC ] Mellan ett inkluderande intervall. SYMMETRIC inverterar intervallgränserna om den första är högre än den andra. Kostnad MELLAN 100 . 00 OCH 500 . 00
[ INTE ] GILLA [ ESCAPE ] Börjar med ett teckenmönster Full_Name LIKE "Will%"
Innehåller ett teckenmönster Full_Name LIKE '%Will%'
[ INTE ] IN Lika med ett av flera möjliga värden DeptCode IN ( 101 , 103 , 209 )
ÄR [ INTE ] NULL Jämför med null (data saknas) Adressen ÄR INTE NULL
ÄR [ INTE ] SANT eller ÄR [ INTE ] FALSK Booleskt sanningsvärdetest PaidVacation ÄR SANT
SKILJER INTE FRÅN _ Är lika med värde eller båda är nollvärden (data saknas) Skuld skiljer sig INTE FRÅN - Fordringar
SOM Används för att ändra ett kolumnnamn när du visar resultat VÄLJ medarbetare AS avdelning1

Andra operatörer har ibland föreslagits eller implementerats, som skyline-operatören (för att bara hitta de rader som inte är "sämre" än alla andra).

SQL har case -uttrycket, som introducerades i SQL-92 . I sin mest allmänna form, som kallas ett "sökt fall" i SQL-standarden:

    0
           
        0
           
      
 FALL  NÄR  n  >  "positiv"  NÄR  n  <  "negativ"  ANNARS  "noll"  SLUT 

SQL testar WHEN- villkoren i den ordning de visas i källan. Om källan inte anger ett ELSE -uttryck, har SQL som standard ELSE NULL . En förkortad syntax som kallas "enkla skiftlägen" kan också användas:

   
             
        
             
        
 FALL  n  NÄR  1  "En"  NÄR  2  "Två"  ANNAT  "Jag kan inte räkna så högt"  SLUT 

Den här syntaxen använder implicita likhetsjämförelser, med de vanliga varningarna för jämförelse med NULL .

Det finns två korta former för speciella CASE- uttryck: COALESCE och NULLIF .

COALESCE -uttrycket returnerar värdet för den första icke-NULL-operanden, hittad genom att arbeta från vänster till höger, eller NULL om alla operander är lika med NULL .

 SAMMA  (  x1  ,  x2  ) 

är ekvivalent med:

       
       FALL  NÄR  x1  INTE  ÄR  NULL  SLUTAR  x1  ANNARS  x2 

NULLIF - uttrycket har två operander och returnerar NULL om operanderna har samma värde, annars har det värdet av den första operanden.

  NULLIF  (  x1  ,  x2  ) 

är ekvivalent med

          FALL  NÄR  x1  =  x2  NULL  ANNAT  x1  SLUT 

Kommentarer

Standard SQL tillåter två format för kommentarer : -- comment , som avslutas med den första nya raden , och /* comment */ , som kan sträcka sig över flera rader.

Frågor

Den vanligaste operationen i SQL, frågan, använder sig av den deklarativa SELECT- satsen. SELECT hämtar data från en eller flera tabeller eller uttryck. Standard SELECT- satser har inga bestående effekter på databasen. Vissa icke-standardiserade implementeringar av SELECT kan ha beständiga effekter, som SELECT INTO -syntaxen som finns i vissa databaser.

Frågor tillåter användaren att beskriva önskad data, lämnar databashanteringssystemet (DBMS) för att planera , optimera och utföra de fysiska operationerna som krävs för att producera det resultatet som den väljer.

En fråga innehåller en lista med kolumner som ska inkluderas i det slutliga resultatet, normalt omedelbart efter nyckelordet SELECT . En asterisk (" * ") kan användas för att ange att frågan ska returnera alla kolumner i de efterfrågade tabellerna. SELECT är den mest komplexa satsen i SQL, med valfria nyckelord och satser som inkluderar:

  • FROM - satsen, som indikerar tabell(er) att hämta data från. FROM - satsen kan inkludera valfria JOIN- undersatser för att specificera reglerna för sammanfogning av tabeller.
  • WHERE - satsen innehåller ett jämförelsepredikat, som begränsar raderna som returneras av frågan. WHERE - satsen eliminerar alla rader från resultatuppsättningen där jämförelsepredikatet inte utvärderas till True.
  • GROUP BY- satsen projicerar rader med gemensamma värden till en mindre uppsättning rader. [ förtydligande behövs ] GROUP BY används ofta i kombination med SQL-aggregationsfunktioner eller för att eliminera dubbletter av rader från en resultatuppsättning. WHERE - satsen tillämpas före GROUP BY- satsen.
  • HAVING - satsen inkluderar ett predikat som används för att filtrera rader som härrör från GROUP BY- satsen. Eftersom den verkar på resultaten av GROUP BY- satsdelen, kan aggregeringsfunktioner användas i HAVING- satspredikatet.
  • ORDER BY -satsen identifierar vilka kolumner som ska användas för att sortera de resulterande data och i vilken riktning de ska sorteras (stigande eller fallande). Utan en ORDER BY- sats är ordningen på rader som returneras av en SQL-fråga odefinierad.
  • Nyckelordet DISTINCT eliminerar dubbletter av data.
  • OFFSET - satsen anger antalet rader som ska hoppa över innan man börjar returnera data.
  • FETCH FIRST -satsen anger antalet rader som ska returneras. Vissa SQL-databaser har istället icke-standardiserade alternativ, t.ex. LIMIT , TOP eller ROWNUM .

Klausulerna i en fråga har en speciell ordningsföljd, som betecknas med numret på höger sida. Det är som följer:

VÄLJ <kolumner> 5.
FRÅN <tabell> 1.
WHERE <predikat på rader> 2.
GRUPPER EFTER <kolumner> 3.
HA <predikat på grupper> 4.
BESTÄLL EFTER <kolumner> 6.
OFFSET 7.
HÄMTA FÖRST 8.

Följande exempel på en SELECT- fråga returnerar en lista med dyra böcker. Frågan hämtar alla rader från boktabellen där priskolumnen innehåller ett värde som är större än 100,00. Resultatet sorteras i stigande ordning efter titel . Asterisken (*) i urvalslistan anger att alla kolumner i boktabellen ska inkluderas i resultatuppsättningen.

 
   
    
    VÄLJ  *  FRÅN  Boka  VAR  pris  >  100  .  00  BESTÄLL  EFTER  titel  ; 

Exemplet nedan visar en fråga med flera tabeller, gruppering och aggregering, genom att returnera en lista med böcker och antalet författare som är associerade med varje bok.

   
         
   
   
       
    VÄLJ  bok  .  titel  AS  Titel  ,  antal  (  *  )  AS  Författare  FRÅN  bok  GÅ MED  Bok_författare  bok  .  isbn  =  Bokförfattare  .  isbn  GROUP  BY  Bok  .  titel  ; 

Exempelutdata kan likna följande:

Titel Författare ---------------------- ------- SQL-exempel och guide 4 Glädjen med SQL 1 En introduktion till SQL 2 Fallgropar i SQL 1

Under förutsättningen att isbn är det enda vanliga kolumnnamnet för de två tabellerna och att en kolumn med namnet titel bara finns i boktabellen , kan man skriva om frågan ovan i följande form:

 
         
   
   
    VÄLJ  titel  ,  antal  (  *  )  SOM  författare  FRÅN  bok  NATURLIG  GÅ MED  Bokförfattare  GRUPP  EFTER  titel  ; 

Många [ kvantifiera ] leverantörer stöder dock inte detta tillvägagångssätt eller kräver vissa kolumnnamnskonventioner för att naturliga kopplingar ska fungera effektivt.

SQL innehåller operatorer och funktioner för att beräkna värden på lagrade värden. SQL tillåter användning av uttryck i urvalslistan för att projicera data, som i följande exempel, vilket returnerar en lista med böcker som kostar mer än 100,00 med en extra kolumn omsättningsskatt som innehåller ett momsbelopp beräknat till 6 % av priset .

 
       
       
         0  
   
    
    SELECT  isbn  ,  title  ,  price  ,  price  *  .  06  AS  sales_tax  FROM  Boka  WHERE  pris  >  100  .  00  BESTÄLL  EFTER  titel  ; 

Underfrågor

Frågor kan kapslas så att resultaten från en fråga kan användas i en annan fråga via en relationsoperator eller aggregeringsfunktion. En kapslad fråga kallas även en underfråga . Medan joins och andra tabelloperationer ger beräkningsmässigt överlägsna (dvs. snabbare) alternativ i många fall, introducerar användningen av subqueries en hierarki i exekvering som kan vara användbar eller nödvändig. I följande exempel tar aggregeringsfunktionen AVG emot resultatet av en underfråga som indata:

 
       
       
   
       
    VÄLJ  isbn  ,  titel  ,  pris  FRÅN  Bok  VAR  pris  <  (  VÄLJ  AVG  (  pris  )  FRÅN  bok  )  BESTÄLL  EFTER  titel  ; 

En underfråga kan använda värden från den yttre frågan, i vilket fall den kallas en korrelerad underfråga .

Sedan 1999 tillåter SQL-standarden WITH -satser för subqueries, dvs namngivna subqueries, vanligtvis kallade vanliga tabelluttryck (även kallad subquery factoring ). CTE kan också vara rekursiva genom att hänvisa till sig själva; den resulterande mekanismen tillåter träd- eller grafövergångar (när de representeras som relationer), och mer allmänt fixpunktsberäkningar .

Härledd tabell

En härledd tabell är användningen av att referera till en SQL-underfråga i en FROM-sats. I huvudsak är den härledda tabellen en underfråga som kan väljas från eller kopplas till. Den härledda tabellfunktionaliteten tillåter användaren att referera till underfrågan som en tabell. Den infogade vyn kallas också för en inlinevy eller ett underval .

I följande exempel involverar SQL-satsen en koppling från den initiala "Book"-tabellen till den härledda tabellen "sales". Denna härledda tabell fångar associerad bokförsäljningsinformation med hjälp av ISBN för att ansluta till tabellen "Bok". Som ett resultat ger den härledda tabellen resultatuppsättningen med ytterligare kolumner (antalet sålda artiklar och företaget som sålde böckerna):

     
  
       
         
            
      VÄLJ  b  .  isbn  ,  b  .  titel  ,  b  .  pris  ,  försäljning  .  varor_sålda  ,  försäljning  .  company_nm  FROM  Book  b  JOIN  (  VÄLJ  SUMMA  (  Items_Sold  )  Items_Sold  ,  Company_Nm  ,  ISBN  FROM  Book_Sales  GROUP  BY  Company_Nm  ,  ISBN  )  sales  ON  sales  .  isbn  =  b  .  isbn 

Noll eller trevärdig logik (3VL)

Konceptet Null tillåter SQL att hantera saknad information i relationsmodellen. Ordet NULL är ett reserverat nyckelord i SQL, som används för att identifiera specialmarkören Null. Jämförelser med Null, till exempel likhet (=) i WHERE-satser, resulterar i ett okänt sanningsvärde. I SELECT-satser returnerar SQL endast resultat för vilka WHERE-satsen returnerar värdet True; dvs den exkluderar resultat med värden False och utesluter även de vars värde är Okänt.

Tillsammans med Sant och Falskt, för det okända som härrör från direkta jämförelser med Null således ett fragment av trevärdig logik till SQL. Sanningstabellerna SQL använder för OCH, ELLER och INTE motsvarar ett vanligt fragment av Kleene och Lukasiewicz trevärdiga logik (som skiljer sig i deras definition av implikation, men SQL definierar ingen sådan operation).

p OCH q sid
Sann Falsk Okänd
q Sann Sann Falsk Okänd
Falsk Falsk Falsk Falsk
Okänd Okänd Falsk Okänd
varför sid
Sann Falsk Okänd
q Sann Sann Sann Sann
Falsk Sann Falsk Okänd
Okänd Sann Okänd Okänd
p = q sid
Sann Falsk Okänd
q Sann Sann Falsk Okänd
Falsk Falsk Sann Okänd
Okänd Okänd Okänd Okänd
q INTE q
Sann Falsk
Falsk Sann
Okänd Okänd

Det finns dock tvister om den semantiska tolkningen av null i SQL på grund av dess behandling utanför direkta jämförelser. Som framgår av tabellen ovan returnerar direkta likhetsjämförelser mellan två NULL:er i SQL (t.ex. NULL = NULL ) ett sanningsvärde på Okänt. Detta är i linje med tolkningen att Null inte har ett värde (och inte är medlem i någon datadomän) utan snarare är en platshållare eller "markering" för saknad information. Men principen att två nollvärden inte är lika med varandra bryts i praktiken i SQL-specifikationen för UNION- och INTERSECT- operatorerna, som identifierar nollvärden med varandra. Följaktligen kan dessa uppsättningsoperationer i SQL ge resultat som inte representerar säker information, till skillnad från operationer som involverar explicita jämförelser med NULL (t.ex. de i en WHERE -sats som diskuteras ovan). I Codds förslag från 1979 (som i grunden antogs av SQL92) rationaliseras denna semantiska inkonsekvens genom att argumentera att borttagning av dubbletter i uppsättningsoperationer sker "på en lägre detaljnivå än likhetstester vid utvärdering av hämtningsoperationer". Datavetenskapsprofessor Ron van der Meyden drog dock slutsatsen att "Inkonsekvenserna i SQL-standarden gör att det inte är möjligt att tillskriva någon intuitiv logisk semantik till behandlingen av nollor i SQL."

Dessutom, eftersom SQL-operatorer returnerar Okänd när man jämför något med Null direkt, tillhandahåller SQL två nollspecifika jämförelsepredikat: IS NULL och IS NOT NULL testar om data är eller inte är Null. SQL stöder inte uttryckligen universell kvantifiering och måste fungera som en negerad existentiell kvantifiering . Det finns också den infixade jämförelseoperatorn < radvärdeuttryck> ÄR DISTINKT FRÅN <radvärdeuttryck>, som returnerar TRUE om inte båda operanderna är lika eller båda är NULL. På samma sätt definieras IS NOT DISTINCT FROM som NOT (<radvärdeuttryck> IS DISTINCT FROM <radvärdeuttryck>) . SQL:1999 introducerade även variabler av typen BOOLEAN , som enligt standarden även kan innehålla okända värden om de är nullbara. I praktiken implementerar ett antal system (t.ex. PostgreSQL ) BOOLEAN Unknown som en BOOLEAN NULL, vilket standarden säger att NULL BOOLEAN och ONKÄNDA "kan användas omväxlande för att betyda exakt samma sak".

Manipulation av data

Data Manipulation Language (DML) är den delmängd av SQL som används för att lägga till, uppdatera och ta bort data:

  
   
 
    INSERT  INTO  exempel  (  kolumn1  ,  kolumn2  ,  kolumn3  )  VÄRDEN  (  'test'  ,  'N'  ,  NULL  ); 
  • UPDATE ändrar en uppsättning befintliga tabellrader, t.ex.
 
    
     UPDATE-  exempel  SET  column1  =  'uppdaterat värde'  WHERE  kolumn2  =  'N'  ; 
  • DELETE tar bort befintliga rader från en tabell, t.ex.
  
     DELETE  FROM  exempel  WHERE  kolumn2  =  'N'  ; 
  • MERGE används för att kombinera data från flera tabeller. Den kombinerar elementen INSERT och UPDATE . Det är definierat i SQL:2003-standarden; dessförinnan tillhandahöll vissa databaser liknande funktionalitet via annan syntax, ibland kallad " upsert ".
       
   
          
    
           SLÅ  IN TILL   tabellnamn  ANVÄNDA  tabellreferens  (  villkor  )  NÄR  MATCHAR  UPPDATERAS  SET  kolumn1  =  värde1  [,  kolumn2  =  värde2  ...]  NÄR  INTE  MATCHAT  SÄTTA IN  (  kolumn1  [  ,  kolumn2  ...])  VÄRDEN  (  värde1  [,  värde2  ... ]) 

Transaktionskontroller

Transaktioner, om tillgängliga, avslutar DML-operationer:

  • START TRANSACTION (eller BEGIN WORK , eller BEGIN TRANSACTION , beroende på SQL-dialekt) markerar starten på en databastransaktion , som antingen slutförs helt eller inte alls.
  • SAVE TRANSACTION (eller SAVEPOINT ) sparar tillståndet för databasen vid den aktuella transaktionspunkten
   
    
    

      
 
      
  
     CREATE  TABLE  tbl_1  (  id  int  );  INSERT  INTO  tbl_1  (  id  )  VALUES  (  1  );  INSERT  INTO  tbl_1  (  id  )  VALUES  (  2  );  ÅTGÄRDER  ;  UPPDATERING  tbl_1  SET  id  =  200  WHERE  id  =  1  ;  SAVEPOINT  id_1upd  ;  UPPDATERING  tbl_1  SET  id  =  1000  WHERE  id  =  2  ;  ROLLBACK  till  id_1upd  ;  VÄLJ  ID  från  tbl_1  ; 
  • COMMIT gör alla dataändringar i en transaktion permanenta.
  • ROLLBACK kasserar alla dataändringar sedan den senaste COMMIT eller ROLLBACK , och lämnar data som den var före dessa ändringar. När COMMIT -satsen är klar kan transaktionens ändringar inte återställas.

COMMIT och ROLLBACK avslutar den aktuella transaktionen och släpper datalås. I avsaknad av en START TRANSACTION eller liknande uttalande är SQLs semantik implementeringsberoende. Följande exempel visar en klassisk överföring av pengar, där pengar tas bort från ett konto och läggs till ett annat. Om antingen borttagningen eller tillägget misslyckas, rullas hela transaktionen tillbaka.

 
      
      

 0 
 0  STARTA  TRANSAKTIONEN  ;  UPPDATERA  konto  SET  belopp  =  belopp  -  200  WHERE  account_number  =  1234  ;  UPPDATERA  Konto  SET  belopp  =  belopp  +  200  WHERE  account_number  =  2345  ;  IF  ERRORS  =  COMMIT  ;  OM  FEL  <>  ROLLBACK  ; 

Datadefinition

Data Definition Language (DDL) hanterar tabell- och indexstruktur. De mest grundläggande objekten i DDL är CREATE , ALTER , RENAME , DROP och TRUNCATE -satserna:

  • CREATE skapar ett objekt (till exempel en tabell) i databasen, t.ex.
  
  
  
    
   CREATE  TABLE  exempel  (  kolumn1  HELTAL  ,  kolumn2  VARCHAR  (  50  ),  kolumn3  DATUM  INTE  NULL  ,  PRIMÄRNYCKEL  (  kolumn1  ,  kolumn2  )  )  ;   

  • ALTER ändrar strukturen för ett befintligt objekt på olika sätt, till exempel genom att lägga till en kolumn i en befintlig tabell eller en begränsning, t.ex.
          ALTER  TABLE  exempel  ADD  kolumn4  INTEGER  DEFAULT  25  NOT  NULL  ; 
  • TRUNCATE raderar all data från en tabell på ett mycket snabbt sätt, tar bort data inuti tabellen och inte själva tabellen. Det innebär vanligtvis en efterföljande COMMIT-operation, dvs. den kan inte återställas (data skrivs inte till loggarna för återställning senare, till skillnad från DELETE).
   TRUNCATE  TABLE  exempel  ; 
  • DROP tar bort ett objekt i databasen, vanligtvis oåterkalleligt, dvs det kan inte återställas, t.ex.
   DROP  TABLE  exempel  ; 

Datatyper

Varje kolumn i en SQL-tabell deklarerar den eller de typer som kolumnen kan innehålla. ANSI SQL innehåller följande datatyper.

Karaktärssträngar och nationella karaktärssträngar
  • CHARACTER( n ) (eller CHAR( n ) ): n -teckensträng med fast bredd , vadderad med mellanslag efter behov
  • CHARACTER VARYING( n ) (eller VARCHAR( n ) ): sträng med variabel bredd med en maximal storlek på n tecken
  • CHARACTER STOR OBJECT( n [ K | M | G | T ]) (eller CLOB( n [ K | M | G | T ]) ): tecken stort objekt med en maximal storlek på n [ K | M | G | T ] tecken
  • NATIONELL CHARACTER( n ) (eller NCHAR( n ) ): sträng med fast bredd som stöder en internationell teckenuppsättning
  • NATIONELL KARAKTÄR VARIERAR( n ) (eller NVARCHAR( n ) ): NCHAR- sträng med variabel bredd
  • NATIONELL KARAKTÄR STORT OBJEKT( n [ K | M | G | T ]) (eller NCLOB( n [ K | M | G | T ]) ): nationell karaktär stort objekt med en maximal storlek på n [ K | M | G | T ] tecken

För datatyperna CHARACTER LARGE OBJECT och NATIONAL CHARACTER LARGE OBJECT kan multiplikatorerna K (1 024), M (1 048 576), G (1 073 741 824) och T (1 099 511 627 776) användas valfritt när du anger längden.

Binär
  • BINÄR( n ) : Binär sträng med fast längd, maximal längd n .
  • BINÄR VARIERANDE( n ) (eller VARBINÄR( n ) ): Binär sträng med variabel längd, maximal längd n .
  • BINÄRT STORT OBJEKT( n [ K | M | G | T ]) (eller BLOB( n [ K | M | G | T ]) ): binärt stort objekt med maximal längd n [ K | M | G | T] .

För datatypen BINARY LARGE OBJECT kan multiplikatorerna K (1 024), M (1 048 576), G (1 073 741 824) och T (1 099 511 627 776) användas valfritt när längden specificeras.

Boolean
  • BOOLEAN

Datatypen BOOLEAN kan lagra värdena TRUE och FALSE .

Numerisk
  • INTEGER (eller INT ), SMALLINT och BIGINT
  • FLYTANDE , RIKTIGT och DUBBEL PRECISION
  • NUMERISK( precision ; skala ) eller DECIMAL( precision ; skala )
  • DECFLOAT( precision )

Till exempel har talet 123,45 en precision på 5 och en skala på 2. Precisionen är ett positivt heltal som bestämmer antalet signifikanta siffror i en viss radix (binär eller decimal). Skalan är ett icke-negativt heltal . En skala på 0 indikerar att talet är ett heltal. För ett decimaltal med skala S är det exakta numeriska värdet heltalet för de signifikanta siffrorna dividerat med 10 S .

SQL tillhandahåller funktionerna CEILING och FLOOR för att runda numeriska värden. (Populära leverantörsspecifika funktioner är TRUNC (Informix, DB2, PostgreSQL, Oracle och MySQL) och ROUND (Informix, SQLite, Sybase, Oracle, PostgreSQL, Microsoft SQL Server och Mimer SQL.))

Temporal (datumtid)
  • DATUM : för datumvärden (t.ex. 2011-05-03 ).
  • TID : för tidsvärden (t.ex. 15:51:36 ).
  • TID MED TIDZON : samma som TID , men inklusive information om tidszonen i fråga.
  • TIMESTAMP : Detta är ett DATUM och en TID sammansatta i en variabel (t.ex. 2011-05-03 15:51:36.123456 ) .
  • TIMESTAMP WITH TIME ZONE : samma som TIMESTAMP , men inklusive information om tidszonen i fråga.

SQL-funktionen EXTRACT kan användas för att extrahera ett enstaka fält (till exempel sekunder) av ett datetime- eller intervallvärde. Databasserverns aktuella systemdatum/tid kan anropas genom att använda funktioner som CURRENT_DATE , CURRENT_TIMESTAMP , LOCALTIME eller LOCALTIMESTAMP . (Populära leverantörsspecifika funktioner är TO_DATE , TO_TIME , TO_TIMESTAMP , YEAR , MONTH , DAY , HOUR , MINUTE , SECOND , DAYOFYEAR , DAYOFMONTH och DAYOFWEEK .)

Intervall (datumtid)
  • ÅR( precision ) : ett antal år
  • ÅR( precision ) TILL MÅNAD : ett antal år och månader
  • MONTH( precision ) : ett antal månader
  • DAY( precision ) : ett antal dagar
  • DAY( precision ) TO HOUR : ett antal dagar och timmar
  • DAG( precision ) TILL MINUTT : ett antal dagar, timmar och minuter
  • DAG( precision ) TILL SEKUND( skala ) : ett antal dagar, timmar, minuter och sekunder
  • HOUR( precision ) : ett antal timmar
  • HOUR( precision ) TO MINUTE : ett antal timmar och minuter
  • HOUR( precision ) TO SECOND( skala ) : ett antal timmar, minuter och sekunder
  • MINUTE( precision ) : ett antal minuter
  • MINUTE( precision ) TILL SEKUND( skala ) : ett antal minuter och sekunder

Datakontroll

Data Control Language (DCL) tillåter användare att komma åt och manipulera data. Dess två huvudsakliga uttalanden är:

  • GRANT auktoriserar en eller flera användare att utföra en operation eller en uppsättning operationer på ett objekt.
  • REVOKE eliminerar ett anslag, vilket kan vara standardbeviljandet.

Exempel:

  
  
   

  
  
    GRANT  SELECT  ,  UPPDATERA  exempel  TO  some_user  ,  another_user  ;  REVOKE  SELECT  ,  UPPDATERA  exempel  FRÅN  some_user  ,  another_user  ; 

Anteckningar

  1. ^ ANSI/ISO/IEC internationell standard (IS). Databasspråk SQL—Del 2: Foundation (SQL/Foundation). 1999.
  2. ^ "Transact-SQL-referens". SQL Server Språkreferens . SQL Server 2005 böcker online. Microsoft. 2007-09-15 . Hämtad 2007-06-17 .
  3. ^   Användarhandbok för SAS 9.4 SQL-procedurer . SAS Institutet. 2013. sid. 248. ISBN 9781612905686 . Hämtad 2015-10-21 . Även om UNIQUE-argumentet är identiskt med DISTINCT är det inte en ANSI-standard.
  4. ^   Leon, Alexis ; Leon, Mathews (1999). "Eliminera dubbletter - VÄLJ med DISTINCT". SQL: En fullständig referens . New Delhi: Tata McGraw-Hill Education (publicerad 2008). sid. 143. ISBN 9780074637081 . Hämtad 2015-10-21 . [...] nyckelordet DISTINCT [...] eliminerar dubbletter från resultatuppsättningen.
  5. ^ "Vad är ordningsföljden för utförande av en SQL-fråga? - Designcise.com" . www.designcise.com . 29 juni 2015 . Hämtad 2018-02-04 .
  6. ^ a b   Hans-Joachim, K. (2003). "Nullvärden i relationsdatabaser och säkra informationssvar". Semantik i databaser. Second International Workshop Dagstuhl Castle, Tyskland, 7–12 januari 2001. Reviderade papper . Föreläsningsanteckningar i datavetenskap. Vol. 2582. s. 119–138. doi : 10.1007/3-540-36596-6_7 . ISBN 978-3-540-00957-3 .
  7. ^ a b   Ron skåpbil der Meyden, "Logiska förhållningssätt till ofullständig information: en undersökning" i Chomicki, Jan; Saake, Gunter (Eds.) Logics for Databases and Information Systems , Kluwer Academic Publishers ISBN 978-0-7923-8129-7 , sid. 344
  8. ^ ISO/IEC. ISO/IEC 9075-2:2003, "SQL/Foundation" . ISO/IEC.
  9. ^ Negri, M.; Pelagatti, G.; Sbattella, L. (februari 1989). "Semantik och problem med universell kvantifiering i SQL" . Datorjournalen . 32 (1): 90–91. doi : 10.1093/comjnl/32.1.90 . Hämtad 2017-01-16 .
  10. ^   Fratarcangeli, Claudio (1991). "Teknik för universell kvantifiering i SQL" . ACM SIGMOD Record . 20 (3): 16–24. doi : 10.1145/126482.126484 . S2CID 18326990 . Hämtad 2017-01-16 .
  11. ^   Kawash, Jalal (2004) Komplex kvantifiering i Structured Query Language (SQL): en handledning som använder relationskalkyl ; Journal of Computers in Mathematics and Science Teaching ISSN 0731-9258 Volym 23, nummer 2, 2004 AACE Norfolk, Virginia. Thefreelibrary.com
  12. ^   C. Datum (2011). SQL och relationsteori: Hur man skriver korrekt SQL-kod . O'Reilly Media, Inc. sid. 83. ISBN 978-1-4493-1640-2 .
  13. ^ ISO/IEC 9075-2:2011 §4.5
  14. ^ "ISO/IEC 9075-1:2016: Informationsteknologi – Databasspråk – SQL – Del 1: Framework (SQL/Framework)" .