bases de datos i - Facultad de Ciencias Exactas

Anuncio
BASES DE DATOS I
CONSULTA DE DATOS
curso 2008
Lenguaje SQL (Structured Query Language)
• Es el lenguaje standard para manejo de datos en bases de datos
relacionales y el que utilizan la mayoría de los DBMS comerciales (DB2,
Oracle, INGRES, SYBASE, SQL Server, etc.)
• SQL se propuso inicialmente en 1970 y periódicamente se publican
versiones actualizadas de la norma.
• Las expresiones en las implementaciones de SQL propias de cada
DBMS pueden diferir levemente respecto del standard.
• Las sentencias DML del SQL se pueden usar interactivamente como un
lenguaje de consulta o se pueden insertar en programas de aplicación.
• En una consulta se especifica qué información se requiere, sin
especificar cómo obtenerla (no requiere métodos de acceso a los datos).
Bases de Datos I
2
1
Sentencia SELECT
SELECT [ DISTINCT ] <lista atributos>
FROM <lista tablas>
[ WHERE condición ]
[ GROUP BY <lista atributos grupo>
[ HAVING (condición grupo) ] ]
[ ORDER BY <lista atributos orden> ] ;
• El resultado es una tabla (si el resultado es un número, se considera como
una tabla con una fila y una columna)
• DISTINCT permite eliminar duplicados
• La condición del WHERE restringir el conjunto de tuplas a recuperar
• GROUP BY `factorea´ la relación resultante en grupos, y se puede aplicar
un filtro sobre el grupo mediante HAVING (<lista ítems> debe coincidir con
<lista atributos grupo>, aunque puede incluir funciones de agregado)
• ORDER BY permite ordenar el resultado mediante una lista de campos en
<lista atributos orden>
Bases de Datos I
3
Ejemplo
N
INVESTIGADOR
id_inv nom_inv
categ
N
N
PROYECTO
trabaja
proy_id
nombre
tema
1
corresponde
duracion
Bases de Datos I
id_inst
INSTITUTO
nombre
facultad
4
2
Consultas de una tabla
Ej. 1:
1: Listar los identificadores y
nombres de los proyectos
SELECT proy_id, nombre
FROM PROYECTO ;
Ej. 2: Listar todos los datos de
los Institutos
SELECT *
FROM INSTITUTO;
Bases de Datos I
5
Consultas de una tabla - distinct
Ej. 3.a: Listar los temas de los
proyectos
SELECT tema
FROM PROYECTO ;
Ej. 3.b: Listar los distintos temas
de los proyectos
SELECT DISTINCT tema
FROM PROYECTO ;
Hay repeticiones
no se eliminan filas repetidas, a menos que
se indique explícitamente con DISTINCT
Bases de Datos I
6
3
Consultas de una tabla - condiciones
Ej. 4: Listar los nombres de los
proyectos de más de 12 meses
de duración
SELECT nombre
FROM PROYECTO
WHERE duracion > 12;
Ej. 5: Listar los nombres de los
proyectos de más de 12 meses
de duración cuyo tema
comience con ´Bases´
SELECT nombre
FROM PROYECTO
WHERE duracion >= 12
AND tema LIKE ´Bases%´ ;
Bases de Datos I
7
Consultas – funciones de agregado
Permiten resumir el resultado de una consulta:
•
•
•
•
•
SUM( ) Æ total de la columna especificada
AVG( ) Æ promedio de la columna especificada
MAX( ) Æ valor máximo de la columna especificada
MIN ( ) Æ valor mínimo de la columna especificada
COUNT ( ) Æ cantidad de tuplas
Ej. 6: Indicar la cantidad de
proyectos sobre el tema Base
de Datos
SELECT COUNT (*) AS CantProy
FROM PROYECTO
WHERE tema = ´Bases de Datos´;
Se aplican a
columnas de
tipo numérico
Ej. 7: Indicar duración mínima y máxima
de los proyectos del instituto 2
SELECT MIN (duracion) AS dmin,
MAX (duracion) AS dmax
FROM PROYECTO
WHERE id_inst = 2;
Bases de Datos I
8
4
Consultas – ordenamiento
Ej. 8: Listar id. y nombre de los proyectos de 2 años de duración,
ordenados por nombre
SELECT proy_id, nombre
FROM PROYECTO
WHERE duracion = 24
ORDER BY nombre;
Ej. 9: Listar los datos completos de los proyectos, ordenados por instituto
y duración
SELECT * FROM PROYECTO
ORDER BY id_inst, duracion;
Bases de Datos I
9
Consultas de más de una tabla
INVESTIGADOR
id_inv nom_inv
N
categ
trabaja
N
proy_id
N
PROYECTO
nombre
tema
corresponde
duracio
n
1
id_inst
INSTITUTO
nombre
facultad
Ej. 10: Obtener los nombres de los proyectos del Instituto Inst2
SELECT PROYECTO.nombre
FROM PROYECTO, INSTITUTO
WHERE PROYECTO. id_inst = INSTITUTO. id_inst
AND INSTITUTO. nombre = ´Inst2´;
Ej. 11: Listar los id. y nombre de los investigadores junto con el id. del
instituto en que trabajan
SELECT I.id_inv, I.nom_inv, P.id_inst
FROM INVESTIGADOR I, TRABAJA T, PROYECTO P
WHERE P.proy_id =T.proy_id AND I.id_inv=T.id_inv;
Bases de Datos I
10
5
Unión en SQL
• Se requiere que ambas tablas tengan tipos de datos compatibles.
SELECT * FROM R
UNION [ALL]
SELECT * FROM S;
• El operador elimina filas duplicadas, aunque se pueden conservar
usando la cláusula ALL a continuación de UNION.
• Mediante la cláusula CORRESPONDING, seguida por una lista de
nombres de columna, se permite unir dos tablas que no tienen
exactamente el mismo esquema Æ Incluye solo las columnas
indicadas, como si se hiciera una proyección (si no se incluye la lista,
genera un resultado con solo las columnas comunes a ambas tablas)
SELECT * FROM R
UNION CORRESPONDING [ BY(col1, col2, …)] [ALL]
SELECT * FROM S;
Bases de Datos I
11
Intersección
• La INTERSECCIÓN entre R y S (unión compatibles) genera otra
relación de igual esquema y cuyas tuplas son todas las de R y S.
SELECT * FROM R
INTERSECT
SELECT * FROM S;
R: A
a1
a2
B
b1
b2
S:
A
a1
a3
B
b1
b1
R INTERSECT S
A
B
a1
b1
• También se puede usar ALL y CORRESPONDING
R: A
a1
a2
a2
a3
B
b1
b2
b2
b1
S: A
a1
a2
a2
a2
B
b1
b2
b2
b2
R INTERSECT ALL S
A
B
a1
b1
a2
b2
a2
b2
Bases de Datos I
12
6
Diferencia
• La DIFERENCIA entre R y S (unión compatibles) genera otra relación de
igual esquema cuyas tuplas son todas las pertenecientes a R y no a S.
SELECT * FROM R
EXCEPT
SELECT * FROM S;
o MINUS
• Ej.:
R: A
a1
a2
B
b1
b2
S: A
a1
a3
B
b1
b1
R MINUS S:
A
B
a2
b2
S MINUS R:
A
B
a3
b1
• También se puede usar ALL y CORRESPONDING
R: A
a1
a2
a2
B
b1
b2
b2
S: A
a1
a1
a3
B
b1
b1
b1
R MINUS ALL S:
A
B
a2
b2
a2
b2
Bases de Datos I
S MINUS ALL R:
A
B
a1
b1
a3
b1
13
7
Descargar