0% found this document useful (0 votes)
298 views9 pages

Distinct

This document contains SQL queries and exercises using the Sakila database. It covers various SQL concepts like DISTINCT, ORDER BY, WHERE, JOINs, aggregation functions like COUNT, SUM, AVG, MIN, MAX. The queries select data from different tables in the Sakila database and apply filters, sorting, aggregation to retrieve desired results. Examples include selecting distinct customer IDs, joining address and city tables, finding min and max film lengths, counting rentals, getting average payment amount.

Uploaded by

Eduardo Caldera
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
298 views9 pages

Distinct

This document contains SQL queries and exercises using the Sakila database. It covers various SQL concepts like DISTINCT, ORDER BY, WHERE, JOINs, aggregation functions like COUNT, SUM, AVG, MIN, MAX. The queries select data from different tables in the Sakila database and apply filters, sorting, aggregation to retrieve desired results. Examples include selecting distinct customer IDs, joining address and city tables, finding min and max film lengths, counting rentals, getting average payment amount.

Uploaded by

Eduardo Caldera
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

/

*########################################################################
#########################################################################
#############################*/
/*DISTINCT*/
SELECT DISTINCT (CUSTOMER_ID) FROM SAKILA.PAYMENT;

SELECT DISTINCT (STORE_ID) FROM SAKILA.CUSTOMER;

/
*########################################################################
#########################################################################
#############################*/

/*ORDER BY*/
SELECT* FROM SAKILA.COUNTRY ORDER BY COUNTRY DESC;

SELECT* FROM SAKILA.COUNTRY ORDER BY COUNTRY ASC;

SELECT* FROM SAKILA.CUSTOMER ORDER BY FIRST_NAME ASC;

SELECT STORE_ID AS TIENDA, FIRST_NAME AS NOMBRE, LAST_NAME AS APELLIDO


FROM SAKILA.CUSTOMER ORDER BY APELLIDO DESC; /*Cambia el nombre de las
columnas store_id, first_name y last_name a Tienda, Nombre y Apellido
respectivamente. Ordena de manera descendente la columna Apellido*/

SELECT DISTINCT (AMOUNT) FROM SAKILA.PAYMENT ORDER BY AMOUNT ASC; /*¿Cuál


es la cantidad mas baja y mas alta de la columna amount?*/
/
*########################################################################
#########################################################################
#############################*/

/*WHERE*/
SELECT* FROM SAKILA.ACTOR WHERE first_name = 'DAN';

SELECT* FROM SAKILA.CITY WHERE COUNTRY_ID = 102;

SELECT* FROM SAKILA.CUSTOMER WHERE STORE_ID = 1;

SELECT* FROM SAKILA.INVENTORY WHERE FILM_ID > 50;

SELECT DISTINCT AMOUNT FROM SAKILA.PAYMENT WHERE AMOUNT < 3; /*SELECCIONA


TODOS LOS VALORES MENORES A 3 DE AMOUNT Y ADEMAS TODOS LOS QUE SON
DISTINTOS*/

SELECT* FROM SAKILA.STAFF WHERE STAFF_ID != 2;

SELECT* FROM SAKILA.LANGUAGE WHERE NAME != 'FRENCH';

/*EXERCISES*/
SELECT DESCRIPTION, RELEASE_YEAR FROM SAKILA.FILM; /*Consulta
description, release_year de la tabla film de la base de datos sakila.*/

SELECT* FROM SAKILA.FILM WHERE TITLE = 'IMPACT ALADDIN'; /*Filtra la


información donde title sea IMPACT ALADDIN*/
SELECT* FROM SAKILA.PAYMENT; /*Consulta la tabla payment de la base de
datos sakila.*/

SELECT* FROM SAKILA.PAYMENT WHERE AMOUNT > 0.99; /*Filtra la información


donde amount sea mayor a 0.99.*/
/
*########################################################################
#########################################################################
#############################*/

/*AND OR NOT*/

/*AND*/
SELECT *FROM SAKILA.COUNTRY WHERE COUNTRY = 'ALGERIA' AND COUNTRY_ID = 2;

