SQL (Por Sus Siglas en Inglés Structured Query Language en Español Lenguaje de Consulta Estructurada) Es Un Lenguaje de

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 70

SQL

lenguaje de consulta de bases de datos


relacionales que permite extraer de las
tablas de datos una serie de registros con
criterios de selección, ordenación y
cómputo, o bien permite actualizar,
eliminar o agregar nuevos registros.

SQL (por sus siglas en inglés Structured


Query Language; en español lenguaje de
consulta estructurada) es un lenguaje de
dominio específico utilizado en
programación, diseñado para administrar,
y recuperar información de sistemas de
gestión de bases de datos relacionales.[1]
Una de sus principales características es
el manejo del álgebra y el cálculo
relacional para efectuar consultas con el
fin de recuperar, de forma sencilla,
información de bases de datos, así como
realizar cambios en ellas.
SQL
Desarrollador(es)
IBM
Información general
Paradigma Multiparadigma
Apareció en 1974
Diseñado por Donald D. Chamberlin
Última versión estable SQL:2014 (2016)
Sistema de tipos Estático, Fuerte
Implementaciones Varias
Dialectos SQL-85, SQL-88, SQL-
91, SQL:1999,
SQL:2003, SQL:2006,
SQL:2008, SQL:2011
Influido por Datalog
Ha influido a Agena, CQL, LINQ,
Windows
PowerShell[cita requerida]
Sistema operativo multiplataforma

SQL
Desarrollador
IBM
ISO/IEC 9075-1:2008
Información general
Extensión de archivo .sql
Tipo de MIME application/x-
sql
Lanzamiento inicial 1986
Última versión SQL:2012
2012
Tipo de formato Base de datos
Estándar(es) ISO/IEC 9075
Formato abierto  
Originalmente basado en el álgebra
relacional y en el cálculo relacional, SQL
consiste en un lenguaje de definición de
datos, un lenguaje de manipulación de
datos y un lenguaje de control de datos. El
alcance de SQL incluye la inserción de
datos, consultas, actualizaciones y
borrado, la creación y modificación de
esquemas y el control de acceso a los
datos. También el SQL a veces se describe
como un lenguaje declarativo, también
incluye elementos procesales.

SQL fue uno de los primeros lenguajes


comerciales para el modelo relacional de
Edgar Frank Codd como se describió en su
artículo de investigación de 1970 El
modelo relacional de datos para grandes
bancos de datos compartidos. A pesar de
no adherirse totalmente al modelo
relacional descrito por Codd, pasó a ser el
lenguaje de base de datos más usado.

SQL pasó a ser el estándar del Instituto


Nacional Estadounidense de Estándares
(ANSI) en 1986 y de la Organización
Internacional de Normalización (ISO) en
1987. Desde entonces, el estándar ha sido
revisado para incluir más características.
A pesar de la existencia de ambos
estándares, la mayoría de los códigos SQL
no son completamente portables entre
sistemas de bases de datos diferentes sin
ajustes.

Orígenes y evolución
Los orígenes de SQL están ligados a las
bases de datos relacionales,
específicamente las que residían en
máquinas IBM bajo el sistema de gestión
System R, desarrollado por un grupo de la
IBM en San José, California.

En 1970, E. F. Codd propone el modelo


relacional y asociado a este un
sublenguaje de acceso a los datos basado
en el cálculo de predicados.[2] Basándose
en estas ideas, los laboratorios de IBM
definieron el lenguaje SEQUEL (Structured
English Query Language) que más tarde
fue ampliamente implementado por el
sistema de gestión de bases de datos
(SGBD) experimental System R,
desarrollado en 1977 también por IBM. Sin
embargo, fue Oracle quien lo introdujo por
primera vez en 1979 en un producto
comercial.

El SEQUEL terminó siendo el predecesor


de SQL, que es una versión evolucionada
del primero. SQL pasa a ser el lenguaje por
excelencia de los diversos sistemas de
gestión de bases de datos relacionales
surgidos en los años siguientes y fue por
fin estandarizado en 1986 por el ANSI,
dando lugar a la primera versión estándar
de este lenguaje, "SQL-86" o "SQL1". Al año
siguiente este estándar es también
adoptado por ISO.

Sin embargo, este primer estándar no


