Está en la página 1de 16

Consultas Complejas:

SELECCIÓN-AGRUPAMIENTO
„ Un grupo se puede entender como un conjunto de filas con el mismo
valor para el conjunto de columnas por las que se agrupa (las
incluidas en la cláusula GROUP BY).

Obtener
Obtener el
el nombre
nombre de
de cada
cada equipo
equipo yy la
la edad
edad media
media de
de
los ciclistas de dicho equipo:
los ciclistas de dicho equipo:
Nomeq Edad
Banesto 22
ONCE 25
select
select nomeq,
nomeq, AVG(edad)
AVG(edad) PDM 32
from Ciclista
from Ciclista Banesto 25
group by nomeq ;; Kelme 28
ONCE 30
Kelme 29
Banesto 28

Bases de Datos Curso 2006/07 DSIC-UPV 1

Consultas Complejas:
SELECCIÓN-AGRUPAMIENTO
„ Las funciones agregadas en las consultas agrupadas funcionan de
forma diferente que en las consultas normales, devolviendo un valor
por cada grupo formado.
Nomeq Edad
Banesto 22
Banesto 25
Banesto 28
ONCE 25 Un Valor
ONCE 30 por Grupo
PDM 32
Kelme 29
Kelme 28
select
select nomeq,
nomeq, AVG(edad)
AVG(edad)
from Ciclista
from Ciclista
group
group by
by nomeq
nomeq ;;
Bases de Datos Curso 2006/07 DSIC-UPV 2

1
Consultas Complejas:
SELECCIÓN-AGRUPAMIENTO
„ Entonces para la consulta:
select
select nomeq,
nomeq, AVG(edad)
AVG(edad)
from Ciclista
from Ciclista
group
group by
by nomeq
nomeq ;;
La solución, es:
Nomeq Edad
Banesto 25
ONCE 27,5
PDM 32
Kelme 28,5

Bases de Datos Curso 2006/07 DSIC-UPV 3

Consultas Complejas:
SELECCIÓN-AGRUPAMIENTO
Ejemplo
Ejemplo incorrecto:
incorrecto:

select
select nomeq,
nomeq, nombre,
nombre, AVG(edad)
AVG(edad)
from Ciclista
from Ciclista
group
group by
by nomeq
nomeq ;;

La
La regla
regla sintáctica
sintáctica que
que aplican
aplican los
los sistemas
sistemas
relacionales
relacionales para asegurar el buen funcionamiento
para asegurar el buen funcionamiento
de
de las
las consultas
consultas agrupadas
agrupadas es
es la
la siguiente:
siguiente:

“en
“en la
la selección
selección de
de una
una consulta
consulta agrupada,
agrupada, sólo
sólo pueden
pueden
aparecer
aparecer referencias
referencias aa columnas
columnas por
por las
las cuales
cuales se
se
agrupa,
agrupa, referencias
referencias aa funciones
funciones agregadas
agregadas oo literales”.
literales”.

Bases de Datos Curso 2006/07 DSIC-UPV 4

2
Consultas Complejas:
SELECCIÓN-AGRUPAMIENTO
GROUP
GROUP yy WHERE:
WHERE:

Si
Si se
se incluye
incluye la
la cláusula
cláusula where,
where, la
la aplicación
aplicación de
de
esta
esta cláusula se produce previamente aa la
cláusula se produce previamente la agrupación
agrupación

4 select
select nomeq,
nomeq, AVG(edad)
AVG(edad)
1 from Ciclista
from Ciclista
2 where
where edad>25
edad>25
3 group
group by
by nomeq
nomeq ;;

Bases de Datos Curso 2006/07 DSIC-UPV 5

Consultas Complejas:
SELECCIÓN-AGRUPAMIENTO
GROUP,
GROUP, WHERE
WHERE yy HAVING:
HAVING:
La
La cláusula
cláusula HAVING
HAVING sólo
sólo puede
puede ir
ir en
en consultas
consultas
agrupadas
agrupadas yy es
es similar
similar aa WHERE,
WHERE, pero
pero enen un
un orden
orden
diferente:
diferente:

1º)
1º) Condición
Condición WHERE
WHERE (se
(se usa
usa para
para las
las filas)
filas)
2º)
2º) Agrupamiento
Agrupamiento yy cálculo
cálculo de
de valores
valores agregados
agregados
3º)
3º) Condición
Condición HAVING
HAVING (se
(se usa
usa para
para los
los grupos)
grupos)

En
En la
la cláusula
cláusula HAVING
HAVING sólo
sólo podrán
podrán aparecer
aparecer
directamente
directamente referencias a columnas por
referencias a columnas por las
las
cuales se agrupan o a funciones agregadas.
cuales se agrupan o a funciones agregadas.

Bases de Datos Curso 2006/07 DSIC-UPV 6

3
Consultas Complejas:
SELECCIÓN-AGRUPAMIENTO
Obtener
Obtener elel nombre
nombre de
de cada
cada equipo
equipo yy la
la edad
edad media
media de
de
sus
sus ciclistas con más de 25 años, de aquellos equipos
ciclistas con más de 25 años, de aquellos equipos
con
con más
más de
de 33 corredores
corredores mayores
mayores de
de 2525 años.
años.

select
select nomeq,
nomeq, AVG(edad)
AVG(edad)
from Ciclista
from Ciclista
where
where edad>25
edad>25
group
group by
by nomeq
nomeq
having COUNT(dorsal)>3;
having COUNT(dorsal)>3;

Bases de Datos Curso 2006/07 DSIC-UPV 7

Consultas Complejas:
SELECCIÓN-AGRUPAMIENTO
Obtener
Obtener el
el nombre
nombre del
del ciclista
ciclista yy el
el número
número de
de puertos
puertos
que
que ha ganado, siendo la media de la pendiente de
ha ganado, siendo la media de la pendiente de
éstos
éstos superior
superior aa 10.
10.

select
select C.nombre,
C.nombre, COUNT(P.nompuerto)
COUNT(P.nompuerto)
from
from Ciclista C, Puerto PP
Ciclista C, Puerto
where
where C.dorsal=P.dorsal
C.dorsal=P.dorsal
group
group by
by dorsal,
dorsal, nombre
nombre Agrupar
Agrupar siempre
siempre por
por CP
CP
having AVG(P.pendiente)>10;
having AVG(P.pendiente)>10;

Bases de Datos Curso 2006/07 DSIC-UPV 8

4
Trabajo a realizar

Consultas Agrupadas y
Generales (Ciclismo, Música y
Biblioteca)

Bases de Datos Curso 2006/07 DSIC-UPV 9

Combinaciones de Tablas
Existen
Existen varias
varias formas
formas de
de combinar
combinar dos
dos tablas
tablas enen el
el
lenguaje
lenguaje SQL
SQL dando
dando lugar
lugar aa una
una “expresión
“expresión de
de tabla”:
tabla”:

√ 1º)
1º) Incluir
Incluir varias
varias tablas
tablas en
en la
la cláusula
cláusula FROM.
FROM.
2º)
2º) Uso
Uso de
de subconsultas
subconsultas enen las
las condiciones
condiciones de
√ las
de
las cláusulas
cláusulas WHERE
WHERE oo HAVING.
HAVING.
3º)
3º) Combinaciones
Combinaciones conjuntistas
conjuntistas dede tablas:
tablas:
utilizando
utilizando operadores de la teoría
operadores de la teoría de
de
conjuntos
conjuntos para
para combinar
combinar las
las tablas.
tablas.
4º)
4º) Concatenaciones
Concatenaciones de
de tablas:
tablas: utilizando
utilizando
diferentes
diferentes formas variantes del
formas variantes del operador
operador
concatenación del Álgebra Relacional.
concatenación del Álgebra Relacional.

Bases de Datos Curso 2006/07 DSIC-UPV 10

