SQL

SQL (poles sos sigles n'inglés Structured Query Language; n'asturianu llinguaxe de consulta estructurada) ye un llinguaxe específicu del dominiu que da accesu a un sistema de xestión de bases de datos rellacionales que dexa especificar diversos tipos d'operaciones nellos. Una de les sos carauterístiques ye'l manexu del álxebra y el cálculu relacional que dexen efectuar consultes col fin de recuperar, de forma senciella, información de bases de datos, según faer cambeos nelles.

Orixinalmente basáu na álxebra relacional y nel cálculu relacional, SQL consiste nun llinguaxe de definición de datos, un llinguaxe de manipulación de datos y un llinguaxe de control de datos. L'algame de SQL inclúi l'insertamientu de datos, consultes, actualizaciones y borráu, la creación y cambéu d'esquemes y el control d'accesu a los datos. Tamién el SQL dacuando descríbese como un llinguaxe declarativo, tamién inclúi elementos procesales.

SQL foi unu de los primeros llinguaxes comerciales pal modelu relacional d'Edgar Frank Codd como se describió nel so papel de 1970 El modelu relacional de datos pa grandes bancos de datos compartíos. A pesar de nun xuntase totalmente al modelu relacional descritu por Codd, pasó a ser el llinguaxe de base de datos más usáu.

SQL pasó a ser l'estándar del Institutu Nacional d'Estándares d'Estaos Xuníos (ANSI) en 1986 y de la Organización Internacional de Normalización (ISO) en 1987. De magar, l'estándar foi revisáu pa incluyir más carauterístiques. A pesar de la esistencia de dambos estándares, la mayoría de los códigos SQL nun son dafechu portables ente sistemes de bases de datos distintos ensin axustes.

 Oríxenes y evolución 
Los oríxenes de SQL tán amestaos a les bases de datos de les pc o móvil entá a los de les bases de datos rellacionales. En 1970 Y. F. Codd propón el modelu relacional y acomuñáu a este un sublenguaje d'accesu a los datos basáu nel cálculu de predicaos.EF Codd; A relational model of data for large shared data banks. Comm. ACM, 13 (1970), páxs. 377-387. Basándose nestes idees, los llaboratorios d'IBM definieron el llinguaxe SEQUEL (Structured English Query Language) que más tarde foi llargamente implementáu pol sistema de xestión de bases de datos (SGBD) esperimental System R, desenvueltu en 1977 tamién por IBM. Sicasí, foi Oracle quien lo introdució per primer vegada en 1979 nun productu comercial.

El SEQUEL terminó siendo'l predecesor de SQL, que ye una versión evolucionada del primeru. SQL pasa a ser el llinguaxe por excelencia de los diversos sistemes de xestión de bases de datos relacionales surdíos nos años siguientes y foi por fin estandarizado en 1986 pol ANSI, dando llugar a la primer versión estándar d'esti llinguaxe, "SQL-86" o "SQL1". Al añu siguiente esti estándar ye tamién adoptáu por ISO.

Sicasí, esti primer estándar nun cubrir toles necesidaes de los desarrolladores ya incluyía funcionalidades de definición d'almacenamientu que consideró suprimise les. Asina que, en 1992, llanzóse un nuevu estándar ampliáu y revisáu de SQL llamáu "SQL-92" o "SQL2".

Na actualidá SQL ye l'estándar de facto de la inmensa mayoría de los SGBD comerciales. Y, anque la diversidá d'agregos particulares qu'inclúin les distintes implementaciones comerciales del llinguaxe ye amplia, el soporte al estándar SQL-92 ye xeneral y bien ampliu.

