laboratorio de base de datos práctica nro. 5, consultas sql...lenguaje de dominio especifico,...

18
Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL Prof. Solazver Solé Preps. Alvaro Araujo, Nerio Morán Semestre A-2017 1. SQL SQL por sus siglas en ingles (Structured Querry Languaje) 1 es un lenguaje de dominio especifico, usado en la programación y diseñado para ad- ministrar los datos mantenidos en los sistemas de gestion de bases de datos relacionales (RDBMS). Originalmente fue basado en el álgebra relacional y en calculo relacional de tuplas, SQL se compone de un lenguaje de manipulación de datos (LMD), un lenguaje de definición de datos (LDD) y un lenguaje de control de datos (LCD). LMD LDD LCD SQL 1 Lenguaje estructurado de consultas 1

Upload: others

Post on 31-Jul-2021

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

Laboratorio de Base de DatosPráctica Nro. 5, Consultas SQL

Prof. Solazver SoléPreps. Alvaro Araujo, Nerio Morán

Semestre A-2017

1. SQL

SQL por sus siglas en ingles (Structured Querry Languaje) 1 es unlenguaje de dominio especifico, usado en la programación y diseñado para ad-ministrar los datos mantenidos en los sistemas de gestion de bases de datosrelacionales (RDBMS).

Originalmente fue basado en el álgebra relacional y en calculo relacionalde tuplas, SQL se compone de un lenguaje de manipulación de datos (LMD),un lenguaje de definición de datos (LDD) y un lenguaje de control de datos(LCD).

LMD

LDD LCD

SQL

1Lenguaje estructurado de consultas

1

Page 2: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

1.1. Lenguaje de manipulación de datos: LDMNormalmente, cuando un SGBD relacional implementa el lenguaje SQL, to-

das las acciones que se pueden llevar a cabo sobre el sistema se realizan mediantesentencias de este lenguaje. Dentro de SQL hay varios tipos de sen- tencias quese agrupan en tres conjuntos:

Sentencias de definición de datos: son las sentencias que permitencrear tablas, alterar su definición y eliminarlas. En una base de datos rela-cional existen otros tipos de objetos además de las tablas, como las vistas,los índices y los disparadores, que se estudiarán más adelante. Las senten-cias para crear, alterar y eliminar vistas e índices también pertenecen aeste conjunto.

Sentencias de manejo de datos: son las sentencias que permiten inser-tar datos en las tablas, consultarlos, modificarlos y borrarlos.

Sentencias de control: son las sentencias que utilizan los administra-dores de la base de datos para realizar sus tareas, como por ejemplo crearusuarios y concederles o revocarles privilegios.

2. Operaciones de recuperación/actualización conSQL

El lenguaje SQL esta compuesto por sentencias, clausulas, operadores y fun-ciones de agregación.(Aunque también tiene predicados o palabras cla-ve). Estos elementos se combinan para en las instrucciones para crear, actualizary manipular las bases de datos.

2.1. Sentencias para realizar consultas y actualizaciones:SQL tiene una sentencia básica para recuperar información de una base de

datos: La sentencia SELECT.

SELECT : Utilizado para consultar registros de la base de datos que sa-tisfagan un criterio determinado.

INSERT : Utilizado para cargar lotes de datos en la base de datos en unaúnica operación.

UPDATE: Utilizado para modificar los valores de los campos y registrosespecificados.

DELETE: Utilizado para eliminar registros de una tabla de una base dedatos.

2

Page 3: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

2.2. Clausulas:Son condiciones utilizadas para concretar que datos son los que se desea

seleccionar o manipular.

FROM :Especifica la(s) tabla(s) de la cual se van a seleccionar los registros.

WHERE :Condiciones que deben reunir los registros a seleccionar.

GROUP BY :Utilizada para calificar registros seleccionados en gruposespecíficos

HAVING :Condición a satisfacer por cada grupo.

ORDER BY :Utilizada para ordenar registros específicos en un orden.

2.3. Operadores LógicosAND, OR, NOT.

2.4. Operadores de comparación<, >, (<>,!=), <= , >=, =

IS NULL: Devuelve true si es nulo.

IS NOT NULL: Devuelve false si es nulo.

x IN (v1,v2,v3...vn) Devuelve true si x=v1 o x = v2 ...