5
Combinaciones
Conjuntistas de Tablas
Corresponden
Corresponden aa los
los operadores
operadores unión,
unión, diferencia
diferencia ee
intersección del Álgebra Relacional:
intersección del Álgebra Relacional:

1º)
1º) UNION
UNION
2º)
2º) EXCEPT
EXCEPT
3º)
3º) INTERSECT
INTERSECT

Permiten
Permiten combinar
combinar tablas
tablas que
que tengan
tengan esquemas
esquemas
compatibles
compatibles. .

Bases de Datos Curso 2006/07 DSIC-UPV 11

Combinaciones
Conjuntistas de Tablas
UNIÓN:
UNIÓN:
expresión_tabla
expresión_tabla union
union [all]
[all] término_tabla
término_tabla

Realiza
Realiza la
la unión
unión de
de las
las filas
filas de
de las
las tablas
tablas
provenientes de las dos expresiones.
provenientes de las dos expresiones.

Se
Se permitirán
permitirán oo no
no duplicados
duplicados según
según se
se incluya
incluya
oo no la opción all.
no la opción all.

Obtener
Obtener el
el nombre
nombre de
de todo
todo el
el personal
personal de
de la
la vuelta:
vuelta:

(select
(select nombre
nombre from
from Ciclista)
Ciclista)
UNION
UNION
(select
(select director
director from
from Equipo);
Equipo);
Bases de Datos Curso 2006/07 DSIC-UPV 12

6
Combinaciones
Conjuntistas de Tablas
INTERSECCIÓN:
INTERSECCIÓN:
expresión_tabla
expresión_tabla intersect
intersect término_tabla
término_tabla

Realiza
Realiza la
la intersección
intersección de
de las
las filas
filas de
de las
las
tablas provenientes de las dos expresiones.
tablas provenientes de las dos expresiones.

Obtener
Obtener los
los nombres
nombres de
de las
las personas
personas que
que son
son tanto
tanto
ciclistas como directores de equipo :
ciclistas como directores de equipo :

(select
(select nombre
nombre from
from Ciclista)
Ciclista)
INTERSECT
INTERSECT
(select
(select director
director from
from Equipo);
Equipo);

Bases de Datos Curso 2006/07 DSIC-UPV 13

Combinaciones
Conjuntistas de Tablas
DIFERENCIA:
DIFERENCIA:
expresión_tabla
expresión_tabla except
except término_tabla
término_tabla

En Oracle es Minus
Realiza
Realiza la
la diferencia
diferencia de
de las
las filas
filas de
de las
las
tablas provenientes de las dos expresiones.
tablas provenientes de las dos expresiones.

Obtener
Obtener los
los nombres
nombres que
que aparecen
aparecen en
en la
la tabla
tabla de
de
ciclistas
ciclistas yy no
no en
en la
la de
de directores:
directores:
(select
(select nombre
nombre from
from Ciclista)
Ciclista)
MINUS
MINUS
(select
(select director
director from
from Equipo);
Equipo);
Bases de Datos Curso 2006/07 DSIC-UPV 14

7
Concatenaciones de Tablas
Corresponden
Corresponden aa variantes
variantes del operador concatenación
del operador concatenación
del Álgebra Relacional:
del Álgebra Relacional:

1º)
1º) Producto
Producto cartesiano
cartesiano (cross
(cross join)
join)
2º)
2º) Concatenación
Concatenación interna
interna (natural
(natural join)
join)
3º)
3º) Concatenación
Concatenación externa
externa (Left,
(Left, Right,
Right, Full)
Full)
4º)
4º) Concatenación
Concatenación unión
unión (union
(union join)
join)

Bases de Datos Curso 2006/07 DSIC-UPV 15

Concatenaciones de Tablas
Producto
Producto Cartesiano
Cartesiano (cross
(cross join):
join):

tabla1
tabla1 CROSS
CROSS JOIN
JOIN tabla2
tabla2

Equivale
Equivale a:
a:

SELECT
SELECT ** FROM
FROM tabla1,
tabla1, tabla2
tabla2

Bases de Datos Curso 2006/07 DSIC-UPV 16