El ANSI SQL sufrió delles revisiones y amestaos a lo llargo del tiempu:

 Añu  Nome  Alies  Comentarios 1986  SQL-86  SQL-87  Primer publicación fecha por ANSI. Confirmada por ISO en 1987. 1989  SQL-89   Revisión menor. 1992  SQL-92  SQL2  Revisión mayor. 1999  SQL:1999  SQL2000  Amestáronse espresiones regulares, consultes recursivas (pa rellaciones xerárquiques), triggers y delles carauterístiques empobinaes a oxetos. 2003  SQL:2003    Introduz delles carauterístiques de XML, cambeos nes funciones, estandarización del oxetu sequence y de les columnes autonuméricas.Eisenberg et al.: SQL:2003 Has Been Published. 2005  SQL:2005    ISO/IEC 9075-14:2005 Define les maneres nes cualos SQL puede utilizase conxuntamente con XML. Define maneres d'importar y guardar dato XML nuna base de datos SQL, manipoliándolos dientro de la base de datos y publicando el XML y los datos SQL convencionales en forma XML. Amás, apurre facilidaes que dexen a les aplicaciones integrar dientro del so códigu SQL l'usu de XQuery, llinguaxe de consulta XML publicáu pol W3C (World Wide Web Consortium) p'accesu concurrente a datos ordinarios SQL y documento XML. 2008  SQL:2008    Dexa l'usu de la clausa ORDER BY fora de les definiciones de los cursores. Inclúi'l disparadores del tipu INSTEAD OF. Añade la sentencia TRUNCATE. Aprobación de SQL 2008. 2011 SQL:2011 Datos temporales (PERIOD FOR). Meyores nes funciones de ventana y de la clausa FETCH.  2016 SQL:2016 Dexa busca de patrones, funciones de tabla polimórficas y compatibilidá colos ficheros JSON.

 Carauterístiques xenerales de SQL 
SQL ye un llinguaxe d'accesu a bases de datos qu'esplota la flexibilidá y potencia de los sistemes relacionales y dexa asina gran variedá d'operaciones.

Ye un llinguaxe declarativo de "altu nivel" o "de non procedimientu" que, gracies a la so fuerte base teórica y la so orientación al manexu de conxuntos de rexistros —y non a rexistros individuales— dexa una alta productividá en codificación y l'orientación a oxetos. D'esta forma, una sola sentencia puede equivalir a unu o más programes que s'utilizaríen nun llinguaxe de baxu nivel empobináu a rexistros.
SQL tamién tien les siguientes carauterístiques:

 Llinguaxe de definición de datos: El LDD de SQL apurre comandos pa la definición d'esquemes de rellación, borráu de rellaciones y cambeos de los esquemes de rellación.
 Llinguaxe interactivo de manipulación de datos: El LMD de SQL inclúi llinguaxes de consultes basáu tantu n'álxebra relacional como en cálculu relacional de tuplas.
 Integridá: El LDD de SQL inclúi comandos pa especificar les restricciones d'integridá que tienen de cumplir los datos almacenaos na base de datos.
 Definición de vistes: El LDD inclúi comandos pa definir les vistes.
 Control de transaiciones: SQL tien comandos pa especificar l'empiezu y el final d'una transaición.
 SQL incorporáu y dinámicu: Esto quier dicir que pueden incorporase instrucciones de SQL en llinguaxes de programación como: C++, C, Java, PHP, Cobol, Pascal y Fortran.
 Autorización: El LDD inclúi comandos pa especificar los derechos d'accesu a les rellaciones y a les vistes.

 Tipos de datos 
Dalgunos de los tipos de datos básicos de SQL son:

 Varchar: Recibe cadena de pallabres compuestes de lletres, númberos y calteres especiales.
 Date: una fecha de calendariu que contién l'añu (de cuatro cifres), el mes y el día.
 Time: La hora del día n'hores minuto segundos (el valor predeterminado ye 0).
 Datetime: la combinación de Date y Time.

 Optimización 
Como yá se dixo antes, y suel ser común nos llinguaxes d'accesu a bases de datos d'altu nivel, SQL ye un llinguaxe declarativo. Esto ye, qu'especifica qué ye lo que se quier y non cómo consiguilo, polo qu'una sentencia nun establez explícitamente un orde d'execución.

L'orde d'execución internu d'una sentencia puede afectar seriamente a la eficiencia del SGBD, polo que se fai necesariu qu'ésti lleve a cabu una optimización antes de la so execución. Munches vegaes, l'usu d'índices acelera una instrucción de consulta, pero ralentiza l'actualización de los datos. Dependiendo del usu de l'aplicación, va priorizase l'accesu indexado o una rápida actualización de la información. La optimización difier sensiblemente en cada motor de base de datos y depende de munchos factores.

