SQL Parte1
SQL Parte1
Introducción
La historia del modelo relacional (e indirectamente SQL) comenzó con la publicación
del articulo original de E.F. Codd, mientras este trabajaba en el laboratorio de
investigación de IBM en San Jose (Codd, 1970). En 1974, D. Chamberlin, también del
laboratorio San Jose de IBM, definió un lenguaje denominado Structured English Query
Languaje (lenguaje de consulta en ingles estructurado) o SEQUEL. En 1976 se definió
una versión revisada, SEQUEL ⁄ 2, pero posteriormente se cambió el nombre a SQL por
razones legales (Chamberlin y Boyce, 1974; Chamberlin et al., 1976). Hoy en dia
muchas personas en el mundo anglosajon siguen pronunciando SQL como sicuel (que
es la pronunciación inglesa de SEQUEL). IBM desarrolló un SGBD prototipo basado en
SEQUEL ⁄ 2, denominado System R (Astrahan et al., 1976). El propósito de este
prototipo era validar la factibilidad del modelo relacional. Además de sus otros éxitos,
uno de los resultados más importantes que se han atribuido a este proyecto es el
desarrollo de SQL. Sin embargo las raíces de SQL se encuentran en el lenguaje SQUARE
(Specifying Queries As Relational Expressions, especificación de consultas como
expresiones relacionales), que es anterior al proyecto System R. SQUARE fue diseñado
como lenguaje de investigación para implementar el algebra relacional mediante
frases en ingles (Boyce et al., 1975) A finales de la década de 1970, la empresa que
ahora se denomina Oracle Corporation desarrolló el sistema de base de datos Oracle,
que fue probablemente la primera implementación comercial de un SGBD relacional
basado en SQL. Poco después aparecería INGRES, con un lenguaje de consulta
denominada QUEL, que auque esta mas estructurado que SQL, se parecía menos al
idioma ingles. Cuando SQL se consolidó como el lenguaje estándar de base de datos
para sistemas relacionales, INGRES fue convertido en un SGBD basado en SQL. IBM
desarrolló sus primeros SGBD comerciales, denominados SQL ⁄ DS para los entornos
DOS ⁄ VSE y VM ⁄ CMS en 1981 y 1982, respectivamente, y posteriormente desarrolló
DB2 para el entorno MVS en 1983.
[WHERE condición]
[ORDER BY listaColumnas]
Generar un listado con todos los detalles de todos los miembros del personal.
FROM staff;
Hay una forma rapida de expresar todas las columnas en SQL, utilizando (*) en lugar de
los nombres de las columnas. La siguiente instrucción es una forma equivalente y más
corta de expresar la misma consulta:
SELECT *
FROM staff;
Ejemplo: extraer toda una serie de columnas específicas de todas las filas
Generar una lista con los salarios de todos los empleados en la que solo se muestre el
número de empleado, el nombre, el apellido y los datos salariales.
FROM staff;
30000.0
SL21 John White
0
12000.0
SG37 Ann Beech
0
18000.0
SG14 David Ford
0
24000.0
SG5 Susan Brand
0
Ejemplo: generar una lista con todos los empleados cuyo salario sea superior a 10000
euros.
FROM staff
= igual
¡= distinto
<= menor o igual que
Pueden generarse predicados más complejos utilizando los operadores lógicos AND,
OR, y NOT.
SELECT *
FROM Branch
En este ejemplo se utilize el operador lógico OR en la clausula WHERE para localizer las
sucursales existents en Londres (city= ‘London’= o en Glasgow (city = ‘Glasgow’).
Ejemplo
Calcular el número de empleados que trabajan en cada sucursal y la suma de sus
salarios.
FROM staff
GROUP BY branchNo
ORDER BY branchNo;
B003 3 54000.00
B005 2 39000.00
B007 1 9000.00
La clausula HAVING está diseñada para ser utilizada con la clausula GROUP BY con el
fin de restringir los grupos que aparecen en la tabla final de resultados. Aunque son
similares en cuanto a sintaxis, las clausulas HAVING y WHERE se utilizan para
diferentes propósitos. Las clausula WHERE filtra las filas individuales que se incluyen en
la tabla final de resultados, mientras que HAVING filtra los grupos que se incluyen en
dicha tabla de resultados final.
Ejemplo
Para cada sucursal que tenga mas de un empleado, averiguar el número de empleados
que trabajan en cada sucursal y la suma de sus salarios.
FROM staff
GROUP BY branchNo
ORDER BY branchNo;
B003 3 54000.00
B005 2 39000.00