8
Concatenaciones de Tablas
Concatenación
Concatenación Interna
Interna (1):
(1):
referencia_tabla
referencia_tabla [natural]
[natural] join
join [inner]referencia_tabla
[inner]referencia_tabla
[on
[on expresión_condicional|
expresión_condicional| using
using (comalista_columna)
(comalista_columna) ]]

tabla1
tabla1 JOIN
JOIN tabla2
tabla2 ON
ON expresión_condicional
expresión_condicional

Equivale
Equivale a:
a:

Select
Select ** FROM
FROM tabla1,
tabla1, tabla2
tabla2
WHERE expresión_condicional
WHERE expresión_condicional

Bases de Datos Curso 2006/07 DSIC-UPV 17

Concatenaciones de Tablas
Concatenación
Concatenación Interna
Interna (2):
(2):
tabla1
tabla1 JOIN
JOIN tabla2
tabla2 USING
USING (c1,
(c1, c2,
c2, ..,
.., cn)
cn)

Equivale
Equivale a:
a:
tabla1
tabla1 JOIN
JOIN tabla2
tabla2 ONON tabla1.c1
tabla1.c1 == tabla2.c1
tabla2.c1
AND tabla1.c2 = tabla2.c2
AND tabla1.c2 = tabla2.c2
AND
AND …… AND
AND tabla1.cn
tabla1.cn == tabla2.cn
tabla2.cn
Equivale
Equivale a:a:
Select
Select ** FROM
FROM tabla1,
tabla1, tabla2
tabla2
WHERE
WHERE tabla1.c1 == tabla2.c1
tabla1.c1 tabla2.c1
AND
AND tabla1.c2
tabla1.c2 == tabla2.c2
tabla2.c2
AND
AND …… AND
AND tabla1.cn
tabla1.cn == tabla2.cn
tabla2.cn
Bases de Datos Curso 2006/07 DSIC-UPV 18

9
Concatenaciones de Tablas
Concatenación
Concatenación Interna
Interna (3):
(3):
tabla1
tabla1 NATURAL
NATURAL JOIN
JOIN tabla2
tabla2

Equivale
Equivale a:
a:

tabla1
tabla1 join
join tabla2
tabla2
using
using (( c1,
c1, c2,
c2, ....,
...., cn)
cn)

Donde
Donde tabla1
tabla1 yy tabla2
tabla2 tienen
tienen nn atributos
atributos
Es
Es un
un JOIN
JOIN por
por todos
todos los
los atributos
atributos comunes
comunes
de
de las tablas).
las tablas).

Bases de Datos Curso 2006/07 DSIC-UPV 19

Concatenaciones de Tablas
Concatenación
Concatenación Interna
Interna (4):
(4):
Obtener
Obtener el
el dorsal
dorsal yy nombre
nombre de
de los
los ciclistas
ciclistas que
que han
han
llevado maillots:
llevado maillots:

SELECT
SELECT cl.dorsal,
cl.dorsal, cl.nombre
cl.nombre
FROM
FROM (Ciclista
(Ciclista NATURAL
NATURAL JOIN
JOIN Llevar)
Llevar) AS
AS cl;
cl;

Equivale
Equivale a:
a:

SELECT
SELECT c.dorsal,
c.dorsal, c.nombre
c.nombre
FROM
FROM Ciclista c, Llevar
Ciclista c, Llevar ll
WHERE c.dorsal = l.dorsal;
WHERE c.dorsal = l.dorsal;

Bases de Datos Curso 2006/07 DSIC-UPV 20

10
Concatenaciones de Tablas
Concatenación
Concatenación Externa
Externa (1):
(1):

referencia_tabla
referencia_tabla [natural]
[natural]
{left
{left [outer]
[outer] ||
right
right [outer]
[outer] ||
full [outer]
full [outer] }} JOIN
JOIN referencia_tabla
referencia_tabla
[on
[on expresión_condicional || using
expresión_condicional using
(comalista_columna)
(comalista_columna) ]]

