0% encontró este documento útil (0 votos)
3 vistas7 páginas

SQL Parte1

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas7 páginas

SQL Parte1

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7

SQL

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.

Estructura basica (select, where)


El propósito de la instrucción SELECT consiste en extraer y visualizar datos de una o
más tablas de la base de datos. Se trata de un comando extremadamente potente,
capaz de realizar el equivalente de las operaciones de selección, proyección y
combinación del algebra relacional en una única instrucción. SELECT es el comando
SQL más frecuentemente utilizado y tiene el siguiente formato general:

SELECT [DISTINCT | ALL] {* | [expresionColumna [AS Nuevo nombre]] [,�]}


FROM NombreTabla [alias] [,�]

[WHERE condición]

[GROUP BY listaColumnas HAVING condición]

[ORDER BY listaColumnas]

ExpresionColumna representa un nombre de columna o una expresión, NombreTabla


es el nombre de una tabla o vista de una base de datos ya existente y a la que se tenga
acceso, y alias es una abreviatura opcional para NombreTabla. La secuencia de
procesamiento en la intrucción SELECT es:

 SELECT: especifica que columnas deben aparecer en la salida.


 FROM: especifica la tabla o tablas que hay que usar.
 WHERE: filtra las filas de acuerdo con alguna condición.
 GROUP BY: forma grupos de filas que tengan el mismo valor de columna.
 HAVING: filtra los grupos de acuerdo con alguna condición.
 ORDER BY: especifica el orden de la salida.

Ejemplo: extraer todas las columnas de todas las filas

Generar un listado con todos los detalles de todos los miembros del personal.

SELECT staffNo, fName, IName, position, sex, DOB, salary, branchNo

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;

Tabla de resultados del ejemplo

staffNo fName IName Position Sex DOB Salary branchNo

SL21 John White Manager M 1-Oct-45 30000.00 B005

SG37 Ann Beech Assistant F 10-Oct-60 12000.00 B003

SG14 David Ford Supervisor M 24-Mar-60 18000.00 B003

SA9 Mary Howe Assistant F 1-Feb-58 9000.00 B007


SG5 Susan Brand Manager F 3-Jun-40 24000.00 B003

SL41 Julie Lee Assistatnt F 13-Jun-65 9000.00 B005

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.

SELECT staffNo, fName, IName, salary

FROM staff;

Tabla de resultados del ejemplo

staffN fNam INam


Salary
o e e

30000.0
SL21 John White
0

12000.0
SG37 Ann Beech
0

18000.0
SG14 David Ford
0

SA9 Mary Howe 9000.00

24000.0
SG5 Susan Brand
0

SL41 Julie Lee 9000.00

Estructura de datos relacionales


Los ejemplos anteriores muestran el uso de la instrucción SELECT para extraer todas
las filas de una tabla. Sin embargo, a menudo necesitamos restringir las filas que hay
que extraer. Esto puede hacerse mediante la clausula WHERE que esta compuesta de
la palabra clave WHERE seguida de una condición de búsqueda que especifica las filas
que hay que extraer. Las cinco condiciones básicas de búsqueda (o predicados) en
terminología ISO son las siguientes:
 Comparación: compara el valor de una expresión con el valor de otra.
 Rango: comprueba si el valor de una expresión cae dentro de un rango
especificado de valores.
 Pertenencia a conjunto: comprueba si el valor de una expresión coincide con
uno de los valores de un cierto conjunto.
 Correspondencia de patrones: comprueba si una cadena de caracteres se
ajusta a un patrón especificado.
 Nulo: comprueba si una columna tiene un valor nulo (desconocido).

Ejemplo: generar una lista con todos los empleados cuyo salario sea superior a 10000
euros.

SELECT staffNo, fName, IName, position, salary

FROM staff

WHERE salary >10000;

Tabla de resultados del ejemplo

staff fNa fNa Positio


Salary
No me me n

Whi Manag 30000


SL21 John
te er .00

Bee Assista 12000


SG37 Ann
ch nt .00

Davi Superv 18000


SG14 Ford
d isor .00

Susa Bran Manag 24000


SG5
n d er .00

En SQL, están disponibles los siguientes operadores simples de comparación

= igual

< > distinto (estándar ISO)

< menor que

> mayor que

¡= distinto
<= menor o igual que

>= mayor o igual que

Pueden generarse predicados más complejos utilizando los operadores lógicos AND,
OR, y NOT.

Ejemplo: generar un listado con la dirección de todas las sucursales de Londres y


Glasgow

SELECT *

FROM Branch

WHERE city = ‘London’ OR city = ‘Glasgow’;

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’).

Tabla de resultados del ejemplo

branchNo Street City Postcode

B005 22 Deer Rd London SW1 4EH

B003 163 Main St Glasgow G11 9QX

B002 56 Clover Dr London NW10 6EU

Funciones de agupación (group by,


having)
A menudo resulta también útil disponer de subtotales en los informes; para esto,
podemos emplear la clausula GROUP BY de la instrucción SELECT. Una consulta que
incluya la clausula GORUP BY se denomina consulta agrupada porque agrupa los datos
de las tablas indicadas en la instrucción SELECT y genera una única fila de resumen por
cada grupo. Las columnas especificadas en la clausula GROUP BY se denominan
columnas de agrupamiento .

Ejemplo
Calcular el número de empleados que trabajan en cada sucursal y la suma de sus
salarios.

SELECT branchNo, COUNT (staffNo) AS myCount, SUM (salary) AS mySum

FROM staff

GROUP BY branchNo

ORDER BY branchNo;

Tabla de resultados del ejemplo

branchNo myCount mySum

B003 3 54000.00

B005 2 39000.00

B007 1 9000.00

Restricción de los agrupamientos (clausula HAVING)

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.

SELECT branchNo, COUNT (staffNo) AS my Count, SUM (salary) AS mySum

FROM staff

GROUP BY branchNo

HAVING COUNT (staffNo) > 1

ORDER BY branchNo;

Tabla de resultados del ejemplo


branchN myCoun
mySum
o t

B003 3 54000.00

B005 2 39000.00

También podría gustarte