dml en sql consultas sencillas usando el dml de sql

30
DML en SQL Consultas sencillas usando el DML de SQL

Upload: carmela-albarado

Post on 27-Jan-2016

280 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: DML en SQL Consultas sencillas usando el DML de SQL

DML en SQL

Consultas sencillas usando el DML de SQL

Page 2: DML en SQL Consultas sencillas usando el DML de SQL

2

DDL/DML/DCL DDL es Data Definition Language:

CREATE - to create objects in the database ALTER - alters the structure of the database DROP - delete objects from the database GRANT - gives user's access privileges to database REVOKE - withdraw access privileges given with the GRANT command

DML is Data Manipulation Language statements. Some examples: SELECT - retrieve data from the a database INSERT - insert data into a table UPDATE - updates existing data within a table DELETE - deletes all records from a table, the space for the records remain EXPLAIN PLAN - explain access path to data LOCK TABLE - control concurrency

DCL is Data Control Language statements. Some examples: COMMIT - save work done SAVEPOINT - identify a point in a transaction to which you can later roll back ROLLBACK - restore database to original since the last COMMIT SET TRANSACTION - Change transaction options like what rollback segment to

use

Page 3: DML en SQL Consultas sencillas usando el DML de SQL

3

Base Datos de Películas

Para rellenar la base se ha utilizado información proveniente de “The internet Movie- Database” http://www.imdb.com/list

Todos los datos son anteriores a 1997

Todas las películas tienen al menos 200 votos

Los actores deben aparecer en más de una película

Page 4: DML en SQL Consultas sencillas usando el DML de SQL

4

Diagrama Relacional de una base de datos de Peliculas copy and

E-R diag (is arelation)

Page 5: DML en SQL Consultas sencillas usando el DML de SQL

5

TABLASCREATE TABLE PELICULA(

ID INTEGER, -- Identificador únicoTITULO CHAR(70), -- Titulo de la películaAGNO DECIMAL(4), -- Año de estrenoPUNTUACION FLOAT, -- Puntuación mediaVOTOS INTEGER, -- Numero de votosPRIMARY KEY (ID));

--CREATE TABLE ACTOR (

ID INTEGER, -- Identificador ÚnicoNOMBRE CHAR(35), -- Nombre del actor/actrizPRIMARY KEY (ID));

--CREATE TABLE REPARTO(

PELICULA_ID INTEGER, -- referencia a la tabla PELICULAACTOR_ID INTEGER, -- referencia a la tabla ACTOR_IDORD INTEGER, -- Orden en el reparto

-- La estrella es 1, ...--

FOREIGN KEY (PELICULA_ID ) REFERENCES PELICULA(ID),FOREIGN KEY (ACTOR_ID) REFERENCES ACTOR(ID),PRIMARY KEY (PELICULA_ID, ACTOR_ID));

Page 6: DML en SQL Consultas sencillas usando el DML de SQL

6

Consultas sencillas en SQLSELECTFROMWHEREORDER BY Lista los atributos (SELECT)

pertenecientes a una (o más relaciones) (FROM) que satisfagan una condición (WHERE), ordenar la salida (ORDEN BY).

La principal diferencia entre los resultado proporcionados por SQL y álgebra relacional es que SQL admite el duplicado de tuplas

Page 7: DML en SQL Consultas sencillas usando el DML de SQL

7

SQL vs. Rel. Álgebra

SELECT A1, A2, ..., An

FROM R1, R2, ..., Rm

WHERE condición

es equivalente a la consulta en álgebra relacional :

A1, A2, ..., An (condición (R1 X R2 X ... X Rm))

Devuelve una relación (sin nombre) cuyo esquema es (A1, A2, ..., An)

SQL no distingue entre mayúsculas y minúsculas Excepto cuando se usan comillas.

Page 8: DML en SQL Consultas sencillas usando el DML de SQL

8

Selección y Proyección

Selección: Encontrar las mejores películas (puntuación

mayor que 9.0)SELECT *FROM peliculaWHERE puntuacion > 9.0 ;

Proyección: Encontrar las mejores películas (puntuación

mayor que 9.0) e imprimir el título y el año del estrenoSELECT titulo, agnoFROM peliculaWHERE puntuacion > 9.0 ;

Page 9: DML en SQL Consultas sencillas usando el DML de SQL

9

Duplicados

Para eliminarlos se usa DISTINCT Es una operación cara

SELECT DISTINCT agnoFROM peliculaWHERE puntuacion > 9.0;

Page 10: DML en SQL Consultas sencillas usando el DML de SQL

10

Comparación de caracteres

Se pueden utilizar las expresiones algebraicas “usuales” ‘< ’, ‘>’, ‘= ’, …

o la instrucción “like” que permite el uso de “comodines”

