Consultas Que Involucran Mas de Una Relacion
Consultas Que Involucran Mas de Una Relacion
Consultas Que Involucran Mas de Una Relacion
Miguel Prez
Francis Durn
Yohannys Arrieche
Seccin: IN2121
Prof.: Simn Ramos
PNF en Informtica
Barquisimeto; Mayo 2015
PRODUCTOS Y JOIN
Joins (Cruces)
El siguiente ejemplo muestra como las joins (cruces) se realizan en SQL.
Para cruzar tres tablas SUPPLIER, PART y SELLS a travs de sus atributos
comunes, formularemos la siguiente instruccin:
SELECT S.SNAME, P.PNAME
FROM SUPPLIER S, PART P, SELLS SE
WHERE S.SNO = SE.SNO AND
P.PNO = SE.PNO;
miembros, los parmetros de sus mtodos, los bloques set y get de sus
propiedades e indizadores o los bloques add y remove de sus eventos.
En C# se incluyen numerosos modificadores que nos permiten asociar
informacin a los metadatos de un mdulo. Por ejemplo, con los modificadores
public, protected, private, internal o protected internal podemos aadir informacin
sobre la visibilidad de los tipos del mdulo y de sus miembros. Pues bien, los
atributos pueden verse como un mecanismo mediante el cual el programador
puede crear sus propios modificadores.
Un ejemplo de atributo podra ser uno llamado Ayuda que pudiese prefijar
las definiciones de miembros de tipos e indicase cul es la URL donde se pudiese
encontrar
informacin
detallada
con
ayuda
sobre
el
significado
del
miembro prefijado.
Interseccin
Permite identificar las tuplas comunes a dos relaciones.
(SELECT * FROM PROFESOR) INTERSECT (SELECT * FROM ESTUDIANTE)
SELECT * FROM (TABLE PROFESOR INTERSECT TABLE ESTUDIANTE)
INTERSECT ALL no elimina filas duplicadas
Diferencia
Identifica las tuplas de una relacin que no estn en otra.
(SELECT * FROM PROFESOR) EXCEPT (SELECT * FROM ESTUDIANTE)
SELECT * FROM (TABLE PROFESOR EXCEPT TABLE ESTUDIANTE)
EXCEPT ALL no elimina filas duplicadas
Algebra relacional
El lgebra relacional es un tipo de lgebra con una serie de operadores que
trabajan sobre una o varias relaciones para obtener una relacin resultado. Es la
base indispensable para poder escribir buenas consultas en SQL.
Las
operaciones
de
conjunto
aplicadas
relaciones:
unin(),
interseccin() y diferencia(-)
Operaciones que eliminan una parte de las relaciones: seleccin() y
proyeccin()
Operaciones que combinan las tuplas de dos relaciones: producto
cartesiano(x), combinacion natural (><) y theta
Operacin que cambia el nombre de los atributos relacin: renombre()
Unin [RS]
Diferencia [R-S]
La diferencia de R y S es el conjunto de elementos que existen en R pero no en S.
R-S es diferente a S-R, S-R seria el conjunto de elementos que existen en S pero
no en R. En el lenguaje SQL este tipo de operacin se puede realizar con la
clusula EXCEPT
Seleccin [c(R)]
Esta operacin aplicada a una relacion R, produce una nueva relacin con un
subconjunto de tuplas de R. Este subconjunto de tuplas satisface y cumple cierta
condicin(c)
Proyeccin [a1, a2,..., an (R)]
Esta operacin aplicada a una relacin R, produce una nueva relacin con
solamente los atributos (columnas) especificados por a1, a2,...,an
Combinaciones
Por medio del operador combinacin (JOIN) podemos combinar dos relaciones
segn una condicin para obtener tuplas compuestas por atributos de las dos
relaciones combinadas.
GROUP BY permite agrupar informacin por columnas SUM suma los valores
Mediante la clusula GROUP BY se dividen las filas que devuelve una consulta en
pequeos grupos. Cuando hagamos uso de esta clusula hay que tener en cuenta
==INCORRECTO==
SELECT FECHA, MONTOFROM INGRESOS
GROUP BY FECHA
==CORRECTO==
SELECT FECHA, SUM (MONTO)
FROM INGRESOS
GROUP BY FECHA
CLAUSULA HAVING
La clusula HAVING trabaja de forma muy parecida a la clusula WHERE,
y se utiliza para considerar slo aquellos grupos que satisfagan la cualificacin
dada en la misma. Las expresiones permitidas en la clusula HAVING deben
involucrar funcionen agregadas. Cada expresin que utilice slo atributos planos
deber recogerse en la clusula WHERE. Por otro lado, toda expresin que
involucre funciones agregadas debe aparecer en la clusula HAVING.
Ejemplo Having
Si queremos solamente los proveedores que venden ms de un artculo,
utilizaremos la consulta:
SELECT S.SNO, S.SNAME, COUNT(SE.PNO)
FROM SUPPLIER S, SELLS SE
WHERE S.SNO = SE.SNO
GROUP BY S.SNO, S.SNAME
HAVING COUNT(SE.PNO) > 1;
y obtendremos:
SNO | SNAME | COUNT
-----+-------+------1 | Smith | 2
3 | Adams| 2
4 | Blake | 3