Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
SQL (DML)
Carlos A. Olarte ([email protected])Gestion y Modelacion de Datos
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Outline
1 Actualizacion, Insercion y Modificacion
2 Consultas (Queries)
3 Renombramiento
4 Ordenamiento
5 Reuniones
6 Operaciones sobre conjuntos
7 Funciones de Agregacion
8 Subconsultas Anidadas
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Insert
insert into PERSONAS values (1,’carlos’,’olarte’);
insert into PERSONAS (cc,nom,apellido)
values (1,’carlos’,’olarte’);
insert into PERSONAS (cc,nom,apellido)
values (’1’,’carlos’,’olarte’), (’2’,’juan’,’perez’);
insert into PERSONAS (cc,nom,apellido)
select id,nom1 || ’ ’ || nom2 || ’ ’ , lname
from PEOPLE;
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Update
update PERSONAS set nombre=’carlos alberto’
where cc= ’1’;
update PRODUCTOS set precio=precio*1.03;
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Delete
delete from PERSONAS where cc = ’1’;
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Estructura basica
SELECT <ATRIBUTOS>
FROM <RELACIONES>
WHERE <CONDICIONES>
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Select (π)
Corresponde a la operacion de Proyeccion.
Por defecto no elimina los duplicados. Si se quiere eliminar losduplicados se debe utilizar la palabra reservada distinct
Para especificar todos los atributos se puede utiliza el sımboloasterisco (*)
Es posible utilizar funciones SQL incorporadas.
Ejemplos:
select codigo
from productos
select *
from productosselect distinct nombre
from clientes
select id,nombre,precio,precio*0.16 iva, precio * 1.16 totalfrom productos;
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Where(σ)
Corresponde a la operacion de seleccion.
Conectivos logicos
AND (∧)
OR (∨)
NOT (¬)
Operaciones sobre cadenas
LIKE (Busqueda depatrones)
(Cualquier caracter)
% (Cualquie subcadena)
\ (Caracter de escape)
Operadores de Comparacion
<
>
<=
>=
<> ( 6=)
BETWEEN xxx AND yyy(rangos)
Valores Nulos
IS NULL
IS NOT NULL
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Ejemplos
select * from x where codigo>3
select * from x where codigo>3 and apellido=’perez’
select * from x where nombre like ’P%’
select * from x where nombre like ’__A__’
select * from x where length(telefono) <= 7
select * from x where precio between 10 and 20
select * from x where fecha between
date ’2011-02-03’ and date ’2012-02-01’
select * from x where to_char(fecha,’yyyy’) = ’2012’
select * from x where apellido is null
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Renombramiento (ρ)
Se efectua por medio de alias tanto en la clausula select comoen la clausula from
select c.nombre from ciudades c
select c.id identificador from ciudades c
select id as identificador from ciudades
select id as identificador from ciudades as c
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Ordenamiento
Mediante la clausula order by es posible definir el orden en elque se presentan las tuplas. Por defecto se ordenanascendentemente (asc) y se puede especificar en orden inverso(desc)
select cod,nom,apell from est order by cod
select cod,nom,apell from est order by cod asc
select cod,nom,apell from est order by cod desc
select cod,nom,apell from est order by apell,nom
select cod,nom,apell from est order by apell desc, nom
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Restringiendo el Numero de Filas
select nombre, apellidofrom personasorder by fnacimientoLIMIT 20;
select cod,nombre, preciofrom productosorder by precioLIMIT 10 OFFSET 30;
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Reuniones
Dado que r ./θ s = σθ(r × s),ρp(Personas) ./P.ciu id=C .id ρc(Ciudades) se puede expresar como:
select * from personas p, ciudades c where p.ciu id = c.id;
Tambien puede utilizarse la sentencia JOIN:
select * from personas p INNER JOIN join ciudades c on ( p.ciu id= c.id);
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Reuniones Externas
La reunion externa ρp(Personas) =./P.ciu id=C .id ρc(Ciudades) sepuede expresar utilizando un outer join1:
select * from personas p, ciudades c where p.ciu id = c.id(+);
O utilizando la sentencia LEFT JOIN:
select p.*,c.* from personas p LEFT JOIN ciudades c on(p.ciu id= c.id);
Si por el contrario se quiere calcular P ./=θ C se utilizarıa:
select * from personas p, ciudades c where p.ciu id(+) = c.id;
select p.*,c.* from personas p RIGHT JOIN ciudades c on(p.ciu id= c.id);
1Solo disponible en oracleCarlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Reuniones
Producto Cartesiano
select * from a cross join b;select * from a, b;
Full join (=./ ∪ ./=)
select * from a full join join b;
clausula using
select * from tabla1 inner join tabla2 using (atr1);’atr1’ debe ser un atributo en comun entre tabla1 y tabla2.
Natural Joins
select * from tabla1 natural inner join tabla2;realiza el join entre tabla1 y tabla2 con los atributos que seancomunes.
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Operaciones sobre conjuntos (∪,∩,−)
Por defecto eliminan los duplicados. Para conservarlos seutiliza la palabra reservada all 2
select apellido,nombre from estudiantes
union select apellido,nombre from profesores
select apellido,nombre from estudiantes
union all select apellido,nombre from profesores
select apellido,nombre from estudiantes
intersect select apellido,nombre from profesores
select apellido,nombre from estudiantes
except select apellido,nombre from profesores
2En Oralce: except → minusCarlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Funciones de Agregacion
Estructura General
SELECT AAGRUPAMIENTO,FAGRUPAMIENTO
FROM ...
WHERE ...
GROUP BY AAGRUPAMIENTO
HAVING <CONDICIONES SOBRE GRUPOS>
Funciones de Agrupamiento
COUNT (Conteo)
AVG (Promedio)
SUM (Sumatoria)
MAX (Maximo)
MIN (Mınimo)
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Ejemplos
select count(*) from x
select count(*),apellido from personas
group by apellido
select count(*),apellido from personas
group by apellido having count(*)>3
select sum(saldo),count(*), avg(saldo),id_sucursal
from cuentas group by id_sucursal
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Subconsultas Anidadas
Pertenencia a conjuntos (IN y NOT IN)
select * from materias
where codigo in (select mat_codigo
from matriculas
where est_codigo=1234)
select * from matriculas
where periodo not in (’2004-2’,’2005-1’)
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Continuacion
Comparacion de Conjuntos (SOME, ALL)
WHERE A1 =SOME (<Subquery>) Chequea si existe unatupla de la subconsulta que sea igual a A1
WHERE A1 =ALL (<Subquery>) Chequea si todas las tuplasde la subconsulta son iguales a A1
select * from materias where
codigo =some (select mat_codigo from materias
where est_codigo=14565)
select * from notas where
nota >=all (select nota from notas)
a
aComo expresar la primera consulta por medio de ./ o una clausula IN?
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Comprobacion de relaciones vacıas (EXISTS, NOTEXISTS)
EXISTS retorna verdadero si la subconsulta no es vacıa
NOT EXISTS para chequear la inexistencia de tuplas en elresultado de una subconsulta
select * from cursos cur where exists
(select cur_cod from matriculas
where cur_cod = cur.codigo)
Por medio de not exists (B minus A) puede calcularse A ⊇ B. Porejemplo, dado r(r1, s1) y s(s1) que calcula la siguiente expresion?
select distinct rout.r1 from r rout where not exists(
select s.s1 from s minus select r.s1 from r
where r.r1 = rout.r1)
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Ejercicios
Dado el modelo:
departamentos(id,nombre)empleados(id,nombre, telefono,direccion,emp jefe id, dep id)
productos(cod,nombre,descripcion,unitario)
facturas(num,fecha,emp id)
detalle(fac num, pro cod, cantidad, valor)
Escribir la consulta SQL que retorne:1 El total (en dinero) de la factura X.2 El valor total facturado por el empleado X en Junio 2009.3 El numero de unidades vendidas del producto X entre las
fechas Y y Z.4 El producto mas vendido en el 2009.5 El numero de facturas por empleado entre las fechas X y Y.6 El nombre de los empleados que son jefes en el depto X.7 El valor facturado por el departamento X en los ultimos 10
anos.8 Los empleados que vendieron mas de 50 productos en el 2012.
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)
Ejercicios
1 El nombre de todos los empleados con su respectivo jefe.
2 El detalle de los productos vendidos en la factura X.
3 Los productos que no se vendieron en el mes de febrero 2012.
4 El total facturado en el 2012 por cada departamento.
5 Los departmentos que tienen mas de 10 empleados.
6 El empleado que ha vendido todos los productos.
7 Los empleados que vendieron menos de X cantidad de dineroen el 2012
Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)