Esiste una ampliación de SQL conocida como FSQL (Fuzzy SQL, SQL difusu) que dexa l'accesu a bases de datos difuses, usando la lóxica difusa. Esti llinguaxe foi implementáu a nivel esperimental y ta evolucionando rápido.

 Llinguaxe de definición de datos (DDL) 
El llinguaxe de definición de datos (n'inglés Data Definition Language, o DDL), ye'l que s'encarga del cambéu de la estructura de los oxetos de la base de datos. Inclúi órdenes pa modificar, borrar o definir les tables nes que s'almacenen los datos de la base de datos. Esisten cuatro operaciones básiques: CREATE, ALTER, DROP y TRUNCATE.

 CREATE | CREAR 
Esti comandu dexa crear oxetos de datos, como nueves bases de datos, tables, vistes y procedimientos almacenaos.
Exemplu (crear una tabla)
CREATE TABLE 'CUSTOMERS';

 ALTER | MODIFICAR 
Esti comandu dexa modificar la estructura d'una tabla o oxetu. Pueden amestase/quitar campos a una tabla, modificar el tipu d'un campu, amestar/quitar índices a una tabla, modificar un trigger, etc.
Exemplu (amestar columna a una tabla)
ALTER TABLE 'ALUMNOS' ADD EDÁ INT UNSIGNED;

 DROP | ESANICIAR 
Esti comandu esanicia un oxetu de la base de datos. Puede ser una tabla, vista, índiz, trigger, función, procedimientu o cualquier oxetu que'l motor de la base de datos soporte. Puede combinase cola sentencia ALTER.

Exemplu <source
lang="sql">
 DROP TABLE 'ALUMNOS';
 </syntaxhighlight>

 TRUNCATE | BORRAR TABLA 
Esti comandu ataya tol conteníu d'una tabla. La ventaya sobre'l comandu DROP, ye que si se quier borrar tol conteníu de la tabla, ye muncho más rápido, especialmente si la tabla ye bien grande. La desventaxa ye que TRUNCATE namái sirve cuando quier esaniciase absolutamente tolos rexistros, yá que nun se dexa la clausa WHERE. Magar, nun principiu, esta sentencia paecería ser DML (Llinguaxe de Manipulación de Datos), ye en realidá una DDL, yá que internamente, el comandu TRUNCATE borra la tabla y volver a crear y nun executa nenguna transaición.

Exemplu <source
lang="sql">
 TRUNCATE TABLE 'NOME_TABLA';
</syntaxhighlight>

 Llinguaxe de manipulación de datos DML(Data Manipulation Language) 

 Definición 
Un llinguaxe de manipulación de datos (Data Manipulation Language, o DML n'inglés) ye un llinguaxe proporcionáu pol sistema de xestión de base de datos que dexa a los usuarios llevar a cabu les xeres de consulta o manipulación de los datos, entamaos pol modelu de datos fayadizu.

El llinguaxe de manipulación de datos más popular güei día ye SQL, usáu pa recuperar y manipoliar datos nuna base de datos relacional.

 SELECT | ESCOYER 
La sentencia SELECT déxanos consultar los datos almacenaos nuna tabla de la base de datos.

 Forma básica 
SELECT [ALL | DISTINCT ]
 <nome_campu> [{,<nome_campu>}]
 FROM <nome_tabla>|<nome_vista> 
 [{,<nome_tabla>|<nome_vista>}]
 [WHERE <condición> [{ AND|OR <condición>}]]
 [GROUP BY <nome_campu> [{,<nome_campu >}]]
 [HAVING <condición>[{ AND|OR <condición>}]]
 [ORDER BY <nome_campu>|<índiz_campu> [ASC | DESC]
 [{,<nome_campu>|<índiz_campu> [ASC | DESC ]}]]
SELECTPallabra clave qu'indica que la sentencia de SQL que queremos executar ye de seleición.ALLIndica que queremos escoyer tolos valores. Ye'l valor por defectu y nun suel especificase casi nunca.DISTINCTIndica que queremos escoyer namái los valores distintos.FROMIndica la tabla (o tables) dende la que queremos recuperar los datos. Nel casu de qu'esista más d'una tabla denominar a la consulta "consulta combinada" o "join". Nes consultes combinaes ye necesariu aplicar una condición de combinación al traviés d'una clausa WHERE.WHEREEspecifica una condición que tien de cumplise por que los datos sían devueltos pola consulta. Almite los operadores lóxicos AND y OR.GROUP BYEspecifica l'agrupación que se da a los datos. Úsase siempres en combinación con funciones amestaes.HAVINGEspecifica una condición que tien de cumplise por que los datos sían devueltos pola consulta. El so funcionamientu ye similar al de WHERE pero aplicáu al conxuntu de resultancies devueltes pola consulta. Tien De aplicase siempres xunto a GROUP BY y la condición tien de tar referida a los campos conteníos nella.ORDER BYPresenta la resultancia ordenada poles columnes indicaes. L'orde puede espresase con ASC (orde ascendente) y DESC (orde descendente). El valor predeterminado ye ASC.

Exemplu:

Pa formular una consulta a la tabla Coches y recuperar los campos matricula, marca, modelu, color, numberu_kilometros, num_places tenemos d'executar la siguiente consulta. Los datos van ser devueltos ordenaos por marca y por modelu n'orde ascendente, de menor a mayor. La pallabra clave FROM indica que los datos van ser recuperaos de la tabla Coches.

 SELECT matricula, marca, modelu, color, numberu_kilometros, num_places
 FROM Coches
 ORDER BY marca,modelu;

Exemplu de Consulta simplificada al traviés d'un comodín de Campos (*):

L'usu del asteriscu indica que queremos que la consulta devuelva tolos campos qu'esisten na tabla y los datos van ser devueltos ordenaos por marca y por modelu.
 SELECT * FROM Coches ORDER BY marca, modelu;

 Clausa WHERE 
La clausa WHERE ye la instrucción que nos dexa penerar la resultancia d'una sentencia SELECT. Davezu nun deseyamos llograr tola información esistente na tabla, sinón que queremos llograr namái la información que nos resulte preséu nesi momentu. La clausa WHERE penera los datos antes de ser devueltos pola consulta. Cuando na Clausa WHERE queremos incluyir un tipu testu, tenemos d'incluyir el valor ente comines simples.

Exemplos:

Nel nuesu exemplu, deseyar consultar un coche en concretu, pa esto amestóse una clausa WHERE. Esta clausa especifica una o delles condiciones que tienen de cumplise por que la sentencia SELECT devuelva los datos. Nesti casu la consulta va devolver namái los datos del coche con matrícula por que la consulta devuelva namái los datos del coche con matrícula MF-234-ZD o bien la matrícula FK-938-ZL . Puede utilizase la clausa WHERE solamente, ó en combinación con tantes condiciones como queramos.

 SELECT matricula, marca, modelu, color, numberu_kilometros, num_places
 FROM Coches
 WHERE matricula = 'MF-234-ZD'
 OR matricula = 'FK-938-ZL' ;

Una Condición WHERE pue ser negada al traviés del Operador Lóxicu NOT. La Siguiente consulta va devolver tolos datos de la tabla Coches, menos el que tenga la Matrícula MF-234-ZD .

 SELECT matricula, marca, modelu, color, numberu_kilometros, num_places
 FROM coches
 WHERE NOT matricula = 'MF-234-ZD';

La Siguiente consulta utiliza la condicional DISTINCT, que va devolvenos tolos valores distintos formaos pelos Campos Marca y Modelu. de la tabla coches.
 SELECT DISTINCT marca, modelu FROM coches;

 Clausa ORDER BY 
La clausa ORDER BY ye la instrucción que nos dexa especificar l'orde nel que van ser devueltos los datos. Podemos especificar la ordenación ascendente o descendente al traviés de les pallabres clave ASC y DESC. La ordenación depende del tipu de datos qu'esti definíu na columna, de forma que un campu numbérico va ser ordenáu como tal, y un alfanumbéricu va ordenar de l'A a la Z, anque'l so conteníu sía numbéricu. El valor predeterminado ye ASC si nun s'especifica al faer la consulta.

Exemplos:

'SELECT matricula,  marca,  modelu,  color,  numberu_kilometros,  num_places 
'FROM' coches
'ORDER BY' marca 'ASC', modelu 'DESC';
Esti exemplu, escueye tolos campos matricula, marca, modelu, color, numberu_kilometros y num_places de la tabla coches, ordenar pelos campos marca y modelu, marca en forma ascendente y modelu en forma descendente.
 'SELECT matricula,  marca,  modelu,  color,  numberu_kilometros, num_places 
 'FROM' coches
 'ORDER BY' 2;

Esti exemplu, escueye tolos campos matrícula, marca, modelu, color, numberu_kilometros y num_places de la tabla coches, ordenar pel campu marca, yá que apaez en segundu llugar dientro de la llista de campos que componen la SELECT.

 SUBCONSULTAS 
Una subconsulta ye una sentencia SELECT que ta enfiñida nuna clausa d'otra sentencia SQL.

Les subconsultas pueden resultar útiles si precises escoyer files d'una tabla con una condición que depende de los datos de la mesma tabla o d'otra tabla.

La subconsulta (consulta interna), execútase antes de la consulta principal; la resultancia de la subconsulta ye utilizáu pola consulta principal (consulta esterna).SELECT c.matricula, c.modelu FROM
 coches c
WHERE c.matricula IN
 (
 SELECT m.matricula FROM
 multes m
 WHERE m.importe > 100
 );Nesti exemplu, escuéyense matricular y los modelos de los coches que les sos multes superen los o$s 100.

 INSERT | INXERTAR 
Una sentencia INSERT de SQL amiesta unu o más rexistros a una (y namái una) tabla nuna base de datos relacional.

 Forma básica 
 INSERT INTO 'tabla' ('columnaA',['columnaB,... '])
VALUES ('valor1', ['valor2,...'])

O tamién puede utilizase como:
INSERT INTO tabla VALUES ('valor1','valor2')

Les cantidaes de columnes y valores tienen de ser iguales. Si una columna nun s'especifica, va se-y asignáu'l valor por omisión. Los valores especificaos (o implícitos) pola sentencia INSERT tendrán de satisfaer toles restricciones aplicables. Si asocede un error de sintaxis o si dalguna de les restricciones ye violada, nun s'amiesta la fila y devuélvese un error.

 Exemplu 
 INSERT INTO axenda_telefonica (nome, numberu)
VALUES ('Roberto Jeldrez', 4886850);

Cuando s'especifiquen tolos valores d'una tabla, puede utilizase la sentencia encurtiada:

 INSERT INTO nombreTabla VALUES ('valor1', ['valor2,...'])

Exemplu (asumiendo que 'nome' y 'númberu' son les úniques columnes de la tabla 'axenda_telefonica'):

 INSERT INTO axenda_telefonica
VALUES ('Jhonny Aguilar', 080473968);

 Formes avanzaes 
Una carauterística de SQL (dende SQL-92) ye l'usu de constructores de files pa inxertar múltiples files al empar, con una sola sentencia SQL:

INSERT INTO ''tabla'' (''columna1'', [''columna2,... ''])
VALUES (''valor1a'', [''valor1b,...'']), (''value2a'', [''value2b,...'']),...;

Esta carauterística ye soportada por DB2, PostgreSQL (dende la versión 8.2), MySQL, y H2.

Exemplu (asumiendo que 'nome' y 'númberu' son les úniques columnes na tabla 'axenda_telefonica'):

INSERT INTO axenda_telefonica VALUES ('Roberto Fernández', '4886850'), ('Alejandro Sosa', '4556550');

Que podía ser realizáu poles sentencies

INSERT INTO axenda_telefonica VALUES ('Roberto Fernández', '4886850');
INSERT INTO axenda_telefonica VALUES ('Alejandro Sosa', '4556550');

Notar que les sentencies separaes pueden tener semántica distinta (especialmente con al respective de los triggers), y puede tener distintu rendimientu que la sentencia d'insertamientu múltiple.

Pa inxertar delles files en MS SQL puede utilizar esa construcción:

INSERT INTO phone_book
SELECT 'John Doe', '555-1212'
UNION ALL
SELECT 'Peter Doe', '555-2323';

Tenga en cuenta que nun se trata d'una sentencia SQL válida acordies con l'estándar SQL (SQL: 2003), por cuenta de la clausa subselect incompleta.

Pa faer lo mesmo en Oracle úsase la Tabla DUAL, siempres que se trate de solo una simple fila:

INSERT INTO phone_book
SELECT 'John Doe', '555-1212' FROM DUAL
UNION ALL
SELECT 'Peter Doe','555-2323' FROM DUAL

Una implementación conforme al estándar d'esta lóxica amuésase'l siguiente exemplu, o como s'amuesa enriba (nun aplica en Oracle):

INSERT INTO phone_book
SELECT 'John Doe', '555-1212' FROM LLATERAL ( VALUES (1) ) AS t(c)
UNION ALL
SELECT 'Peter Doe','555-2323' FROM LLATERAL ( VALUES (1) ) AS t(c)

 Copia de files d'otres tables 
Un INSERT tamién puede utilizase pa recuperar datos d'otros, modificar si ye necesariu ya inxertala direutamente na tabla. Tou esto fai nuna sola sentencia SQL que nun implica nengún procesamientu entemediu na aplicación vecera. Un SUBSELECT utilizar en llugar de la clausa VALUES. El SUBSELECT puede contener JOIN, llamaes a funciones, y puede inclusive consultar na mesma TABLA los datos que s'enserta. Lóxicamente, el SELECT evalúase primero que la operación INSERT tea empecipiada. Un exemplu dase de siguío.

INSERT INTO phone_book2

SELECT *
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')

Una variación ye necesaria cuando dalgunos de los datos de la tabla fonte ta ensertándose na nueva tabla, pero non tol rexistru. (O cuando los esquemes de les tables nun son iguales.)

INSERT INTO phone_book2 ( [name], [phoneNumber] )

SELECT [name], [phoneNumber]
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')

El SELECT produz una tabla (temporal), y l'esquema de la tabla temporal tien de coincidir col esquema de la tabla onde los datos son inxertaos.

 UPDATE 
Una sentencia UPDATE de SQL ye utilizada pa modificar los valores d'un conxuntu de rexistros esistentes nuna tabla.

 Exemplu 
UPDATE My_table SET field1 = 'updated value asd' WHERE field2 = 'N';

 DELETE 
Una sentencia DELETE de SQL borra unu o más rexistros esistentes nuna tabla.

 Forma básica 
DELETE FROM tabla WHERE columna1 = 'valor1';

 Exemplu 
DELETE FROM My_table WHERE field2 = 'N';

 Recuperación de clave 
Los diseñadores de base de datos qu'usen una clave suplente como la clave principal pa cada tabla, va executar nel ocasional escenariu nel que ye necesariu recuperar automáticamente la base de datos, xenerando una clave primaria d'una sentencia SQL INSERT pal so usu n'otres sentencies SQL. La mayoría de los sistemes nun dexen sentencies SQL INSERT pa retornar fila de datos. Poro, faise necesariu aplicar una solución en tales escenarios.

Implementaciones comunes inclúin:

 Utilizando un procedimientu almacenáu específicu de base de datos que xenera la clave suplente, realice la operación INSERT, y finalmente devuelve la clave xenerada.
 Utilizando una sentencia SELECT especifica de base de datos, sobre una tabla temporal que contién la última fila inxertada. DB2 implementa esta carauterística de la siguiente manera:

SELECT *
FROM NEW TABLE ( INSERT INTO phone_book VALUES ( 'Cristobal Jeldrez','0426.817.10.30' ) ) AS t

 Utilizando una sentencia SELECT dempués de la sentencia INSERT con función específica de base de datos, que devuelve la clave primaria xenerada pol rexistru inxertáu más apocayá.
 Utilizando una combinación única d'elementos del orixinal SQL INSERT nuna posterior sentencia SELECT.
 Utilizando un GUID na sentencia SQL INSERT y recuperar nuna sentencia SELECT.
 Utilizando la función de PHP mysql_insert_id() de MySQL dempués de la sentencia INSERT.
 Utilizando un INSERT cola clausa RETURNING para Oracle, que namái se puede utilizar dientro d'un PL/SQL bloque, nel casu de PostgreSQL puede usase tamién tantu con SQL como con PL/SQL.

INSERT INTO phone_book VALUES ( 'Cristobal Jeldrez','0426.817.10.30' )
RETURNING phone_book_id INTO v_pb_id .

 Nel casu de MS SQL puede utilizase la siguiente instrucción:
Set NoCount On;
INSERT INTO phone_book VALUES ( 'Cristobal Jeldrez','0426.817.10.30' );
Select @@Identity as id .

 Disparadores 
Los disparadores, tamién conocíos como desencadenantes (triggers n'inglés) son definíos sobre la tabla na qu'opera la sentencia INSERT, y son evaluaos nel contestu de la operación. Los desencadenantes BEFORE INSERT dexen el cambéu de los valores que se van inxertar na tabla. Los desencadenantes AFTER INSERT nun puede modificar los datos d'equí p'arriba, pero puede utilizase pa empecipiar aiciones n'otres tables, por casu p'aplicar mecanismos d'auditoría Excel.

 Sistemes de xestión de base de datos 
Los sistemes de xestión de base de datos con soporte SQL más utilizaos son, por orde alfabéticu:

 DB2
 Firebird
 HSQL
 Informix
 Interbase
 MariaDB
 Microsoft SQL Server
 MySQL
 Oracle
 PostgreSQL
 PervasiveSQL
 SQLite
 Sybase GARRA

 Interoperabilidad 
El llinguaxe de consultes de los distintos sistemes de xestión de bases de datos son incompatibles ente ellos y non necesariamente siguen dafechu l'estándar. En particular, la sintaxis de fecha y tiempu, la concatenación de cadenes, nules, y la comparanza de testos en cuanto al tratamientu de mayúscules y minúscules varien d'un provisor a otru. Una esceición particular ye PostgreSQL, que s'esforcia por llograr el cumplimientu del estándar.

Les implementaciones populares de SQL omiten comúnmente soporte pa funciones básiques de SQL estándar, como la de los tipos de datu DATE o TIME. Ye'l casu del manejador de bases de datos d'Oracle (que'l so tipu DATE pórtase como DATETIME, y escarez d'un tipu TIME) y MS SQL Server (antes de la versión de 2008). Como resultancia, el códigu SQL escasamente puede ser portáu ente los sistemes de base de datos ensin cambeos.

Hai delles razones pa esta falta de portabilidad ente sistemes de bases de datos:

 La complexidá y el tamañu del estándar SQL trai a que la mayoría de les implementaciones de SQL nun sían compatibles cola norma completa.
 La norma nun especifica'l comportamientu de la base de datos en delles árees importantes (por casu, índices, almacenamientu d'archivos, etc.), dexando a les implementaciones decidir cómo portase.
 L'estándar SQL especifica con precisión la sintaxis qu'un sistema de base de datos conforme tien d'implementar. Sicasí, nun ta tan bien definida la especificación nel estándar de la semántica de les construcciones del llinguaxe, lo que lleva a ambigüedá.
 Munchos provisores de bases de datos tienen grandes bases de veceros esistentes, polo qu'introducir cambeos p'afaese l'estándar podría producir incompatibilidaes nes instalaciones de los usuarios y el provisor puede nun tar dispuestu a abandonar la compatibilidá con versiones anteriores.
 Hai pocu incentivu comercial por que un provisor facilite a los usuarios el camudar de provisor de bases de datos.
 Los usuarios qu'evalúen el software de base de datos tienden a valorar más otros factores tales como'l rendimientu más altu nes sos prioridaes sobre les conformidá al estándar.

L'estándar ODBC (Open Database Connectivity) dexa aportar a la información dende cualquier aplicación independientemente del sistema de xestión de base de datos (DBMS) nel que tea almacenada la información, desacoplando asina l'aplicación de la base de datos.

 Ver tamién 
 Llinguaxe de definición de datos
 SQL injection
 FSQL
 AQL
 Modelu de base de datos

 Referencies 

SQL
Categoría:Formatos d'archivos informáticos
Categoría:Acrónimos d'informática
Categoría:Software de 1974