FULL,
FULL, se
se muestran
muestran las
las tuplas
tuplas no
no concatenadas
concatenadas
de tabla1 y tabla2
de tabla1 y tabla2

Bases de Datos Curso 2006/07 DSIC-UPV 21

Concatenaciones de Tablas
Concatenación
Concatenación Externa
Externa (2):
(2):
tabla1
tabla1 LEFT
LEFT JOIN
JOIN tabla2
tabla2
ON
ON expresión_condicional
expresión_condicional

(Concat.
(Concat. interna
interna de
de tabla1
tabla1 yy tabla2)
tabla2)
union
union
(tuplas
(tuplas de
de la
la tabla1
tabla1 que
que no
no están
están en
en la
la
concatenación
concatenación interna con valores nulos
interna con valores nulos en
en
el
el resto
resto de
de columnas)
columnas)

RIGHT
RIGHT equivale
equivale aa LEFT
LEFT con
con la
la diferencia
diferencia de
de
que
que las
las tuplas
tuplas que
que se
se muestran
muestran son
son las
las de
de
tabla2.
tabla2.

Bases de Datos Curso 2006/07 DSIC-UPV 22

11
Concatenaciones de Tablas
Concatenación
Concatenación Externa
Externa (3):
(3):
EJERCICIO
EJERCICIO 33:
33: Obtener
Obtener nombre
nombre de
de todos
todos los
los equipos
equipos
indicando
indicando cuantos ciclistas tiene cada uno:
cuantos ciclistas tiene cada uno:

1ª Opción
Opción (Incorrecta)
(Incorrecta) El equipo PDM
SELECT
SELECT e.nomeq,
e.nomeq, count(c.dorsal)
count(c.dorsal) con 0 ciclistas
FROM
FROM Equipo E, Ciclista CC
Equipo E, Ciclista no aparece
WHERE E.nomeq=C.nomeq
WHERE E.nomeq=C.nomeq
GROUP
GROUP BYBY e.nomeq;
e.nomeq;

2ª Opción
Opción (Correcta)
(Correcta)
SELECT
SELECT e.nomeq,
e.nomeq, count(c.dorsal)
count(c.dorsal)
FROM
FROM ( Equipo EE LEFT
( Equipo LEFT JOIN
JOIN Ciclista
Ciclista CC ))
on E.nomeq=C.nomeq
on E.nomeq=C.nomeq
GROUP
GROUP BY
BY e.nomeq;
e.nomeq;
Bases de Datos Curso 2006/07 DSIC-UPV 23

Concatenaciones de Tablas
Concatenación
Concatenación Externa
Externa (4):
(4):
EJERCICIO
EJERCICIO 33:
33: Obtener
Obtener nombre
nombre de
de todos
todos los
los equipos
equipos
indicando
indicando cuantos ciclistas tiene cada uno:
cuantos ciclistas tiene cada uno:
En
En versiones
versiones anteriores
anteriores de
de ORACLE
ORACLE
No
No existe
existe el
el JOIN como tal.
JOIN como tal.
SELECT
SELECT e.nomeq,
e.nomeq, count(c.dorsal)
count(c.dorsal) Se pone (+) en
FROM
FROM Equipo E,
Equipo E, Ciclista
Ciclista CC la parte de la
WHERE
WHERE E.nomeq=C.nomeq(+)
E.nomeq=C.nomeq(+) ICA de la tabla
GROUP
GROUP BY
BY e.nomeq;
e.nomeq; de la que no se
quieren
mantener las
tuplas
Bases de Datos Curso 2006/07 DSIC-UPV 24

12
Concatenaciones de Tablas
Concatenación
Concatenación Unión:
Unión:
tabla1
tabla1 UNION
UNION JOIN
JOIN tabla2
tabla2

Crea
Crea una
una tabla
tabla donde
donde el
el esquema
esquema es
es la
la unión
unión
de
de los
los esquemas
esquemas de
de las
las dos
dos tablas,
tablas, que
que
pueden
pueden ser
ser distintos.
distintos.