Dos “wildcards”: ‘_’ (.) and ‘%’ (*) Encontrar todas las películas (y su puntuación)

que empiezan por ‘Star’SELECT titulo, puntuacion FROM pelicula WHERE titulo LIKE 'Star%';

Encontrar todas las películas con ‘s en su tituloSELECT titulo FROM pelicula WHERE titulo LIKE '%''s%';

Page 11: DML en SQL Consultas sencillas usando el DML de SQL

11

[NOT] SIMILAR TO

Tiene todas las funcionalidades de LIKE y además es capaz de usar expresiones regulares (bueno, un subconjunto) | una de dos alternativas * repetición de lo anterior cero o más

veces. + repeticion de lo anterior una o más

veces. () se usa para agrupar creando una único

objeto. [...] especifica una clase.

Page 12: DML en SQL Consultas sencillas usando el DML de SQL

12

Ejemplo: SIMILAR

Encontrar todas las películas (y su puntuación) que empiezan por ‘Star’ y no sean de la saga “Star Treck”

SELECT titulo, puntuacion FROM pelicula WHERE titulo NOT SIMILAR TO '%(S|s)tar [A-z]rek%' AND titulo SIMILAR TO '%Star%';

Page 13: DML en SQL Consultas sencillas usando el DML de SQL

13

Ordenar la salida

Tras una consulta, la relación resultante está ordenada al azar. (las tuplas no estan ordenadas)

ORDER BY especifica en que orden se presentan las duplas :

Encontrar las mejores películas (puntuación mayor que 9.0) e imprimir el título y su puntuación. El resultado debe estar ordenado por puntuación.SELECT titulo, puntuacionFROM peliculaWHERE puntuacion > 9.0 ORDER BY puntuacion;

Page 14: DML en SQL Consultas sencillas usando el DML de SQL

14

Ordenar la salida

Vaya, por defecto ordena de forma ascendente SELECT titulo, puntuacionFROM peliculaWHERE puntuacion > 9.0 ORDER BY puntuacion DESC;

¿Cuál es la peor película?

(listado ordenado de peor a mejor, algebra, LIMIT )

Page 15: DML en SQL Consultas sencillas usando el DML de SQL

15

Ordenar la Salida

SELECT select_list FROM table_expression WHERE ORDER BY column1 [ASC | DESC] [, column2 [ASC | DESC] ...];

Page 16: DML en SQL Consultas sencillas usando el DML de SQL

16

Renombrar Atributos

Se usa la palabra AS en el comando SELECT

SELECT titulo AS Title, agno AS Year,puntuacion AS score

FROM pelicula WHERE score > 9.0; -- El comando de arriba puede que funcione o

que no funcioneSELECT titulo AS Title, agno*365.25 AS DayFROM pelicula

WHERE puntuacion > 9.0;

Page 17: DML en SQL Consultas sencillas usando el DML de SQL

17

Producto(s) Cartesiano(s)

Gran parte de la potencia de las bases relacionales se basa en la posibilidad de combinar dos (o más) relaciones.

El producto cartesiano de dos relaciones se consigue enumerando cada relación en la orden FROM

Obtener el reparto de 'Pulp Fiction' (el identificador de esta película es el 2) hacerlo con titulo

SELECT nombre FROM actor, reparto WHERE pelicula_id=2 AND actor_id=id;

Page 18: DML en SQL Consultas sencillas usando el DML de SQL

18

Natural Join

Obtener el reparto de 'Pulp Fiction' (el identificador de esta película es el 2)

SELECT nombre FROM actor NATURAL INNER JOIN reparto WHERE pelicula_id=2 AND actor_id=id;

\d ALTER TABLE reparto RENAME COLUMN actor_id TO id;

ALTER TABLE reparto RENAME COLUMN id TO actor_id;

Page 19: DML en SQL Consultas sencillas usando el DML de SQL

19

Producto(s) Cartesiano(s) Obtener el reparto de ‘Blade Runner'con natural join

SELECT nombre FROM actor, reparto, pelicula WHERE titulo = 'Blade Runner' AND pelicula.id = pelicula_id AND actor_id = actor.id;

Page 20: DML en SQL Consultas sencillas usando el DML de SQL

20

Producto Cartesiano Películas de John Travolta ordenadas por

popularidad. hacerla por pasos

SELECT titulo, puntuacionFROM reparto,pelicula,actorWHERE actor.nombre='John Travolta' AND actor_id=actor.id AND pelicula_id=pelicula.id ORDER BY puntuacion desc;

Page 21: DML en SQL Consultas sencillas usando el DML de SQL

21

Ambigüedad en los atributos

Método 1: Utilizar el nombre de la relación

