Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EJERCICIO 1.3: ¿ Que importe total ha supuesto cada pedido del año
1995, ordedados de mas caro a mas barato ?
(numero pedido, importe)
SELECT pedido_no,
unid_pedidas*precio_venta
FROM pedido p,
producto a
WHERE p.producto_no=a.producto_no
extract(year from fecha_pedido)=1995
ORDER BY 2 DESC;
1 330000
3 268000
4 201000
7 73500
JOIN CON MAS DE DOS TABLAS, PERO RELACIONADAS POR FK COMPUESTAS
DE UN SOLO CAMPO:
EJERCICIO 2.4: ¿ Cual es la fecha de pedido mas reciente para cada cliente ?
(nombre cliente, fecha)
SELECT nombre,
MAX(fecha_pedido)
FROM cliente,
pedido
WHERE cliente_no=comprador
GROUP BY nombre;
TALLERES ESTESO S.A. 02/01/95
DISTRIBUCIONES PEPE 11/06/97
LOGITRONICA S.L 09/12/98
INDUSTRIAS LACTEAS 25/05/95
EJEMPLO 2c: ¿ Cuantas unidades han sido vendidas por cada empleado que haya
realizado ventas ?
(apellido vendedor, cantidad de unidades)
SELECT apellido,
SUM(unid_pedidas)
FROM emple,
pedido
WHERE emp_no=vendedor
GROUP BY apellido;
NEGRO 4
ARROYO 7
JIMENO 10
TOVAR 7
Es un JOIN en que las lineas que no tienen concordancia entre las tablas
involucradas tambien se muestran, completadas con valores NULL.
EJEMPLO 3a: Listado por orden alfabetico de todos los empleados y sus pedidos.
(nombre vendedor, numero de pedidos)
SELECT apellido,
count(pedido_no)
FROM emple
pedido
WHERE emp_no=vendedor(+)
GROUP BY apellido
ORDER BY apellido;
ALONSO 0
ARROYO 1
CEREZO 0
FERNANDEZ 0
GIL 0
JIMENEZ 0
JIMENO 3
MARTIN 0
MUNOZ 0
NEGRO 1
REY 0
SALA 0
SANCHEZ 0
TOVAR 2
EJERCICIO 4.1: Cuentas que han ingresado 500 euros o mas, indicando
cuantos ingresos han tenido.
(nombre cuenta, numero de ingresos)
SELECT nombre_cta,
count(*)
FROM cuenta c,
movimiento m
WHERE c.cod_banco=m.cod_banco AND
c.cod_sucur=m.cod_sucur AND
c.num_cta=m.num_cta AND
LOWER(m.tipo)=’i’
GROUP BY m.cod_banco, m.cod_sucur, m.num_cta, nombre_cta
HAVING sum(importe)>=500;
MANUEL 1
ISABEL 2
5.-SUBCONSULTAS:
En una instrucción SQL se puede incluir otra instrucción SQL. A esta segunda
se le llama subconsulta. La subconsulta se debe encerrar entre paréntesis.
5.1.-Subconsultas escalares:
Devuelven el mismo dato para todas las filas del select principal.
EJEMPLO 5a: Listado de empleados que cobre comisiones mas altas que el precio
del producto número 2.
SELECT apellido
FROM emple
WHERE comision > (SELECT precio_venta
FROM producto
WHERE producto_no=2);
MARTIN
EJEMPLO 5b: Listado de empleados que cobran mas que la media de la empresa.
(apellido empleado)
SELECT apellido
FROM emple
WHERE salario > ( SELECT AVG(salario)
FROM emple );
JIMENEZ
NEGRO
CEREZO
GIL
REY
FERNANDEZ
EJERCICIO 5.1.1: Listado de empleados que trabajan en Sevilla. Realizarlo
mediante SUBCONSULTAS y mediante JOIN.
(nombre empleado)
SELECT apellido
FROM emple
WHERE dept_no = ( SELECT dept_no
FROM depart
WHERE upper(loc)='SEVILLA' );
CEREZO
REY
MUNOZ
SELECT apellido
FROM emple e,
depart d
WHERE e.dept_no=d.dept_no AND
upper(loc)='SEVILLA'
CEREZO
REY
MUNOZ
EJERCICIO 5.1.3: Listado de empleados que han vendido pedidos con mas
unidades que la media.
(apellido cliente)
SELECT apellido
FROM emple, pedido
WHERE emp_no=vendedor AND
unid_pedidas > ( SELECT AVG(unid_pedidas)
FROM pedido );
JIMENO
TOVAR
ARROYO
EJERCICIO 5.1.2: ¿ Que cliente hizo el ultimo pedido en llegar ?
(nombre)
SELECT nombre
FROM cliente
WHERE cliente_no = ( SELECT comprador
FROM pedido
WHERE fecha_pedido = ( SELECT
MAX(fecha_pedido)
FROM pedido )
);
LOGITRONICA S.L
5.2.-Subconsultas sincronizadas:
EJEMPLO 5d: Listado de empleados que cobran mas que el salario medio de su
departamento.
(nombre empleado)
SELECT e1.apellido
FROM emple e1
WHERE e1.salario > ( SELECT AVG(e2.salario)
FROM emple e2
WHERE e1.dept_no=e2.dept_no );
5.3.-Operadores IN y EXISTS:
EJEMPLO 5e: IN
Listado de empleados que han hecho ventas.
(nombre empleado)
SELECT apellido
FROM emple
WHERE emp_no IN ( SELECT vendedor
FROM pedido );
ARROYO
NEGRO
TOVAR
JIMENO
SELECT * FROM
(
INSTRUCCION SELECT COMPLETA
)
SELECT sysdate
FROM dual;
SELECT *
FROM tabs;