/*OR*/
SELECT *FROM SAKILA.COUNTRY WHERE COUNTRY = 'ALGERIA' OR COUNTRY_ID = 12;

SELECT *FROM SAKILA.LANGUAGE WHERE LANGUAGE_ID = 1 OR NAME='GERMAN';

/*NOT*/
SELECT* FROM SAKILA.CATEGORY WHERE NOT NAME='ACTION';

SELECT* FROM SAKILA.FILM WHERE NOT RATING = 'PG';

SELECT DISTINCT (RATING) FROM SAKILA.FILM WHERE NOT RATING = 'PG';

/*EXERCISES*/
SELECT* FROM SAKILA.PAYMENT; /*Consulta la tabla payment de la base de
datos sakila.*/

SELECT* FROM SAKILA.PAYMENT WHERE CUSTOMER_ID = 36 AND AMOUNT > 0.99 AND
STAFF_ID = 1; /*Filtra la información donde customer_id sea igual a 36,
amount sea mayor a 0.99 y staff_id sea igual a 1.*/

SELECT* FROM SAKILA.RENTAL;/*Consulta la tabla rental de la base de datos


sakila.*/

SELECT* FROM SAKILA.RENTAL WHERE NOT STAFF_ID = 1 AND CUSTOMER_ID > 250
AND INVENTORY_ID < 100;/*Filtra la información donde staff_id no sea 1,
customer_id sea mayor a 250 y inventory_id sea menor de 100*/
/
*########################################################################
#########################################################################
#############################*/

/*IN*/
SELECT* FROM SAKILA.CUSTOMER WHERE FIRST_NAME IN ('MARY', 'PATRICIA');

SELECT* FROM SAKILA.FILM WHERE SPECIAL_FEATURES IN ('Trailers',


'Trailers,Deleted Scenes') AND RATING IN('G','NC-17') AND LENGTH > 50;

SELECT* FROM SAKILA.CATEGORY WHERE NAME NOT IN


('ACTION','ANIMATION','CHILDREN');
/*EXERCISES*/
SELECT* FROM SAKILA.FILM_TEXT; /*Consulta la tabla film_text de la base
de datos sakil*/