cubría todas las necesidades de los
desarrolladores e incluía funcionalidades
de definición de almacenamiento que se
consideró suprimirlas. Así que, en 1992, se
lanzó un nuevo estándar ampliado y
revisado de SQL llamado "SQL-92" o
"SQL2".
En la actualidad SQL es el estándar de
facto de la inmensa mayoría de los SGBD
comerciales. Y, aunque la diversidad de
añadidos particulares que incluyen las
distintas implementaciones comerciales
del lenguaje es amplia, el soporte al
estándar SQL-92 es general y muy amplio.

El ANSI SQL sufrió varias revisiones y


agregados a lo largo del tiempo:
Año Nombre Alias Comentarios

1986 SQL-86 SQL-87 Primera publicación hecha por ANSI. Confirmada por la
Organización Internacional de Normalización en 1987.

1989 SQL-89 Revisión menor.

1992 SQL-92 SQL2 Revisión mayor.

1999 SQL:1999 SQL2000 Se agregaron expresiones regulares, consultas recursivas (para


relaciones jerárquicas), triggers y algunas características
orientadas a objetos.

2003 SQL:2003   Introduce algunas características de XML, cambios en las


funciones, estandarización del objeto sequence y de las columnas
autonuméricas.[3]

2005 SQL:2005   ISO/IEC 9075-14:2005 Define las maneras en las cuales SQL se
puede utilizar conjuntamente con XML. Define maneras de importar
y guardar datos XML en una base de datos SQL, manipulándolos
dentro de la base de datos y publicando el XML y los datos SQL
convencionales en forma XML. Además, proporciona facilidades
que permiten a las aplicaciones integrar dentro de su código SQL el
uso de XQuery, lenguaje de consulta XML publicado por el W3C
(World Wide Web Consortium) para acceso concurrente a datos
ordinarios SQL y documentos XML.

2008 SQL:2008   Permite el uso de la cláusula ORDER BY fuera de las definiciones de


los cursores. Incluye los disparadores del tipo INSTEAD OF. Añade
la sentencia TRUNCATE.[4]

Datos temporales (PERIOD FOR). Mejoras en las funciones de


2011 SQL:2011
ventana y de la cláusula FETCH.

Permite búsqueda de patrones, funciones de tabla polimórficas y


2016 SQL:2016
compatibilidad con los ficheros JSON.

Características generales de
SQL
SQL es un lenguaje de acceso a bases de
datos que explota la flexibilidad y potencia
de los sistemas relacionales y permite así
gran variedad de operaciones.[5]

Es un lenguaje declarativo de "alto nivel" o


"de no procedimiento" que, gracias a su
fuerte base teórica y su orientación al
manejo de conjuntos de registros —y no a
registros individuales— permite una alta
productividad en codificación y la
orientación a objetos. De esta forma, una
sola sentencia puede equivaler a uno o
más programas que se utilizarían en un
lenguaje de bajo nivel orientado a
registros. SQL también tiene las siguientes
características:

Lenguaje de definición de datos: El LDD


de SQL proporciona comandos para la
definición de esquemas de relación,
borrado de relaciones y modificaciones
de los esquemas de relación.
Lenguaje interactivo de manipulación
de datos: El LMD de SQL incluye
lenguajes de consultas basado tanto en
álgebra relacional como en cálculo
relacional de tuplas.
Integridad: El LDD de SQL incluye
comandos para especificar las
restricciones de integridad que deben
cumplir los datos almacenados en la
base de datos.
Definición de vistas: El LDD incluye
comandos para definir las vistas.
Control de transacciones: SQL tiene
comandos para especificar el comienzo
y el final de una transacción.
SQL incorporado y dinámico: Esto
quiere decir que se pueden incorporar
instrucciones de SQL en lenguajes de
programación como: C++, C, Java, PHP,
COBOL, Pascal y Fortran.
Autorización: El LDD incluye comandos
para especificar los derechos de acceso
a las relaciones y a las vistas.
Tipos de datos

Algunos de los tipos de datos básicos de


SQL son:

Varchar: Recibe cadena de palabras


compuestas de letras, números y
caracteres especiales.
int es el principal tipo de datos de
valores enteros de SQL Server. Con
números enteros con o sin signo
Date: una fecha de calendario que
contiene el año (de cuatro cifras), el
mes y el día.
Time: La hora del día en horas minutos
segundos (el valor predeterminado es
0).

Optimización