BETWEEN: Utilizado para especificar un intervalo de valores.

LIKE: Para comparación de una cadena de texto con una expresión regu-lar.

2.5. Funciones de AgregaciónSe usan dentro de una sentencia SELECT, en grupos de registros para

devolver un único valor que se aplica a un grupo de registros.

AVG: Utilizada para calcular el promedio de los valores de un campodeterminado

COUNT: Utilizada para devolver el número de registros de la selección

SUM: Utilizada para devolver la suma de todos los valores de un campodeterminado

MAX: Utilizada para devolver el valor más alto de un campo especificado

MIN :Utilizada para devolver el valor más alto de un campo especificado

3

Page 4: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

3. Consultas básicasLas consultas de selección se utilizan para indicar al servidor de base de

datos que devuelva información de las bases de datos.

1 -- bloque select -from -where -group by -having -order by2

3 SELECT [ DISTINCT ] { * | columna [ , columna ] }4 FROM nombre_tabla5 [ WHERE condicion_de_busqueda ]6 [ GROUP BY columna [, columna ]7 [ HAVING condicion_para_el_grupo ] ]8 [ ORDER BY columna [ ASC | DESC ]9 [, columna [ ASC | DESC ] ];

3.1. Consultas de selección:

1 SELECT trackid ,name , unitprice2 FROM track3 WHERE track. unitprice > 0.99

Podemos guardar la consulta como un resultado intermedio de la siguientemanera:

1 SELECT trackid ,name , unitprice2 INTO tracks_expensives3 FROM track4 WHERE track. unitprice > 0.99;

Luego podemos consultar el resultado intermedio como otra tabla de la basede datos.

1 SELECT *2 FROM tracks_expensives ;

Podemos modificar el orden en que se muestran los registros utilizando laclausula ORDER BY <lista de campos>. En donde lista de campos represen-tan los campos a ordenar.

1 SELECT *2 FROM invoice3 ORDER BY invoicedate ;

Podemos especificar el criterio de ordenamiento mediante las opciones ASCy DESC.

1

2 SELECT *3 FROM invoice4 ORDER BY invoicedate ASC ,total DESC ;

4

Page 5: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

3.2. Consultas con predicados:Una manera de limitar el número de filas que devuelve el servidor es utilizar

predicados en la selección. El predicado se incluye entre la claúsula y el primernombre del campo a recuperar, los posibles predicados son: * , DISTINCT,DISTINCT ON (colum_name)

1 --Sobre un campo especifico2 SELECT DISTINCT ON( invoicedate ) *3 FROM invoice4 ORDER BY invoicedate ASC;

1 --Sobre los registros2 SELECT DISTINCT customerid , billingcity3 FROM invoice4 ORDER BY customerid ASC;

En determinadas circunstancias es necesario asignar un nuevo nombre aalguna de las columnas devueltas por el servidor. Para ello tenemos la palabrareservada AS que se encarga de asignar el nombre que deseamos a la columnadeseada:

1 SELECT DISTINCT2 customerid as clienteid , billingcity as ciudad3 FROM invoice as factura4 WHERE factura . billingcity = ’Paris ’;

3.3. Uso de operadores en criterios de selecciónPodemos utilizar los distintos operadores mencionados anteriormente para

filtrar registros utilizando la clausula WHERE.

1 SELECT *2 FROM invoice as cliente3 WHERE (total >= 5 and total <= 11)4 and billingcountry = ’France ’;

1 SELECT *2 FROM invoice as cliente3 WHERE NOT (total >= 5 and total =< 11)4 and billingcountry = ’France ’;

1 SELECT *2 FROM invoice as cliente3 WHERE (total BETWEEN 5 and 11) --inclusive4 and billingcountry = ’France ’;

5

Page 6: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

Operador IN: Este operador devuelve aquellos registros cuyo campo indicadocoincide con alguno de los en una lista.

1

2 SELECT *3 FROM invoice as factura4 WHERE NOT (total BETWEEN 5 and 11)5 and billingcountry IN (’France ’,’USA ’,’Canada ’);

Operador IS: Podemos usar este operador para comparar un campo conNULL.

1 SELECT *2 FROM invoice as factura3 WHERE cliente . billingstate IS NULL;

3.4. Agrupamiento y registrosLa cláusula GROUP BY forma grupos con las filas que tienen en comúnlos valores de una o varias columnas.

Sobre cada grupo se pueden aplicar las funciones de columna básicas:(SUM, MAX, MIN, AVG, COUNT), que pasan a denominarse fun-ciones de grupo.

Estas funciones, utilizadas en la cláusula SELECT, se aplican una vezpara cada grupo.

Se utiliza la cláusula WHERE para excluir aquellas filas que no se deseaagrupar, y la cláusula HAVING para filtrar los registros una vez agru-pados.

Todos los campos de la lista de campos de SELECT deben o bien incluirseen la cláusula GROUP BY o como argumentos de una función SQLagregada.

Para este ejemplo agrupamos la tabla invoice por su billingcountry.

1 SELECT billingcountry2 FROM invoice as factura3 WHERE cliente . billingstate IS NOT NULL4 GROUP BY billingcountry ;

Ejemplo de función agregada.

1 SELECT customerid , SUM(total)2 FROM invoice as cliente3 WHERE cliente . billingstate IS NOT NULL4 GROUP BY customerid ;

6

Page 7: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

Tomando un criterio de selección sobre los grupos:

1 SELECT customerid ,SUM(total)2 FROM invoice as factura3 WHERE factura . billingstate IS NOT NULL4 GROUP BY customerid5 HAVING SUM(total) > 40;

Para completar el bloque descrito anteriormente con todos las clausulas seestablece un orden en los registros.

1 SELECT customerid ,SUM(total)2 FROM invoice as cliente3 WHERE cliente . billingstate IS NOT NULL4 GROUP BY customerid5 HAVING SUM(total) > 406 ORDER BY SUM(total) DESC;

Estableciendo un resultado intermedio para encontrar el valor máximo deuna columna.

1 SELECT customerid , SUM(total) INTO x2 FROM invoice as factura3 GROUP BY customerid ;4

5 SELECT MAX(sum)6 FROM x;

Por ultimo podemos utilizar el modificador LIMIT para limitar el numerode registros que retorna la consulta.

1 SELECT2 customerid ,COUNT (total),SUM(total),AVG(total),STDDEV (total)3 FROM invoice as factura4 WHERE factura . billingstate IS NOT NULL5 GROUP BY customerid6 HAVING SUM(total) > 407 ORDER BY customerid DESC8 LIMIT 10;

7

Page 8: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

3.5. SubconsultasUna subconsulta es una instruccion SELECT escrita entre parentesisy anidada dentro de una instruccion SELECT, SELECT ... INTO,DELETE o UPDATE.

En una subconsulta, se utiliza la instrucción SELECT para proporcionarun conjunto de uno o mas valores especificados para evaluar en la expresiónde la clausula WHERE o HAVING.

Por lo general es usado con los predicados, ALL, ANY/SOME, INEXITS.

• ALL:El predicado ALL se utiliza para recuperar únicamente aquellosregistros de la consulta principal que satisfacen la comparación contodos los registros recuperados en la subconsulta.

• ANY/SOME:El predicado ANY se utiliza para recuperar registrosde la consulta principal, que satisfagan la comparación con cualquierotro registro recuperado en la subconsulta.

• EXISTS:El predicado EXISTS (con la palabra reservada NOT op-cional) se utiliza en comparaciones de verdad/falso para determinarsi la subconsulta devuelve algún registro.

• IN: El predicado IN se emplea para recuperar únicamente aquellosregistros de la consulta principal para los que algunos registros de lasubconsulta contienen un valor igual.

Ejemplos: Los 10 clientes que han hecho un consumo mayor a 40 dolares demanera descendente.

1 SELECT * FROM customer as cliente2 WHERE customerid IN3 (4 SELECT customerid5 FROM invoice as factura6 GROUP BY customerid7 HAVING SUM(total) > 408 ORDER BY SUM(total) DESC9 )

10 LIMIT 10;

Listar todos los clientes si existe una factura cuyo cliente sea nulo.

1 SELECT * FROM customer as cliente2 WHERE EXISTS3 (4 SELECT customerid5 FROM invoice as factura6 WHERE factura . customerid IS NULL7 );

8

Page 9: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

Seleccionar todos los clientes si existe por lo menos una facturación hechaen la misma ciudad de donde se registro a algún cliente.

1 SELECT * FROM customer as cliente2 WHERE cliente .city = ANY3 (4 SELECT billingcity5 FROM invoice as factura6 );

3.6. JOINS3.7. Cross Join

Las reunión cruzada (cross join) muestran todas las combinaciones detodos los registros de las tablas combinadas. Para este tipo de join no seincluye una condición de enlace. Se genera el producto cartesiano en elque el número de filas del resultado es igual al número de registros de laprimera tabla multiplicado por el número de registros de la segunda tabla.

Esta consulta selecciona todos los empleados y clientes que se registraron en lamisma ciudad.

1 SELECT DISTINCT2 employee .firstname , employee .lastname , customer .firstname ,3 customer . lastname4 FROM customer CROSS JOIN employee5 WHERE employee .city = customer .city;

La siguiente consulta es equivalente a la anterior:

1 SELECT DISTINCT2 employee .firstname , employee .lastname , customer .firstname ,3 customer . lastname4 FROM customer , employee5 WHERE employee .city = customer .city;

9

Page 10: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

3.8. Inner join/ joinLa reunión interna (Inner Join), determinara cuales filas de las tablasparticipantes se retornaran mediante un criterio de selección. La clausulaON o USING es usada para definir el criterio de selección.

La clausula ON es la mas usada para el criterio de selección del JOIN.Este utiliza una expresión booleana para retornar verdadero o falso talcual como en la clausula WHERE.

La clausula USING toma una lista de atributos (columnas) separadapor comas, la cual usara para seleccionar las filas que se retornaran. Lascolumnas especificadas deben ser comunes a las tablas participantes. Silos atributos son iguales este retornara la fila.

La siguiente consulta retorna todas las canciones que pertenecen a un álbumde un artista.

1 SELECT track.name as Cancion , album.title as titulo ,2 artist .name as Artista3 FROM track4 INNER JOIN album ON track. albumid = album. albumid5 INNER JOIN artist ON album. artistid = artist . artistid ;

La siguiente consulta es equivalente a la anterior:

1 SELECT track.name as Cancion , album.title as titulo ,2 artist .name as Artista3 FROM track4 INNER JOIN album USING ( albumid )5 INNER JOIN artist USING ( artistid )

Podemos omitir la palabra INNER y utilizar ON y USING en la misma consul-ta:

1 SELECT DISTINCT employee .firstname , employee .employeeid ,2 customer .firstname , invoice . invoicedate , album.title ,3 artist .name4 FROM employee5 JOIN customer ON employee . employeeid = customer . supportrepid6 JOIN invoice USING ( customerid )7 JOIN invoiceline USING( invoiceid )8 JOIN track USING ( trackid )9 JOIN album USING ( albumid )

10 JOIN artist USING ( artistid )11 WHERE artist .name = ’AC/DC’12 ORDER BY invoicedate ;

Que hace la consulta anterior?

10

Page 11: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

3.9. Left outer join/ left joinEn primer lugar, se realiza un inner join. Entonces, para cada fila en T1que no satisface la condición de unión con cualquier fila en T2, se agregauna fila unida con valores nulos en columnas de T2. Por lo tanto, la tablaunida tiene incondicionalmente al menos una fila para cada fila en T1.

1 SELECT *2 FROM artist3 LEFT JOIN album USING ( artistid )

3.10. Right outer join/ Right joinEn primer lugar, se realiza una unión interna. Entonces, para cada filaen T2 que no satisface la condición de unión con cualquier fila en T1,se agrega una fila unida con valores nulos en columnas de T1. Este esel inverso de una combinación izquierda: la tabla de resultados tendráincondicionalmente una fila para cada fila en T2.

1 SELECT *2 FROM artist3 RIGHT JOIN album USING ( artistid )

3.11. Full outer joinEn primer lugar, se realiza una unión interna. Entonces, para cada filaen T1 que no satisface la condición de unión con cualquier fila en T2, seagrega una fila unida con valores nulos en columnas de T2. Además, paracada fila de T2 que no satisface la condición de unión con cualquier filaen T1, se agrega una fila unida con valores nulos en las columnas de T1.

1 SELECT *2 FROM artist3 FULL OUTER JOIN album USING ( artistid )

11

Page 12: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

3.12. Natural joinLa reunión Natural es una operación JOIN que crea una cláusula deunión implícita basada en las columnas comunes de las dos tablas que seunen. Las columnas comunes son columnas que tienen el mismo nombreen ambas tablas.

Se debe tener cuidado con este tipo de reunión ya que puede obtenerseun resultado no deseado si no conocen bien todas las columnas de tablasparticipantes.

Si las tablas no tienen atributos(columnas comunes), este tipo de reuniónse comportara como una reunión cruzada.

Todos artistas que tiene un álbum

1 SELECT *2 FROM artist3 NATURAL INNER JOIN album;

Una reunión mal definida.

1 /* WRONG */2 SELECT *3 FROM employee4 NATURAL JOIN customer

Ejemplo de reunion cruzada con Natural Join

1 SELECT *2 FROM album3 NATURAL JOIN genre;

12

Page 13: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

3.13. InsertINSERT inserta nuevas filas en una tabla.Se puede insertar una o másfilas especificadas por expresiones de valor, o cero o más filas resultantesde una consulta.

Los nombres de las columnas de destino se pueden enumerar en cualquierorden. Si no se da ninguna lista de nombres de columna, el valor prede-terminado es todas las columnas de la tabla en su orden declarada; o losprimeros N nombres de columna, si sólo hay N columnas proporcionadaspor la cláusula VALUES o consulta. Los valores proporcionados por lacláusula VALUES o la consulta están asociados con la lista de columnasexplícita o implícita de izquierda a derecha.

1 INSERT INTO tablename VALUES ( valuecolumn1 , valuecolumn2 ...)

Ejemplo: Insertar un nuevo artista llamado Stromae

1 INSERT INTO artist VALUES (276 , ’Stromae ’)

La siguiente operación es equivalente a la anterior.

1 INSERT INTO artist (artistid ,name)2 VALUES (276 , ’Stromae ’);

También podemos agregar varios registros. La siguiente operación registra dosalbunes pertenecientes a el artista Stromae.

1 INSERT INTO album (albumid ,title , artistid ) VALUES2 (348 , ’Cheese ’, 276) ,3 (349 , ’Racine Carree ’, 276);

3.14. UpdateUPDATE cambia los valores de las columnas especificadas en todas lasfilas que satisfacen la condición. Solamente las columnas a modificar de-ben ser mencionadas en la cláusula SET; las columnas no modificadasexplícitamente conservan sus valores anteriores.

Hay dos maneras de modificar una tabla utilizando información contenidaen otras tablas de la base de datos: utilizando una subconsulta o especifi-cando tablas adicionales en la cláusula FROM. La técnica más apropiadadepende de las circunstancias específicas.

1 UPDATE table2 SET columna1 = valor1 ,3 columna2 = valor ,...4 WHERE5 condition ;

13

Page 14: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

La siguiente consulta modifica el empleado cuyo id es igual a 2.

1 UPDATE employee2 SET3 firstname = ’Jesus ’,4 lastname =’Perez ’,5 title = ’Database Administrator ’6 WHERE employee . employeeid = 2;7

8 --select * from employee

Podemos utilizar la clausula UPDATE con reuniones de ser necesario.

1 --Actualiza el soporte de todos los clientes que hancomprado pistas pertenecientes a albunes de AC/DC

2 UPDATE customer3 SET supportrepid = 24 FROM invoice5 INNER JOIN invoiceline USING ( invoiceid )6 INNER JOIN track USING ( trackid )7 INNER JOIN album USING ( albumid )8 INNER JOIN artist USING ( artistid )9 WHERE invoice . customerid = customer . customerid and artist .

name = ’AC/DC’;

La siguiente consulta es equivalente a la anterior:

1 UPDATE customer2 SET supportrepid = 23 FROM invoice , invoiceline , track ,album , artist --List tables4 WHERE invoice . customerid = customer . customerid5 and customer . customerid = invoice . customerid6 and invoice . invoiceid = invoiceline . invoiceid7 and invoiceline . trackid = track. trackid8 and track. albumid = album. albumid9 and album. artistid = artist . artistid

10 and artist .name = ’AC/DC’;

14

Page 15: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

También podemos expresar la actualización utilizando una sub-consulta:

1 UPDATE customer2 SET supportrepid = 23 WHERE customer . customerid IN(4 select distinct customer . customerid5 FROM employee6 INNER JOIN customer7 ON customer . supportrepid = employee . employeeid8 INNER JOIN invoice USING ( customerid )9 INNER JOIN invoiceline USING ( invoiceid )

10 INNER JOIN track USING ( trackid )11 INNER JOIN album USING ( albumid )12 INNER JOIN artist USING ( artistid )13 WHERE artist .name = ’AC/DC’14 );

Para verificar la actualizacion puedes usar la siguiente consulta:

1 --Para verficar los resultados puedes usar esta consulta .2 select distinct employee .firstname , employee .lastname ,3 employee .title , customer . supportrepid , customer .customerid ,

artist .name4 FROM employee5 INNER JOIN customer ON customer . supportrepid = employee .

employeeid6 INNER JOIN invoice USING ( customerid )7 INNER JOIN invoiceline USING ( invoiceid )8 INNER JOIN track USING ( trackid )9 INNER JOIN album USING ( albumid )

10 INNER JOIN artist USING ( artistid )11 WHERE artist .name = ’AC/DC’;

3.15. DeleteLa cláusula DELETE elimina las filas que satisfacen la cláusula WHEREde la tabla especificada. Si la cláusula WHERE está ausente, el efecto eseliminar todas las filas de la tabla. El resultado es una tabla válida, perovacía.

Existen dos maneras de eliminar filas de una tabla utilizando informacióncontenida en otras tablas de la base de datos: mediante sub-seleccioneso especificando tablas adicionales en la cláusula USING. La técnica másapropiada depende de las circunstancias específicas.

15

Page 16: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

1

2 DELETE FROM [ ONLY ] table_name [ * ] [ [ AS ] alias ]3 [ USING using_list ]4 [ WHERE condition | WHERE CURRENT OF cursor_name ]5 [ RETURNING * | output_expression [ [ AS ] output_name ] [,

...] ]

3.16. Ejercicios propuestos:Retornar el nombre y apellido y nombre de artista de todos los clientesque han comprado alguna vez alguna canción.

Listar todos los albunes, indicando el artista, el numero de canciones, eltiempo de duración total en milisegundos, el peso total en bytes y el preciototal del album.

Retornar todos los empleados de la empresa que hacen soporte a un clientey que no reportan a ningún otro empleado.

Liste la cantidad de canciones de cada uno de los géneros musicales.

Se le entregara un premio a 10 clientes de la empresa, para ganar se nece-sita haber comprado mínimo 6 veces y haber gastado mas de 40 dolaresen productos (canciones). Tienen prioridad aquellos que hayan adquiridomas productos. Si existe un empate por numero de productos ganara quienhaya gastado mas dinero. Se necesita los nombres, apellidos, cantidad deproductos y consumo total de los primeros 10 clientes que cumplan estosrequisitos.

Se necesita saber que tipos de genero musical son preferidos por los clien-tes. Para determinar esto se necesita el nombre del genero y la cantidadde compras hechas en cada uno de ellos. Ademas se necesita ordenar porcantidad de compras de manera descendente.

Determine la cantidad de productos que se consumen según el país de losclientes.

Buscar todos los clientes que han realizado mas de alguna compra, retornarel nombre y apellido del cliente, el numero de compras y el monto totalconsumido en sus compras. Ordenar por numero de compras y por montototal consumido de manera descendente.

Mostrar la información del empleado que atiende al cliente que mas dineroha gastado en la empresa.

Mostrar información de todos los clientes que han comprado cancionespertenecientes a la lista de reproducción ’Grunge’.

16

Page 17: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

Cuales son los compositores con mayor numero de canciones?. Liste todoslos compositores junto al numero de canciones realizadas.

Liste los 10 clientes ue consumieron mas productos durante el año 2009en orden.

Liste los compositores de las canciones que mayor venta han tenido. Mos-trar el nombre del compositor junto a el numero de ventas de las cancionesque compuso.

17

Page 18: Laboratorio de Base de Datos Práctica Nro. 5, Consultas SQL...lenguaje de dominio especifico, usado en la programación y diseñado para ad ministrar los datos mantenidos en los

Figura 1: Diagrama Entidad Relacion chinook_postgres

18