tuplas
tuplas de
de tabla1
tabla1 con
con valores
valores nulos
nulos en
en las
las
columnas
columnas de tabla2
de tabla2
union
union
tuplas
tuplas de tabla2 con
de tabla2 con valores
valores nulos
nulos en
en las
las
columnas
columnas de
de tabla1
tabla1 ..

Bases de Datos Curso 2006/07 DSIC-UPV 25

Introducción de Información
Instrucción
Instrucción INSERT:
INSERT:
insert
insert into
into tabla
tabla [(comalista_columna)]
[(comalista_columna)]
{default
{default values || values
values values (comalista_átomos)
(comalista_átomos)
|| expresión_tabla}
expresión_tabla}
„ Si no se incluye la lista de columnas se deberán insertar filas
completas de tabla.
„ Si se incluye la opción default values se insertará una única fila en la
tabla con los valores por defecto apropiados en cada columna (según
la definición de tabla).
„ En la opción values (comalista_átomos) los átomos vienen dados por
expresiones escalares.
„ En la opción expresión_tabla, se insertarán las filas resultantes de la
ejecución de la expresión ( SELECT ).

Bases de Datos Curso 2006/07 DSIC-UPV 26

13
Introducción de Información
Instrucción
Instrucción INSERT:
INSERT:
Añadir
Añadir un
un ciclista
ciclista de
de dorsal
dorsal 101,
101, nombre
nombre ‘Joan
‘Joan Peris’,
Peris’,
edad 20 años y del equipo ‘Kelme’:
edad 20 años y del equipo ‘Kelme’:

insert
insert into
into Ciclista
Ciclista
values
values (101,
(101, ‘Joan
‘Joan Peris’,
Peris’, 20,
20, ‘Kelme’);
‘Kelme’);

Bases de Datos Curso 2006/07 DSIC-UPV 27

Modificación de Información
Instrucción
Instrucción UPDATE:
UPDATE:
update
update tabla
tabla
set comalista_asignaciones
set comalista_asignaciones
[where
[where expresión_condicional]
expresión_condicional]

„ En donde una asignación es de la forma:


columna = {default | null | expresión_escalar}

„ Si se incluye la cláusula where sólo se aplicará a las filas


que hagan cierta la condición.

Bases de Datos Curso 2006/07 DSIC-UPV 28

14
Modificación de Información
Instrucción
Instrucción UPDATE:
UPDATE:
Incrementar
Incrementar unun 10%
10% la
la pendiente
pendiente del
del puerto
puerto ‘Aitana’
‘Aitana’
al
al haberse cerrado la carretera que había en
haberse cerrado la carretera que había en buen
buen
estado
estado yy ser
ser necesario
necesario subir
subir por
por otra
otra peor:
peor:

UPDATE
UPDATE Puerto
Puerto
SET
SET pendiente
pendiente == pendiente
pendiente ** 1.10
1.10
WHERE
WHERE nompuerto
nompuerto == ‘Aitana’
‘Aitana’ ;;

Bases de Datos Curso 2006/07 DSIC-UPV 29

Eliminación de Información
Instrucción
Instrucción DELETE:
DELETE:
delete
delete from
from tabla
tabla
[where
[where expresión_condicional]
expresión_condicional]

„ Si se incluye la cláusula where se eliminarán


aquéllas que hagan cierta la condición.
Eliminar
Eliminar la
la información
información del
del ciclista
ciclista ‘Miguel
‘Miguel
Indurain’ ya que se ha jubilado:
Indurain’ ya que se ha jubilado:

DELETE
DELETE FROM
FROM Ciclista
Ciclista
WHERE
WHERE nombre == ‘Miguel
nombre ‘Miguel Indurain’;
Indurain’;

Bases de Datos Curso 2006/07 DSIC-UPV 30

15
Trabajo a realizar

Consultas Generales (Ciclismo,


Música y Biblioteca)

Bases de Datos Curso 2006/07 DSIC-UPV 31

16

También podría gustarte