sql (dml) - javeriana calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf ·...

23
SQL (DML) Carlos A. Olarte ([email protected]) Gesti´ on y Modelaci´ on de Datos Carlos A. Olarte ([email protected]) Gesti´ on y Modelaci´ SQL (DML)

Upload: others

Post on 22-Mar-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

SQL (DML)

Carlos A. Olarte ([email protected])Gestion y Modelacion de Datos

Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)

Page 2: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 3: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 4: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 5: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

Delete

delete from PERSONAS where cc = ’1’;

Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)

Page 6: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

Estructura basica

SELECT <ATRIBUTOS>

FROM <RELACIONES>

WHERE <CONDICIONES>

Carlos A. Olarte ([email protected]) Gestion y Modelacion de DatosSQL (DML)

Page 7: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 8: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 9: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 10: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 11: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 12: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 13: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 14: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 15: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 16: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 17: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 18: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 19: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 20: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 21: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 22: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)

Page 23: SQL (DML) - Javeriana Calicic.javerianacali.edu.co/wiki/lib/exe/fetch.php?media=materias:sql.pdf · SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gesti on y Modelaci on de

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)