Como ya se dijo antes, y suele ser común


en los lenguajes de acceso a bases de
datos de alto nivel, SQL es un lenguaje
declarativo. O sea, que especifica qué es
lo que se quiere y no cómo conseguirlo,
por lo que una sentencia no establece
explícitamente un orden de ejecución.

El orden de ejecución interno de una


sentencia puede afectar seriamente a la
eficiencia del SGBD, por lo que se hace
necesario que éste lleve a cabo una
optimización antes de su ejecución.
Muchas veces, el uso de índices acelera
una instrucción de consulta, pero ralentiza
la actualización de los datos. Dependiendo
del uso de la aplicación, se priorizará el
acceso indexado o una rápida
actualización de la información. La
optimización difiere sensiblemente en
cada motor de base de datos y depende
de muchos factores.

Los sistemas de bases de datos


modernos poseen un componente
llamado optimizador de consultas. Este
realiza un detallado análisis de los
posibles planes de ejecución de una
consulta SQL y elige aquel que sea más
eficiente para llevar adelante la misma.

Existe una ampliación de SQL conocida


como FSQL (Fuzzy SQL, SQL difuso) que
permite el acceso a bases de datos
difusas, usando la lógica difusa. Este
lenguaje ha sido implementado a nivel
experimental y está evolucionando
rápidamente.

Lenguaje de definición de
datos (DDL)
El lenguaje de definición de datos (en
inglés Data Definition Language, o DDL), es
el que se encarga de la modificación de la
estructura de los objetos de la base de
datos. Incluye órdenes para modificar,
borrar o definir las tablas en las que se
almacenan los datos de la base de datos.
Existen cuatro operaciones básicas:
CREATE, ALTER, DROP y TRUNCATE.[6]

CREATE | CREAR

Este comando permite crear objetos de


datos, como nuevas bases de datos,
tablas, vistas y procedimientos
almacenados.

Ejemplo (crear una tabla)

CREATE TABLE 'CUSTOMERS';


ALTER | MODIFICAR

Este comando permite modificar la


estructura de una tabla u objeto. Se
pueden agregar/quitar campos a una
tabla, modificar el tipo de un campo,
agregar/quitar índices a una tabla,
modificar un trigger, etc.

Ejemplo (agregar columna a una tabla)

ALTER TABLE 'ALUMNOS' ADD


EDAD INT UNSIGNED;

DROP | ELIMINAR
Este comando elimina un objeto de la
base de datos. Puede ser una tabla, vista,
índice, trigger, función, procedimiento o
cualquier objeto que el motor de la base
de datos soporte. Se puede combinar con
la sentencia ALTER.

Ejemplo

DROP TABLE 'ALUMNOS';

TRUNCATE | TRUNCAR

Este comando solo aplica a tablas y su


función es borrar el contenido completo
de la tabla especificada. La ventaja sobre
el comando DELETE, es que si se quiere
borrar todo el contenido de la tabla, es
mucho más rápido, especialmente si la
tabla es muy grande. La desventaja es que
TRUNCATE sólo sirve cuando se quiere
eliminar absolutamente todos los
registros, ya que no se permite la cláusula
WHERE. Si bien, en un principio, esta
sentencia parecería ser DML (Lenguaje de
Manipulación de Datos), es en realidad
una DDL, ya que internamente, el comando
TRUNCATE borra la tabla y la vuelve a
crear y no ejecuta ninguna transacción.

Ejemplo
TRUNCATE TABLE
'NOMBRE_TABLA';

Lenguaje de manipulación
de datos DML(Data
Manipulation Language)
Definición

Un lenguaje de manipulación de datos


(Data Manipulation Language, o DML en
inglés) es un lenguaje proporcionado por
el sistema de gestión de base de datos
que permite a los usuarios llevar a cabo
las tareas de consulta o manipulación de
los datos, organizados por el modelo de
datos adecuado.[6]

El lenguaje de manipulación de datos más


popular hoy día es SQL, usado para
recuperar y manipular datos en una base
de datos relacional.

SELECT | SELECCIONAR

La sentencia SELECT nos permite


consultar los datos almacenados en una
tabla de la base de datos.

Forma básica
SELECT [ALL | DISTINCT ]

<nombre_campo>
[{,<nombre_campo>}]
FROM <nombre_tabla>|
<nombre_vista>

