Orígenes y Evolución SQL
Orígenes y Evolución SQL
Los orígenes de SQL están ligados a los de las bases de datos relacionales. En
1970 E. F. Codd propone el modelo relacional y asociado a este un sublenguaje de
acceso a los datosbasado en el cálculo de predicados.1 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.
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".
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).
Datetime: la combinación de Date y Time.
Optimización[editar]
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.
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)[editar]
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. 5
CREATE | CREAR[editar]
Este comando permite crear objetos de datos, como nuevas bases de datos, tablas,
vistas y procedimientos almacenados.
ALTER | MODIFICAR[editar]
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.
DROP | ELIMINAR[editar]
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
Ejemplo
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[editar]
La sentencia SELECT nos permite consultar los datos almacenados en una tabla de
la base de datos.
Forma básica[editar]
SELECT Palabra clave que indica que la sentencia de SQL que queremos ejecutar
es de selección.
Indica que queremos seleccionar todos los valores. Es el valor por defecto
ALL
y no suele especificarse casi nunca.
DISTINCT Indica que queremos seleccionar sólo los valores distintos.
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
FROM
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 datos sean
WHERE
devueltos por la consulta. Admite los operadores lógicos AND y OR.
GROUP Especifica la agrupación que se da a los datos. Se usa siempre en
BY combinación con funciones agregadas.
Especifica una condición que debe cumplirse para que los datos sean
devueltos por la consulta. Su funcionamiento es similar al de WHERE pero
HAVING 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 orden
ORDER
puede expresarse con ASC (orden ascendente) y DESC (orden
BY
descendente). El valor predeterminado esASC.
Ejemplo:
Para formular una consulta a la tabla Coches y recuperar los campos matricula,
marca, modelo, color, numero_kilometros, 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.
Cláusula WHERE[editar]
Ejemplos:
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 .
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.
INSERT | INSERTAR[editar]
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[editar]
Ejemplo[editar]
Cuando se especifican todos los valores de una tabla, se puede utilizar la sentencia
acortada:
Formas avanzadas[editar]
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'):
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.
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:
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.)
Ejemplo[editar]
UPDATE My_table SET field1 = 'updated value asd' WHERE field2 = 'N';
DELETE[editar]
Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla.
Forma básica[editar]
Ejemplo[editar]
Recuperación de clave[editar]
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.
SELECT *
FROM NEW TABLE ( INSERT INTO phone_book VALUES ( 'Cristobal
Jeldrez','0426.817.10.30' ) ) AS t
Disparadores[editar]
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.
DB2
Firebird
HSQL
Informix
Interbase
MariaDB
Microsoft SQL Server
MySQL
Oracle
PostgreSQL
Progress
PervasiveSQL
SQLite
Sybase ASE