Programacion SQL
Programacion SQL
Programacion SQL
SQL fue uno de los primeros lenguajes comerciales para el modelo relacional de Edgar Frank Codd
como se describió en su papel 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.
Índice
1 Orígenes y evolución
2.2 Optimización
4.1 Definición
4.3 SUBCONSULTAS
4.4.2 Ejemplo
4.5 UPDATE
4.5.1 Ejemplo
4.6 DELETE
4.6.2 Ejemplo
5 Recuperación de clave
6 Disparadores
8 Interoperabilidad
9 Véase también
10 Referencias
Orígenes y evolución
Los orígenes de SQL están ligados a las bases de datos de las pc o móvil aun 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 datos basado 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.
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".
1986 SQL-86 SQL-87 Primera publicación hecha por ANSI. Confirmada por ISO en 1987.
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.
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.4
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:
Integridad: El LDD de SQL incluye comandos para especificar las restricciones de integridad que
deben cumplir los datos almacenados en la base de datos.
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
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.
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
Este comando permite crear objetos de datos, como nuevas bases de datos, tablas, vistas y
procedimientos almacenados.
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.
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';
Este comando trunca todo el contenido de una tabla. La ventaja sobre el comando DROP, 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
Definición
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
<nombre_campo> [{,<nombre_campo>}]
FROM <nombre_tabla>|<nombre_vista>
[{,<nombre_tabla>|<nombre_vista>}]
SELECT Palabra clave que indica que la sentencia de SQL que queremos ejecutar es de selección.
ALL Indica que queremos seleccionar todos los valores. Es el valor por defecto y no suele
especificarse casi nunca.
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.
WHERE Especifica una condición que debe cumplirse para que los datos sean devueltos por la
consulta. Admite los operadores lógicos AND y OR.
GROUP BY Especifica la agrupación que se da a los datos. Se usa siempre 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.
ORDER BY Presenta el resultado ordenado por las columnas indicadas. El orden puede
expresarse con 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 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.
FROM Coches
ORDER BY marca,modelo;
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.
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.
FROM Coches
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 .
FROM coches
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.
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.
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.
FROM coches c
WHERE c.matricula IN
SELECT m.matricula
FROM multas m
);
En este ejemplo, se seleccionan las matriculas 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
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
Cuando se especifican todos los valores de una tabla, se puede utilizar la sentencia acortada:
Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas de la tabla
'agenda_telefonica'):
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:
(''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'):
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.
UNION ALL
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:
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):
UNION ALL
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.
SELECT *
FROM phone_book
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.)
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
Ejemplo
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.
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 *
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 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.
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.
DB2
Firebird
HSQL
Informix
Interbase
MariaDB
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.6
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)7 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.
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
SQL injection
FSQL
AQL
Referencias
EF Codd; A relational model of data for large shared data banks. Comm. ACM, 13 (1970), pp. 377-
387.
Eisenberg et al.: SQL:2003 Has Been Published.
Rockoff, Larry (2011). Course Technology/Cengage Learning, ed. The language of SQL.
«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».
«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.
Menú de navegación
Buscar en Wikipedia
Portada
Portal de la comunidad
Actualidad
Cambios recientes
Páginas nuevas
Página aleatoria
Ayuda
Donaciones
Notificar un error
Imprimir/exportar
Crear un libro
Descargar como PDF
En otros proyectos
Wikimedia Commons
Herramientas
Cambios en enlazadas
Subir archivo
Páginas especiales
Enlace permanente
Información de la página
Elemento de Wikidata
En otros idiomas
العربية
English
हिन्दी
Bahasa Indonesia
Bahasa Melayu
Português
Русский
اردو
中文
71 más
Editar enlaces
Esta página se editó por última vez el 12 sep 2018 a las 04:18.