[{,<nombre_tabla>|
<nombre_vista>}]

[WHERE <condición> [{ AND|OR


<condición>}]]

[GROUP BY <nombre_campo> [{,


<nombre_campo >}]]
[HAVING <condición>[{ AND|OR
<condición>}]]

[ORDER BY <nombre_campo>|
<indice_campo> [ASC | DESC]

[{,
<nombre_campo>|
<indice_campo> [ASC | DESC
]}]]
Palabra clave que indica que la
SELECT sentencia de SQL que queremos
ejecutar es de selección.
Indica que queremos
seleccionar todos los valores.
ALL
Es el valor por defecto y no
suele especificarse casi nunca.
Indica que queremos
DISTINCT seleccionar sólo los valores
distintos.
FROM Indica la tabla (o tablas) desde
la que queremos recuperar los
datos. En el caso de que exista
más de una tabla se denomina a
la consulta "consulta
combinada" o "join". En las
consultas combinadas es
necesario aplicar una condición
de combinación a través de una
cláusula WHERE.
Especifica una condición que
debe cumplirse para que los
WHERE datos sean devueltos por la
consulta. Admite los operadores
lógicos AND y OR.
Especifica la agrupación que se
GROUP da a los datos. Se usa siempre
BY en combinación con funciones
agregadas.
HAVING Especifica una condición que
debe cumplirse para que los
datos sean devueltos por la
consulta. Su funcionamiento es
similar al de WHERE pero
aplicado al conjunto de
resultados devueltos por la
consulta. Debe aplicarse
siempre junto a GROUP BY y la
condición debe estar referida a
los campos contenidos en ella.
Presenta el resultado ordenado
por las columnas indicadas. El
ORDER orden puede expresarse con
BY ASC (orden ascendente) y DESC
(orden descendente). El valor
predeterminado es ASC.

Ejemplo:
Para formular una consulta a la tabla
Coches y recuperar los campos matrícula,
marca, modelo, color, número_kilómetros,
num_plazas debemos ejecutar la siguiente
consulta. Los datos serán devueltos
ordenados por marca y por modelo en
orden ascendente, de menor a mayor. La
palabra clave FROM indica que los datos
serán recuperados de la tabla Coches.

SELECT matricula, marca,


modelo, color,
numero_kilometros,
num_plazas
FROM Coches
ORDER BY marca,modelo;

Ejemplo de Consulta simplificada a través


de un comodín de Campos (*):

El uso del asterisco indica que queremos


que la consulta devuelva todos los
campos que existen en la tabla y los datos
serán devueltos ordenados por marca y
por modelo.

SELECT * FROM Coches ORDER


BY marca, modelo;

Cláusula WHERE
La cláusula WHERE es la instrucción que
nos permite filtrar el resultado de una
sentencia SELECT. Habitualmente no
deseamos obtener toda la información
existente en la tabla, sino que queremos
obtener sólo la información que nos
resulte útil en ese momento. La cláusula
WHERE filtra los datos antes de ser
devueltos por la consulta. Cuando en la
Cláusula WHERE queremos incluir un tipo
texto, debemos incluir el valor entre
comillas simples.

Ejemplos:
En nuestro ejemplo, se desea consultar un
coche en concreto, para esto se agregó
una cláusula WHERE. Esta cláusula
especifica una o varias condiciones que
deben cumplirse para que la sentencia
SELECT devuelva los datos. En este caso
la consulta devolverá sólo los datos del
coche con matrícula para que la consulta
devuelva sólo los datos del coche con
matrícula MF-234-ZD o bien la
matrícula FK-938-ZL . Se puede utilizar
la cláusula WHERE solamente, ó en
combinación con tantas condiciones
como queramos.
SELECT matricula, marca,
modelo, color,
numero_kilometros,
num_plazas
FROM Coches

WHERE matricula = 'MF-234-


ZD'
OR matricula = 'FK-938-
ZL' ;

Una Condición WHERE puede ser negada


a través del Operador Lógico NOT. La
Siguiente consulta devolverá todos los
datos de la tabla Coches, menos el que
tenga la Matrícula MF-234-ZD .

SELECT matricula,marca,
modelo, color,
numero_kilometros,
num_plazas
FROM coches
WHERE NOT matricula = 'MF-
234-ZD';

La Siguiente consulta utiliza la condicional