Películas de John TravoltaSELECT titulo, puntuacionFROM reparto,pelicula,actorWHERE actor.nombre='John Travolta' AND actor_id=actor.id AND pelicula_id=pelicula.id ORDER BY puntuacion desc;

Page 22: DML en SQL Consultas sencillas usando el DML de SQL

22

Ambigüedad en los atributos

Método 2: variable tupla Haz un chequeo de consistencia, Si hay dos

actores con el mismo nombre y distinto ID puede ser un errorSELECT Star1.nombre, Star1.id, Star2.nombre, Star2.id

FROM actor Star1, actor Star2WHERE Star1.nombre = Star2.nombreAND Star1.id < Star2.id;

Page 23: DML en SQL Consultas sencillas usando el DML de SQL

23

Ambigüedad en los atributos pi

En que se diferencia esta consulta de la anterior

SELECT Star1.nombre, Star1.id, Star2.nombre, Star2.id

FROM actor Star1, actor Star2WHERE Star1.nombre = Star2.nombreAND Star1.id <> Star2.id;

Page 24: DML en SQL Consultas sencillas usando el DML de SQL

25

Combinando Consultas Union: unión Intersect: interseccion Except: resta Estos operadores eliminan los dupicados

Si se usa ALL los duplicados no se eliminan: e.g., UNION ALL

Las subconsultas deben ser compatibles Actores comunes a las películas Star Trek IV y Star Trek

V

(SELECT nombre FROM pelicula,actor,reparto WHERE titulo LIKE 'Star Trek V:%' AND pelicula_id=pelicula.id AND actor_id=actor.id) INTERSECT (SELECT nombre FROM pelicula,actor,reparto WHERE titulo LIKE 'Star Trek IV:%' AND pelicula_id=pelicula.id AND actor_id=actor.id );

Page 25: DML en SQL Consultas sencillas usando el DML de SQL

26

Ejemploscopiar tablas

Lista de películas con al menos 5000 votos.

SELECT titulo FROM pelicula WHERE votos > 5000;

Año de estreno de ‘Citizen Kane’.

SELECT agno FROM pelicula WHERE titulo = 'Citizen Kane';

Page 26: DML en SQL Consultas sencillas usando el DML de SQL

27

Ejemplos Titulo y puntuación de las películas de la

‘Police Academy…’.

SELECT titulo, puntuacion FROM pelicula WHERE titulo LIKE 'Police Academy%';

Nombre y puntuación de las películas que contienen la palabra 'Dog' . (similar to)SELECT titulo, puntuacion

FROM peliculaWHERE (titulo LIKE '%dog%') OR (titulo LIKE '%Dog%');

Page 27: DML en SQL Consultas sencillas usando el DML de SQL

28

Ejemplos!!!!!!!

Películas en las que aparece 'Harrison Ford' y no es protagonista.

SELECT titulo FROM actor, pelicula, reparto WHERE nombre = 'Harrison Ford' AND

actor.id=actor_id AND pelicula_id=pelicula.id AND ord <> 1;

Reparto de 'Alien' .SELECT nombre FROM actor, reparto, pelicula WHERE titulo = 'Alien' AND pelicula.id = pelicula_id AND actor_id = actor.id;

Page 28: DML en SQL Consultas sencillas usando el DML de SQL

30

Ejemplos

Películas filmadas en 1962 y sus protagonistas

SELECT titulo, nombre FROM pelicula, reparto, actorWHERE agno=1962 AND pelicula.id=pelicula_id AND

ord=1 AND actor_id=actor.id;

Page 29: DML en SQL Consultas sencillas usando el DML de SQL

31

Ejemplo del Capítulo Siguiente

Año en que ‘John Travolta’ extrenó más peliculas Primero encontremos los años y títulos de sus películasSELECT titulo, agno FROM pelicula, reparto, actorWHERE pelicula.id=pelicula_id AND

actor.id=actor_id AND nombre= 'John Travolta';

Luego agrupémoslas.SELECT COUNT(titulo), agno FROM pelicula, reparto, actorWHERE pelicula.id=pelicula_id AND

actor.id=actor_id AND nombre= 'John Travolta'GROUP BY agno ORDER BY 1;

Page 30: DML en SQL Consultas sencillas usando el DML de SQL

32

Ejemplo del Capítulo Siguiente

Nombres y estrellas de todas las películas en las que actuó 'Julie Andrews'

Primero encontremos los id de sus películasSELECT pelicula_id

FROM reparto, actor WHERE actor_id=actor.id AND nombre='Julie Andrews'; y luego los nombres de las películas y las estrellasSELECT titulo, nombre

FROM pelicula, reparto, actor WHERE pelicula_id=pelicula.id AND actor_id=actor.id AND ord=1

AND pelicula.id IN (SELECT pelicula_id FROM reparto, actor WHERE actor_id=actor.id AND nombre='Julie Andrews');