**SQL:1999** (også kalt **SQL 3**) var den fjerde utgaven av database-spørrespråket SQL. Den introduserte mange nye funksjoner, hvorav mange krevde avklaringer i den påfølgende SQL:2003. SQL:1999 er tilbaketrukket og erstattet av nyere utgaver av standarden.

Sammendrag
----------

Mellom 1999 og 2002 ble ISO-standarddokumentene publisert flere ganger, og den første utgaven bestod av flere deler. I motsetning til tidligere utgaver hadde denne standarden navn med et kolon i stedet for bindestrek etter samme mønster som andre ISO-standarder. Den første delen av SQL:1999 hadde 5 deler:

* SQL/Framework ISO/IEC 9075-1:1999
* SQL/Foundation ISO/IEC 9075-2:1999
* SQL/CLI: En oppdatert definisjon av utvidelsen Call Level Interface opprinnelig publisert i 1995, også kjent som CLI-95 ISO/IEC 9075-3:1999
* SQL/PSM: En oppdatert definisjon av utvidelsen Persistent Stored Modules opprinnelig publisert i 1996, også kjent som PSM-96 ISO/IEC 9075-4:1999
* SQL/Bindings ISO/IEC 9075-5:1999

Ytterligere 3 deler som også er betraktet som en del av SQL:1999 ble publisert senere:

* SQL/MED Management of External Data (SQL:1999 part 9) ISO/IEC 9075-9:2001
* SQL/OLB Object Language Bindings (SQL:1999 part 10) ISO/IEC 9075-10: 2000
* SQL/JRT SQL Routines and Types using the Java Programming Language (SQL:1999 part 13) ISO/IEC 9075-13:2002

Nye funksjoner
--------------

### Datatyper

#### Boolske datatyper

SQL:1999-standarden krever en boolsk type, men mange kommersielle SQL-servere (Oracle Database, IBM DB2) støtter hverken dette som kolonnetype, variabeltype eller tillater den i resultatmengden. Microsoft SQL Server er et av få databasesystemer som på korrekt måte støtter BOOLEAN-verdier ved å bruke sin BIT-datatype.[] Hvert 1-8 bitfelt opptar en full byteplass i lagringsområdet. MySQL tolker BOOLEAN som et synonym for TINYINT (8-biters fortegnede heltall). PostgreSQL har en boolsk type som samsvarer med standarden.

#### Distinkte brukerdefinerte potenstyper

Distinkte brukerdefinerte typer ble introdusert som en valgfri funksjon (S011) for å tillate eksisterende atomiske typer å utvides med en særegen betydning for å skape en ny type, og derved gjøre det mulig for typekontrollmekanismen å detektere visse logiske feil, som for eksempel dersom man ved et uhell legger en alder til en lønn. Eksempelvis vil: 

```
create type age as integer FINAL;
create type salary as integer FINAL;

```

opprette to forskjellige og inkompatible typer. De distinkte SQL-typene bruker navneekvivalens, og ikke strukturell ekvivalens som for eksempel typedef i C. Det er fortsatt mulig å utføre kompatible operasjoner (på kolonner eller data) av distinkte typer ved å bruke en eksplisitt `CAST`-type.

Få SQL-systemer støtter disse funksjonene. IBM DB2 støtter dem. Oracle Database støttet dem ikke per 2012, og anbefalte i stedet å etterligne dem ved hjelp av strukturerte typer.

#### Strukturerte brukerdefinerte typer

Dette er ryggraden i den objektrelasjonelle utvidelsen i SQL:1999. De er analoge med klasser i objektorienterte programmeringsspråk. SQL:1999 tillater bare enkel arv.

### Felles tabelluttrykk og rekursive spørringer

SQL:1999 la til WITH [RECURSIVE]-konstruktøren[*bør utdypes*] som tillater rekursive spørringer (som transitiv tillukning) å spesifiseres i selve spørrespråket; se felles tabelluttrykk.

### Noen OLAP-funksjoner

GROUP BY ble utvidet med ROLLUP, CUBE og GROUPING SETS.

### Rollebasert tilgangskontroll

Full støtte for RBAC via CREATE ROLE.

### Nøkkelord

SQL:1999 introduserte UNNEST-nøkkelordet.

Referanser
----------

1. ↑  ISO/IEC 9075-2:1999 section 4.6 Boolean types
2. ↑  «MySQL :: MySQL 5.0 Reference Manual :: 11.4 Using Data Types from Other Database Engines». Dev.mysql.com. Besøkt 30. januar 2014.
3. ↑  PostgreSQL documentation about Boolean Type
4. ↑  «IBM Information Management Software for z/OS Solutions Information Center». Publib.boulder.ibm.com. Besøkt 30. januar 2014.
5. ↑  «Oracle Compliance To Core SQL:2003». Docs.oracle.com. Besøkt 30. januar 2014.
6. ↑  
Jones, Arie; Stephens, Ryan K.; Plew, Ronald R.; Garrett, Robert F.; Kriegel, Alex. «Appendix B ANSI and Vendor Keywords». *SQL Functions Programmer's Reference*. John Wiley & Sons. s. 680. ISBN 9780764598074. Besøkt 16. mai 2016.

Videre lesning
--------------

* Jim Melton; Alan R. Simon. *SQL:1999: Understanding Relational Language Components*. Morgan Kaufmann. ISBN 978-1-55860-456-8.
* Jim Melton. *Advanced SQL, 1999: Understanding Object–Relational and Other Advanced Features*. Morgan Kaufmann. ISBN 978-1-55860-677-7.

| * v
* d
* r
SQL |
| --- |
| Versjoner | 
* SEQUEL
* SQL-86
* SQL-89
* SQL-92
* SQL:1999
* SQL:2003
* SQL:2006
* SQL:2008
* SQL:2011
* SQL:2016

 |
| Nøkkelord | 
* As
* Case
* Create
* Delete
* Drop
* From
* Group by
* Having
* Insert
* Join
* Merge
* Null
* Order by
* Over
* Prepare
* Select
* Truncate
* Mengdeoperasjoner
* Union
* Update
* Where
* With

 |
| Relatert | 
* Edgar Codd
* Relasjonsdatabase
* Betingelse
* Utløser
* Resultatmengde
* Tabell
	+ Brukerdefinert funksjon
	+ Delspørring
		- Korrelert
	+ Felles tabelluttrykk/CTE
	+ Lagret prosedyre
	+ Visning

* Wikibook SQL

 |
| ISO/IEC SQL-deler | 
* Rammeverk
* Grunnlag
* Kallnivå-grensesnitt
* Vedvarende lagrede moduler
* Håndtering av eksterne data
* Objektspråk-bindinger
* Informasjons- og definisjonsskjemaer
* SQL-rutiner og typer for programmeringsspråket Java
* XML-relaterte spesifikasjoner

 |