DISTINCT, la cual nos devolverá todos los
valores distintos formados por los
Campos Marca y Modelo. de la tabla
coches.
SELECT DISTINCT marca,
modelo FROM coches;

Cláusula ORDER BY

La cláusula ORDER BY es la instrucción


que nos permite especificar el orden en el
que serán devueltos los datos. Podemos
especificar la ordenación ascendente o
descendente a través de las palabras clave
ASC y DESC. La ordenación depende del
tipo de datos que este definido en la
columna, de forma que un campo
numérico será ordenado como tal, y un
alfanumérico se ordenará de la A a la Z,
aunque su contenido sea numérico. El
valor predeterminado es ASC si no se
especifica al hacer la consulta.

Ejemplos:

'SELECT' matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
'FROM' coches
'ORDER BY' marca 'ASC', modelo 'DESC';
Este ejemplo, selecciona todos los
campos matricula, marca, modelo, color,
numero_kilometros y num_plazas de la
tabla coches, ordenándolos por los
campos marca y modelo, marca en forma
ascendente y modelo en forma
descendente.

SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM coches
ORDER BY 2;

Este ejemplo, selecciona todos los


campos matrícula, marca, modelo, color,
numero_kilometros y num_plazas de la
tabla coches, ordenándolos por el campo
marca, ya que aparece en segundo lugar
dentro de la lista de campos que
componen la SELECT.

SUBCONSULTAS

Una subconsulta es una sentencia SELECT


que está embebida en una cláusula de
otra sentencia SQL. También pueden
utilizarse subconsultas en los comandos
INSERT, UPDATE, DELETE y en la cláusula
FROM.[7]
Las subconsultas pueden resultar útiles si
necesitas seleccionar filas de una tabla
con una condición que depende de los
datos de la propia tabla o de otra tabla.

La subconsulta (consulta interna), se


ejecuta antes de la consulta principal; el
resultado de la subconsulta es utilizado
por la consulta principal (consulta
externa).

SELECT c.matricula, c.modelo


FROM coches c
WHERE c.matricula IN
(
SELECT
m.matricula
FROM
multas m
WHERE
m.importe > 100
);

En este ejemplo, se seleccionan las


matrículas y los modelos de los coches
cuyas multas superan los u$s 100.

INSERT | INSERTAR

Una sentencia INSERT de SQL agrega uno


o más registros a una (y sólo una) tabla en
una base de datos relacional.
Forma básica

INSERT INTO 'tablatura'


