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.
Desendolcador(es) | Organización Internacional de Normalización, Raymond F. Boyce y Donald D. Chamberlin (es) |
---|---|
Estensión de ficheru |
.sql |
Tipu de MIME |
application/x-sql application/sql |
Versión inicial | 1974 |
Última versión | SQL:2023 (, 1r xunu 2023) |
Tipu | Llinguaxe de programación declarativu, lenguaje de consulta (es) , llinguaxe de programación y lenguaje específico del dominio (es) |
Más información | |
Sitiu web | Web oficial |
Etiqueta de Stack Exchange | Stack Exchange |
← SEQUEL (en) | |
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
editarLos 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.[2] 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.[3] | |
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.[4] | |
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
editarSQL 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.[5]
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
editarDalgunos 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
editarComo 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)
editarEl 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.[6]
CREATE | CREAR
editarEsti 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
editarEsti 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
editarEsti 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
editarEsti 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)
editarDefinición
editarUn 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.[6]
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
editarLa sentencia SELECT déxanos consultar los datos almacenaos nuna tabla de la base de datos.
Forma básica
editarSELECT
[ALL | DISTINCT ]
<nome_riolo> [{,<nome_riolo>}]
FROM <nome_tabla>|<nome_vista>
[{,<nome_tabla>|<nome_vista>}]
[WHERE <condición> [{ AND|OR <condición>}]]
[GROUP BY <nome_riolo> [{,<nome_riolo >}]]
[HAVING <condición>[{ AND|OR <condición>}]]
[ORDER BY <nome_riolo>|<indice_campu> [ASC | DESC]
[{,<nome_riolo>|<indice_campu> [ASC | DESC ]}]]
SELECT | Pallabra clave qu'indica que la sentencia de SQL que queremos executar ye de seleición. |
ALL | Indica que queremos escoyer tolos valores. Ye'l valor por defectu y nun suel especificase casi nunca. |
DISTINCT | Indica que queremos escoyer namái los valores distintos. |
FROM | Indica 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. |
WHERE | Especifica 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 BY | Especifica l'agrupación que se da a los datos. Úsase siempres en combinación con funciones amestaes. |
HAVING | Especifica 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 BY | Presenta 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
editarLa 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
editarLa 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
editarUna 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
editarUna 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
editar 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
editar 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
editarUna 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
editarUn 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
editarUna sentencia UPDATE de SQL ye utilizada pa modificar los valores d'un conxuntu de rexistros esistentes nuna tabla.
Exemplu
editarUPDATE My_table SET field1 = 'updated value asd' WHERE field2 = 'N';
DELETE
editarUna sentencia DELETE de SQL borra unu o más rexistros esistentes nuna tabla.
Forma básica
editarDELETE FROM tabla WHERE columna1 = 'valor1';
Exemplu
editarDELETE FROM My_table WHERE field2 = 'N';
Recuperación de clave
editarLos 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
editarLos 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
editarLos sistemes de xestión de base de datos con soporte SQL más utilizaos son, por orde alfabéticu:
Interoperabilidad
editarEl 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.[7]
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
)[8] 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
editarReferencies
editar- ↑ «SQL:2023 is out» (1r xunu 2023). Consultáu'l 26 xunu 2023.
- ↑ EF Codd; A relational model of data for large shared data banks. Comm. ACM, 13 (1970), páxs. 377-387.
- ↑ Eisenberg et al.: SQL:2003 Has Been Published.
- ↑ [1] Aprobación de SQL 2008.
- ↑ Chapple, Mike. About.com (ed.): «SQL Fundamentals». Databases. Consultáu'l 17 d'ochobre de 2015.
- ↑ 6,0 6,1 Rockoff, Larry (2011). Course Technology/Cengage Learning: The language of SQL.
- ↑ «About PostgreSQL». PostgreSQL 9.1 official website. PostgreSQL Global Development Group. Consultáu'l 8 de xunu de 2016. «PostgreSQL prides itself in standards compliance. Its SQL implementation strongly conforms to the ANSI-SQL:2008 standard»
- ↑ «Basic Elements of Oracle SQL: Data Types», Oracle Database SQL Language Reference 11g Release 2 (11.2). Consultáu'l 8 de xunu de 2016.