SELECT* FROM SAKILA.FILM_TEXT WHERE TITLE IN ('ZORRO ARK', 'VIRGIN


DAISY', 'UNITED PILOT'); /*Filtra la información donde title sea ZORRO
ARK, VIRGIN DAISY, UNITED PILOT*/

SELECT* FROM SAKILA.CITY; /*Consulta la tabla city de la base de datos


sakila.*/

SELECT* FROM SAKILA.CITY WHERE CITY IN ('Chiayi', 'Dongying', 'Fukuyama',


'Kilis'); /*Filtra la información donde city sea Chiayi, Dongying,
Fukuyama y Kilis.*/
/
*########################################################################
#########################################################################
#############################*/

/*BETWEEN*/
SELECT* FROM SAKILA.RENTAL WHERE (CUSTOMER_ID BETWEEN 300 AND 350) AND
STAFF_ID=1;

SELECT* FROM SAKILA.PAYMENT WHERE AMOUNT NOT BETWEEN 3 AND 5;

/*EXCERCISES*/
SELECT* FROM SAKILA.PAYMENT;/*Consulta la tabla payment de la base de
datos sakila.*/

SELECT* FROM SAKILA.PAYMENT WHERE (AMOUNT BETWEEN 2.99 AND 4.99) AND
(STAFF_ID = 2) AND (CUSTOMER_ID IN(1, 2));/*Filtra la información donde
amount esté entre 2.99 y 4.99, staff_id sea igual a 2 y customer_id sea
1 y 2.*/

SELECT* FROM SAKILA.ADDRESS;/*Consulta la tabla address de la base de


datos sakila.*/

SELECT* FROM SAKILA.ADDRESS WHERE (CITY_ID BETWEEN 300 AND 350);/*Filtra


la información donde city_id esté entre 300 y 350.*/

SELECT* FROM SAKILA.FILM;/*Consulta la tabla film de la base de datos


sakila.*/

SELECT* FROM SAKILA.FILM WHERE (RENTAL_RATE BETWEEN 0.99 AND 2.99) AND
(LENGTH <= 50) AND (REPLACEMENT_COST < 20);/*Filtra la información donde
rental_rate esté entre 0.99 y 2.99, length sea menor igual de 50 y
replacement_cost sea menor de 20.*/
/
*########################################################################
#########################################################################
#############################*/

/*LIKE*/
SELECT* FROM SAKILA.ACTOR WHERE FIRST_NAME LIKE 'A%' AND LAST_NAME LIKE
'B%';
SELECT* FROM SAKILA.ACTOR WHERE FIRST_NAME LIKE '%A' AND LAST_NAME LIKE
'%N';

SELECT* FROM SAKILA.ACTOR WHERE FIRST_NAME LIKE '%NE%' AND LAST_NAME LIKE
'%RO%'; /*BUSQUEDA DE COINCIDENCIAS ENTREMEDIO*/

SELECT* FROM SAKILA.ACTOR WHERE FIRST_NAME LIKE 'A%E'; /*BUSQUEDA DE


COINCIDENCIAS EN PRINCIPIO Y FINAL*/

SELECT* FROM SAKILA.ACTOR WHERE FIRST_NAME LIKE 'C%N' AND LAST_NAME LIKE
'G%';

/*EXCERCISES*/
SELECT* FROM SAKILA.FILM; /*Consulta la tabla film de la base de datos
sakila.*/

SELECT* FROM SAKILA.FILM WHERE RELEASE_YEAR = 2006 AND TITLE LIKE 'ALI%';
/*Filtra la información donde release_year sea igual a 2006 y title
empiece con ALI.*/

/
*########################################################################
#########################################################################
#############################*/

/*JOINS*/

/*INER JOIN*/
SELECT* FROM SAKILA.FILM F INNER JOIN SAKILA.LANGUAGE L ON (F.LANGUAGE_ID
= L.LANGUAGE_ID);

SELECT F.TITLE, F.DESCRIPTION, F.RELEASE_YEAR, L.NAME


FROM SAKILA.FILM F INNER JOIN SAKILA.LANGUAGE L ON (F.LANGUAGE_ID =
L.LANGUAGE_ID); /*MISMA COSULTA QUE ANTERIOR PERO MAS LIMPIA*/

SELECT A.ADDRESS AS DIRECCION, C.CITY AS CIUDAD


FROM SAKILA.ADDRESS A INNER JOIN SAKILA.CITY C ON (A.CITY_ID =
C.CITY_ID);

SELECT C.CUSTOMER_ID, C.FIRST_NAME, C.LAST_NAME, A.ACTOR_ID,


A.FIRST_NAME, A.LAST_NAME
FROM SAKILA.CUSTOMER C RIGHT JOIN SAKILA.ACTOR A ON (C.LAST_NAME =
A.LAST_NAME);

SELECT C.CUSTOMER_ID, C.FIRST_NAME, C.LAST_NAME, A.ACTOR_ID,


A.FIRST_NAME, A.LAST_NAME
FROM SAKILA.CUSTOMER C LEFT JOIN SAKILA.ACTOR A ON (C.LAST_NAME =
A.LAST_NAME);

/*EXCERCISES*/
SELECT* FROM SAKILA.ADDRESS;/*Consulta la tabla address de la base de
datos sakila.*/

SELECT*
FROM SAKILA.CITY C INNER JOIN SAKILA.COUNTRY CT ON (C.CITY_ID =
CT.COUNTRY_ID);/*Realiza un INNER JOIN con las tablas city y country*/

SELECT A.ADDRESS, C.CITY, CO.COUNTRY


FROM SAKILA.CITY C
INNER JOIN SAKILA.ADDRESS A ON (C.CITY_ID = A.CITY_ID)
INNER JOIN SAKILA.COUNTRY CO ON (C.CITY_ID = CO.COUNTRY_ID); /*Mostrar
las columnas address, city, country*/

SELECT* FROM SAKILA.CUSTOMER; /*Consulta la tabla customer de la base de


datos sakila.*/

SELECT*
FROM SAKILA.STORE S LEFT JOIN SAKILA.ADDRESS A ON (S.STORE_ID =
A.ADDRESS_ID);/*Realiza un LEFT JOIN con las tablas store y address*/

SELECT C.FIRST_NAME, A.ADDRESS, S.STORE_ID


FROM SAKILA.STORE S
LEFT JOIN SAKILA.ADDRESS A ON (S.STORE_ID = A.ADDRESS_ID)
LEFT JOIN SAKILA.CUSTOMER C ON (C.CUSTOMER_ID =
S.MANAGER_STAFF_ID);/*Mostrar las columnas first_name, address,
store_id*/

SELECT C.FIRST_NAME, A.ADDRESS, S.STORE_ID


FROM SAKILA.CUSTOMER C
LEFT JOIN SAKILA.STORE S ON (C.STORE_ID = S.STORE_ID)
LEFT JOIN SAKILA.ADDRESS A ON (C.ADDRESS_ID = A.ADDRESS_ID); /*Mostrar
las columnas first_name, address, store_id*/

SELECT* FROM SAKILA.RENTAL;/*Consulta la tabla rental de la base de datos


sakila.*/

SELECT*
FROM SAKILA.RENTAL R
INNER JOIN SAKILA.STAFF S ON (R.STAFF_ID = S.STAFF_ID);/*Realiza un INNER
JOIN con la tabla staff*/

/
*########################################################################
#########################################################################
#############################*/

/*COUNT - AVG - SUM - MAX - MIN*/

/*SUM*/
SELECT* FROM SAKILA.PAYMENT;
SELECT SUM(AMOUNT) FROM SAKILA.PAYMENT; /*Suma todos los valores de una
columna*/

SELECT INVENTORY_ID + FILM_ID + STORE_ID


FROM SAKILA.INVENTORY; /*Suma los valores entre columnas*/

/*COUNT*/
SELECT* FROM SAKILA.ACTOR;
SELECT COUNT(*) FROM SAKILA.ACTOR; /*CUENTA LA CANTIDAD DE REGISTROS EN
LA TABLA*/
SELECT COUNT(FIRST_NAME) FROM SAKILA.ACTOR;

/*AVG*/
SELECT AVG(AMOUNT) FROM SAKILA.PAYMENT; /*PROMEDIO DE UNA COLUMNA*/
SELECT AVG(RENTAL_DURATION) FROM SAKILA.FILM;

/*MAX - MIN*/
SELECT MAX(LENGTH) FROM SAKILA.FILM;
SELECT MIN(LENGTH) FROM SAKILA.FILM;
SELECT MIN(REPLACEMENT_COST) FROM SAKILA.FILM;
SELECT MAX(REPLACEMENT_COST) FROM SAKILA.FILM;

/*EXERCISES*/
SELECT* FROM SAKILA.RENTAL;/*Consulta la tabla rental de la base de datos
sakila.*/

SELECT COUNT(RENTAL_ID) FROM SAKILA.RENTAL;/*Realiza un COUNT de la


columna rental_id*/

SELECT* FROM SAKILA.PAYMENT;/*Consulta la tabla payment de la base de


datos sakila.*/

SELECT MAX(AMOUNT) FROM SAKILA.PAYMENT;/*Realiza un MAX de la columna


amount*/

/
*########################################################################
#########################################################################
#############################*/
/*GROUP BY*/
SELECT LAST_NAME, COUNT(*) FROM SAKILA.ACTOR
GROUP BY LAST_NAME;

SELECT C.CUSTOMER_ID, C.FIRST_NAME, C.LAST_NAME, SUM(P.AMOUNT)


FROM SAKILA.PAYMENT P INNER JOIN SAKILA.CUSTOMER C ON (C.CUSTOMER_ID =
P.CUSTOMER_ID)
GROUP BY 1,2,3;

/*EXCERCISES*/
SELECT* FROM SAKILA.RENTAL R;/*Consulta la tabla rental de la base de
datos sakila.*/

SELECT MAX(RENTAL_DATE), CUSTOMER_ID FROM SAKILA.RENTAL GROUP BY


CUSTOMER_ID; /*Realiza un MAX de la columna rental_date*/

/
*########################################################################
#########################################################################
#############################*/
/*HAVING*/
SELECT AMOUNT, COUNT(*) FROM SAKILA.PAYMENT
GROUP BY AMOUNT
HAVING COUNT(*) <= 10; /*HAVING SE UTILIZA EN CONJUNTO CON COUNT PARA
MEDIR EL VALOR DE COUNT CON <, >, =, SE UTILIZA POR QUE WHERE NO PUEDE
HACERLO*/

SELECT LAST_NAME, COUNT(*)


FROM SAKILA.ACTOR
GROUP BY LAST_NAME
HAVING COUNT(*) > 3;

SELECT C.CUSTOMER_ID, C.LAST_NAME, C.FIRST_NAME, SUM(P.AMOUNT)


FROM SAKILA.PAYMENT P
INNER JOIN SAKILA.CUSTOMER C ON (P.CUSTOMER_ID = C.CUSTOMER_ID)
GROUP BY 1,2,3
HAVING SUM(P.AMOUNT) < 60
ORDER BY SUM(P.AMOUNT) DESC;

/*EXERCISES*/
SELECT LAST_NAME, COUNT(*) FROM SAKILA.ACTOR
GROUP BY LAST_NAME; /*Realiza un COUNT de last_name*/

SELECT LAST_NAME, COUNT(*) FROM SAKILA.ACTOR


GROUP BY LAST_NAME
HAVING COUNT(*) > 2;/*Mostrar cuando el COUNT sea mayor de 2*/

/
*########################################################################
#########################################################################
#############################*/
/*FUNCIONES UTILES*/

/*CHAR_LENGTH*/
SELECT NAME, CHAR_LENGTH(NAME) AS LONGITUDCADENA
FROM SAKILA.CATEGORY;

SELECT CITY, CHAR_LENGTH(CITY) AS LONGITUDCIUDAD


FROM SAKILA.CITY;

/*CONCAT*/
SELECT*, CONCAT(FIRST_NAME, ' ',LAST_NAME) AS NOMBRE_COMPLETO FROM
SAKILA.CUSTOMER;

SELECT CONCAT_WS(" - ", TITLE, DESCRIPTION, RELEASE_YEAR) FROM


SAKILA.FILM; /*CONCATENACION CON MUCHAS COLUMNAS*/

/*ROUND*/
SELECT*, ROUND(AMOUNT, 0) FROM SAKILA.PAYMENT; /*REDONDEAR VALORES
NUMERICOS*/

/*LOWER CASE, UPPER CASE - MAYUSCULAS Y MINUSCULAS*/


SELECT*, LCASE(CONCAT(FIRST_NAME, "", LAST_NAME)) AS "NOMBRE COMPLETO"
FROM SAKILA.ACTOR; /*MINUSCULAS*/

SELECT*, UCASE(CONCAT(FIRST_NAME, "", LAST_NAME)) AS "NOMBRE COMPLETO"


FROM SAKILA.ACTOR; /*MAYUSCULAS*/

/*EXERCISES*/
SELECT EMAIL, CHAR_LENGTH(EMAIL) FROM SAKILA.CUSTOMER;/*Usa la función
CHAR_LENGTH() en la tabla customer y calcula la longitud de la columna
email.*/

SELECT CONCAT_WS(" ", FIRST_NAME, LAST_NAME, EMAIL) FROM SAKILA.CUSTOMER;


/*Usa la función CONCAT_WS() en la tabla film y has un concatenado de
todas las columnas.*/

SELECT CUSTOMER_ID, ROUND(AVG(AMOUNT),0) FROM SAKILA.PAYMENT


GROUP BY CUSTOMER_ID;/*Consulta la tabla payment y has un group by por
customer_id para el promedio de amount, después usa la función ROUND()
para redondear a cero decimales el promedio.*/

SELECT*, UCASE(CITY) FROM SAKILA.CITY AS CIUDAD;/*Usa la función UCASE()


en la tabla city y convierte la columna city en mayúsculas.*/

/
*########################################################################
#########################################################################
#############################*/
/*CASE*/
SELECT* FROM SAKILA.ADDRESS;

SELECT ADDRESS, ADDRESS2,


CASE
WHEN ADDRESS2 IS NULL THEN "SIN DIRECCION"
ELSE "CON DIRECCION"
END AS COMENTARIO
FROM SAKILA.ADDRESS;

SELECT* FROM SAKILA.PAYMENT;

SELECT PAYMENT_ID, AMOUNT,


CASE
WHEN AMOUNT < 1 THEN "PRECIO MINIMO"
WHEN AMOUNT BETWEEN 1 AND 3 THEN "PRECIO INTERMEDIO"
ELSE "PRECIO MAXIMO"
END AS COMENTARIO
FROM SAKILA.PAYMENT;

/*EXERCISES*/

/*Usa la función CASE en la tabla film y calcula 3 casos, si rental_rate


es menor que 1 ingresa "Pelicula Mala",
si la calificacion esta dentro de 1 y 3 que muestre "Pelicula Buena", si
es mayor que muestre "Pelicula Excelente"*/
SELECT TITLE,
CASE
WHEN RENTAL_RATE < 1 THEN "PELICULA MALA"
WHEN RENTAL_RATE BETWEEN 1 AND 3 THEN "PELICULA BUENA"
ELSE "PELICULA EXCELENTE"
END AS COMENTARIO
FROM SAKILA.FILM;

/
*########################################################################
#########################################################################
#############################*/
/*SUBCONSULTAS*/
SELECT* FROM SAKILA.FILM;

SELECT TITLE FROM SAKILA.FILM


WHERE TITLE LIKE 'K%' OR TITLE LIKE 'Q%'
AND TITLE IN (SELECT TITLE FROM SAKILA.FILM WHERE LANGUAGE_ID IN
(SELECT
LANGUAGE_ID FROM SAKILA.LANGUAGE WHERE NAME = 'English'));

SELECT* FROM SAKILA.ACTOR;

SELECT FIRST_NAME, LAST_NAME


FROM SAKILA.ACTOR
WHERE ACTOR_ID IN (SELECT ACTOR_ID FROM SAKILA.FILM_ACTOR WHERE FILM_ID
IN
(
SELECT FILM_ID FROM SAKILA.FILM WHERE TITLE = 'Alone Trip'));

SELECT TITLE FROM SAKILA.FILM


WHERE FILM_ID IN (SELECT FILM_ID FROM SAKILA.FILM_CATEGORY WHERE
CATEGORY_ID IN

(SELECT CATEGORY_ID FROM SAKILA.CATEGORY WHERE NAME = 'Family'));

/*EXERCISES*/
/*FILM,FILM_CATEGORY, CUSTOMER, RENTAL*/
/*SELECT FIRST_NAME, LAST_NAME, EMAIL
FROM SAKILA.CUSTOMER
WHERE CUSTOMER_ID IN (SELECT CUSTOMER_ID FROM SAKILA.RENTAL WHERE
INVENTORY_ID IN

() )*/
/**Encuentre el nombre completo y la dirección de correo electrónico de
todos los clientes que hayan alquilado una película de acción.*/

/
*########################################################################
#########################################################################
#############################*/
/*VIEWS - VISTAS*/

CREATE VIEW INGRESOS_POR_GENERO AS


SELECT C.NAME,SUM(P.AMOUNT)
FROM SAKILA.CATEGORY C
INNER JOIN SAKILA.FILM_CATEGORY FC
ON (C.CATEGORY_ID = FC.CATEGORY_ID)
INNER JOIN SAKILA.INVENTORY I
ON (FC.FILM_ID = I.INVENTORY_ID)
INNER JOIN SAKILA.RENTAL R
ON (I.INVENTORY_ID = R.INVENTORY_ID)
INNER JOIN SAKILA.PAYMENT P
ON (R.RENTAL_ID = P.RENTAL_ID)
GROUP BY C.NAME
ORDER BY SUM(P.AMOUNT) DESC LIMIT 5;

SELECT* FROM INGRESOS_POR_GENERO;

/*arreglar vista que no funciona*/

You might also like