('columnaA',['columnaB,...
'])
VALUES ('valor1',
['valor2,...'])

O también se puede utilizar


como:
INSERT INTO tablatura VALUES
('valor1','valor2')

Las cantidades de columnas y valores


deben ser iguales. Si una columna no se
especifica, le será asignado el valor por
omisión. Los valores especificados (o
implícitos) por la sentencia INSERT
deberán satisfacer todas las restricciones
aplicables. Si ocurre un error de sintaxis o
si alguna de las restricciones es violada,
no se agrega la fila y se devuelve un error.

Ejemplo

INSERT INTO
agenda_telefonica (nombre,
numero)
VALUES ('Roberto Jeldrez',
4886850);
Cuando se especifican todos los valores
de una tabla, se puede utilizar la sentencia
acortada:

INSERT INTO nombreTabla


VALUES ('valor1',
['valor2,...'])

Ejemplo (asumiendo que 'nombre' y


'número' son las únicas columnas de la
tabla 'agenda_telefonica'):

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

Formas avanzadas

Una característica de SQL (desde SQL-92)


es el uso de constructores de filas para
insertar múltiples filas a la vez, con una
sola sentencia SQL:

INSERT INTO ''tabla''


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

Esta característica es soportada por DB2,


PostgreSQL (desde la versión 8.2), MySQL,
y H2.

Ejemplo (asumiendo que 'nombre' y


'número' son las únicas columnas en la
tabla 'agenda_telefonica'):

INSERT INTO
agenda_telefonica VALUES
('Roberto Fernández',
'4886850'), ('Alejandro
Sosa', '4556550');
Que podía haber sido realizado por las
sentencias

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

Notar que las sentencias separadas


pueden tener semántica diferente
(especialmente con respecto a los
triggers), y puede tener diferente
rendimiento que la sentencia de inserción
múltiple.

Para insertar varias filas 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 no se trata de una


sentencia SQL válida de acuerdo con el
estándar SQL (SQL: 2003), debido a la
cláusula subselect incompleta.

Para hacer lo mismo en Oracle se usa la


Tabla DUAL, siempre 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


de esta lógica se muestra el siguiente
ejemplo, o como se muestra arriba (no
aplica en Oracle):

INSERT INTO phone_book


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

Copia de filas de otras tablas

Un INSERT también puede utilizarse para


recuperar datos de otros, modificarla si es
necesario e insertarla directamente en la
tabla. Todo esto se hace en una sola
sentencia SQL que no implica ningún
procesamiento intermedio en la aplicación
cliente. Un SUBSELECT se utiliza en lugar
de la cláusula VALUES. El SUBSELECT
puede contener JOIN, llamadas a
funciones, y puede incluso consultar en la
misma TABLA los datos que se inserta.
Lógicamente, el SELECT se evalúa antes
que la operación INSERT esté iniciada. Un
ejemplo se da a continuación.

INSERT INTO phone_book2


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

Una variación es necesaria cuando


algunos de los datos de la tabla fuente se
está insertando en la nueva tabla, pero no
todo el registro. (O cuando los esquemas
de las tablas no son iguales.)

INSERT INTO phone_book2 (


[name], [phoneNumber] )

SELECT [name], [phoneNumber]


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

El SELECT produce una tabla (temporal), y


el esquema de la tabla temporal debe
coincidir con el esquema de la tabla donde
los datos son insertados.

UPDATE

Una sentencia UPDATE de SQL es utilizada


para modificar los valores de un conjunto
de registros existentes en una tabla.

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

DELETE

Una sentencia DELETE de SQL borra uno o


más registros existentes en una tabla.

Forma básica

DELETE FROM tabla WHERE


columna1 = 'valor1';

Ejemplo
DELETE FROM My_table WHERE
field2 = 'N';

Recuperación de clave
Los diseñadores de base de datos que
usan una clave suplente como la clave
principal para cada tabla, se ejecutará en
el ocasional escenario en el que es
necesario recuperar automáticamente la
base de datos, generando una clave
primaria de una sentencia SQL INSERT
para su uso en otras sentencias SQL. La
mayoría de los sistemas no permiten
sentencias SQL INSERT para retornar fila
de datos. Por lo tanto, se hace necesario
aplicar una solución en tales escenarios.

Implementaciones comunes incluyen:

Utilizando un procedimiento
almacenado específico de base de
datos que genera la clave suplente,
realice la operación INSERT, y finalmente
devuelve la clave generada.
Utilizando una sentencia SELECT
especifica de base de datos, sobre una
tabla temporal que contiene la última
fila insertada. DB2 implementa esta
caracterí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


después de la sentencia INSERT con
función específica de base de datos,
que devuelve la clave primaria generada
por el registro insertado más
recientemente.
Utilizando una combinación única de
elementos del original SQL INSERT en
una posterior sentencia SELECT.
Utilizando un GUID en la sentencia SQL
INSERT y la recupera en una sentencia
SELECT.
Utilizando la función de PHP
mysql_insert_id() de MySQL después de
la sentencia INSERT.
Utilizando un INSERT con la cláusula
RETURNING para Oracle, que sólo se
puede utilizar dentro de un PL/SQL
bloque, en el caso de PostgreSQL se
puede usar también tanto 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

En el caso de MS SQL se puede utilizar


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, también conocidos
como desencadenantes (triggers en
inglés) son definidos sobre la tabla en la
que opera la sentencia INSERT, y son
evaluados en el contexto de la operación.
Los desencadenantes BEFORE INSERT
permiten la modificación de los valores
que se insertarán en la tabla. Los
desencadenantes AFTER INSERT no
puede modificar los datos de ahora en
adelante, pero se puede utilizar para iniciar
acciones en otras tablas, por ejemplo para
aplicar mecanismos de auditoría Excel.

Sistemas de gestión de base


de datos
Los sistemas de gestión de base de datos
con soporte SQL más utilizados son, por
orden alfabético:

DB2
Firebird
HSQL
Informix
InterBase
MariaDB
Microsoft SQL Server
MySQL
Oracle
PostgreSQL
PervasiveSQL
SQLite
Sybase ASE

Interoperabilidad
El lenguaje de consultas de los diferentes
sistemas de gestión de bases de datos
son incompatibles entre ellos y no
necesariamente siguen completamente el
estándar. En particular, la sintaxis de fecha
y tiempo, la concatenación de cadenas,
nulas, y la comparación de textos en
cuanto al tratamiento de mayúsculas y
minúsculas varían de un proveedor a otro.
Una excepción particular es PostgreSQL,
que se esfuerza por lograr el cumplimiento
del estándar.[8]

Las implementaciones populares de SQL


omiten comúnmente soporte para
funciones básicas de SQL estándar, como
la de los tipos de dato DATE o TIME .
Es el caso del manejador de bases de
datos de Oracle (cuyo tipo DATE se
comporta como DATETIME , y carece de
un tipo TIME )[9] y MS SQL Server (antes
de la versión de 2008). Como resultado, el
código SQL rara vez puede ser portado
entre los sistemas de base de datos sin
modificaciones.
Hay varias razones para esta falta de
portabilidad entre sistemas de bases de
datos:

La complejidad y el tamaño del estándar


SQL conlleva a que la mayoría de las
implementaciones de SQL no sean
compatibles con la norma completa.
La norma no especifica el
comportamiento de la base de datos en
varias áreas importantes (por ejemplo,
índices, almacenamiento de archivos,
etc.), dejando a las implementaciones
decidir cómo comportarse.
El estándar SQL especifica con
precisión la sintaxis que un sistema de
base de datos conforme debe
implementar. Sin embargo, no está tan
bien definida la especificación en el
estándar de la semántica de las
construcciones del lenguaje, lo que lleva
a ambigüedad.
Muchos proveedores de bases de datos
tienen grandes bases de clientes
existentes, por lo que introducir
cambios para adaptarse el estándar
podría producir incompatibilidades en
las instalaciones de los usuarios y el
proveedor puede no estar dispuesto a
abandonar la compatibilidad con
versiones anteriores.
Hay poco incentivo comercial para que
un proveedor facilite a los usuarios el
cambiar de proveedor de bases de
datos.
Los usuarios que evalúan el software de
base de datos tienden a valorar más
otros factores tales como el
rendimiento más alto en sus prioridades
sobre las conformidad al estándar.

El estándar ODBC (Open Database


Connectivity) permite acceder a la
información desde cualquier aplicación
independientemente del sistema de
gestión de base de datos (DBMS) en el
que esté almacenada la información,
desacoplando así la aplicación de la base
de datos.

Véase también
AQL
FSQL
Lenguaje de definición de datos
Modelo de base de datos
Inyección SQL

Referencias
1. Morteo, Bocalandro, Francisco,
Nicolás (2004). Un enfoque práctico
de SQL. Ediciones Cooperativas.
ISBN 987-1076-61-4.
2. EF Codd; A relational model of data
for large shared data banks. Comm.
ACM, 13 (1970), pp. 377-387.
3. Eisenberg et al.: SQL:2003 Has Been
Published.
4. Aprobación de SQL 2008.
5. Chapple, Mike. «SQL Fundamentals» .
En About.com. Databases.
Consultado el 17 de octubre de 2015.
6. Rockoff, Larry (2011). Course
Technology/Cengage Learning, ed.
The language of SQL.
7. Morteo, Bocalandro., Francisco,
Nicolás (2004). Un enfoque práctico
de SQL. Ediciones cooperativas.
ISBN 987-1076-61-4.
8. «About PostgreSQL» . PostgreSQL 9.1
official website. PostgreSQL Global
Development Group. 2012.
Consultado el 8 de junio de 2016.
«PostgreSQL prides itself in standards
compliance. Its SQL implementation
strongly conforms to the ANSI-
SQL:2008 standard».
9. «Basic Elements of Oracle SQL: Data
Types» . Oracle Database SQL
Language Reference 11g Release 2
(11.2). Oracle Database
Documentation Library. Redwood City,
CA: Oracle USA, Inc. Consultado el 8
de junio de 2016.

Datos: Q47607
Multimedia: Structured Query
Language

Obtenido de
«https://es.wikipedia.org/w/index.php?
title=SQL&oldid=119195776»

Última edición hace 6 días por Cpun…

El contenido está disponible bajo la licencia CC BY-


SA 3.0 , salvo que se indique lo contrario.

También podría gustarte