0% found this document useful (0 votes)
347 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)
347 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

/

*########################################################################
#########################################################################
#############################*/
/*DISTINCT*/
SELECT DISTINCT (CUSTOMER_ID) FROM [Link];

SELECT DISTINCT (STORE_ID) FROM [Link];

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

/*ORDER BY*/
SELECT* FROM [Link] ORDER BY COUNTRY DESC;

SELECT* FROM [Link] ORDER BY COUNTRY ASC;

SELECT* FROM [Link] ORDER BY FIRST_NAME ASC;

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


FROM [Link] 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 [Link] ORDER BY AMOUNT ASC; /*¿Cuál


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

/*WHERE*/
SELECT* FROM [Link] WHERE first_name = 'DAN';

SELECT* FROM [Link] WHERE COUNTRY_ID = 102;

SELECT* FROM [Link] WHERE STORE_ID = 1;

SELECT* FROM [Link] WHERE FILM_ID > 50;

SELECT DISTINCT AMOUNT FROM [Link] WHERE AMOUNT < 3; /*SELECCIONA


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

SELECT* FROM [Link] WHERE STAFF_ID != 2;

SELECT* FROM [Link] WHERE NAME != 'FRENCH';

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

SELECT* FROM [Link] WHERE TITLE = 'IMPACT ALADDIN'; /*Filtra la


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

SELECT* FROM [Link] WHERE AMOUNT > 0.99; /*Filtra la información


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

/*AND OR NOT*/

/*AND*/
SELECT *FROM [Link] WHERE COUNTRY = 'ALGERIA' AND COUNTRY_ID = 2;

/*OR*/
SELECT *FROM [Link] WHERE COUNTRY = 'ALGERIA' OR COUNTRY_ID = 12;

SELECT *FROM [Link] WHERE LANGUAGE_ID = 1 OR NAME='GERMAN';

/*NOT*/
SELECT* FROM [Link] WHERE NOT NAME='ACTION';

SELECT* FROM [Link] WHERE NOT RATING = 'PG';

SELECT DISTINCT (RATING) FROM [Link] WHERE NOT RATING = 'PG';

/*EXERCISES*/
SELECT* FROM [Link]; /*Consulta la tabla payment de la base de
datos sakila.*/

SELECT* FROM [Link] 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 [Link];/*Consulta la tabla rental de la base de datos


sakila.*/

SELECT* FROM [Link] 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 [Link] WHERE FIRST_NAME IN ('MARY', 'PATRICIA');

SELECT* FROM [Link] WHERE SPECIAL_FEATURES IN ('Trailers',


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

SELECT* FROM [Link] 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 [Link]; /*Consulta la tabla city de la base de datos


sakila.*/

SELECT* FROM [Link] WHERE CITY IN ('Chiayi', 'Dongying', 'Fukuyama',


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

/*BETWEEN*/
SELECT* FROM [Link] WHERE (CUSTOMER_ID BETWEEN 300 AND 350) AND
STAFF_ID=1;

SELECT* FROM [Link] WHERE AMOUNT NOT BETWEEN 3 AND 5;

/*EXCERCISES*/
SELECT* FROM [Link];/*Consulta la tabla payment de la base de
datos sakila.*/

SELECT* FROM [Link] 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 [Link];/*Consulta la tabla address de la base de


datos sakila.*/

SELECT* FROM [Link] WHERE (CITY_ID BETWEEN 300 AND 350);/*Filtra


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

SELECT* FROM [Link];/*Consulta la tabla film de la base de datos


sakila.*/

SELECT* FROM [Link] 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 [Link] WHERE FIRST_NAME LIKE 'A%' AND LAST_NAME LIKE
'B%';
SELECT* FROM [Link] WHERE FIRST_NAME LIKE '%A' AND LAST_NAME LIKE
'%N';

SELECT* FROM [Link] WHERE FIRST_NAME LIKE '%NE%' AND LAST_NAME LIKE
'%RO%'; /*BUSQUEDA DE COINCIDENCIAS ENTREMEDIO*/

SELECT* FROM [Link] WHERE FIRST_NAME LIKE 'A%E'; /*BUSQUEDA DE


COINCIDENCIAS EN PRINCIPIO Y FINAL*/

SELECT* FROM [Link] WHERE FIRST_NAME LIKE 'C%N' AND LAST_NAME LIKE
'G%';

/*EXCERCISES*/
SELECT* FROM [Link]; /*Consulta la tabla film de la base de datos
sakila.*/

SELECT* FROM [Link] 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 [Link] F INNER JOIN [Link] L ON (F.LANGUAGE_ID
= L.LANGUAGE_ID);

SELECT [Link], [Link], F.RELEASE_YEAR, [Link]


FROM [Link] F INNER JOIN [Link] L ON (F.LANGUAGE_ID =
L.LANGUAGE_ID); /*MISMA COSULTA QUE ANTERIOR PERO MAS LIMPIA*/

SELECT [Link] AS DIRECCION, [Link] AS CIUDAD


FROM [Link] A INNER JOIN [Link] 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 [Link] C RIGHT JOIN [Link] 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 [Link] C LEFT JOIN [Link] A ON (C.LAST_NAME =
A.LAST_NAME);

/*EXCERCISES*/
SELECT* FROM [Link];/*Consulta la tabla address de la base de
datos sakila.*/

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

SELECT [Link], [Link], [Link]


FROM [Link] C
INNER JOIN [Link] A ON (C.CITY_ID = A.CITY_ID)
INNER JOIN [Link] CO ON (C.CITY_ID = CO.COUNTRY_ID); /*Mostrar
las columnas address, city, country*/

SELECT* FROM [Link]; /*Consulta la tabla customer de la base de


datos sakila.*/

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

SELECT C.FIRST_NAME, [Link], S.STORE_ID


FROM [Link] S
LEFT JOIN [Link] A ON (S.STORE_ID = A.ADDRESS_ID)
LEFT JOIN [Link] C ON (C.CUSTOMER_ID =
S.MANAGER_STAFF_ID);/*Mostrar las columnas first_name, address,
store_id*/

SELECT C.FIRST_NAME, [Link], S.STORE_ID


FROM [Link] C
LEFT JOIN [Link] S ON (C.STORE_ID = S.STORE_ID)
LEFT JOIN [Link] A ON (C.ADDRESS_ID = A.ADDRESS_ID); /*Mostrar
las columnas first_name, address, store_id*/

SELECT* FROM [Link];/*Consulta la tabla rental de la base de datos


sakila.*/

SELECT*
FROM [Link] R
INNER JOIN [Link] S ON (R.STAFF_ID = S.STAFF_ID);/*Realiza un INNER
JOIN con la tabla staff*/

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

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

/*SUM*/
SELECT* FROM [Link];
SELECT SUM(AMOUNT) FROM [Link]; /*Suma todos los valores de una
columna*/

SELECT INVENTORY_ID + FILM_ID + STORE_ID


FROM [Link]; /*Suma los valores entre columnas*/

/*COUNT*/
SELECT* FROM [Link];
SELECT COUNT(*) FROM [Link]; /*CUENTA LA CANTIDAD DE REGISTROS EN
LA TABLA*/
SELECT COUNT(FIRST_NAME) FROM [Link];

/*AVG*/
SELECT AVG(AMOUNT) FROM [Link]; /*PROMEDIO DE UNA COLUMNA*/
SELECT AVG(RENTAL_DURATION) FROM [Link];

/*MAX - MIN*/
SELECT MAX(LENGTH) FROM [Link];
SELECT MIN(LENGTH) FROM [Link];
SELECT MIN(REPLACEMENT_COST) FROM [Link];
SELECT MAX(REPLACEMENT_COST) FROM [Link];

/*EXERCISES*/
SELECT* FROM [Link];/*Consulta la tabla rental de la base de datos
sakila.*/

SELECT COUNT(RENTAL_ID) FROM [Link];/*Realiza un COUNT de la


columna rental_id*/

SELECT* FROM [Link];/*Consulta la tabla payment de la base de


datos sakila.*/

SELECT MAX(AMOUNT) FROM [Link];/*Realiza un MAX de la columna


amount*/

/
*########################################################################
#########################################################################
#############################*/
/*GROUP BY*/
SELECT LAST_NAME, COUNT(*) FROM [Link]
GROUP BY LAST_NAME;

SELECT C.CUSTOMER_ID, C.FIRST_NAME, C.LAST_NAME, SUM([Link])


FROM [Link] P INNER JOIN [Link] C ON (C.CUSTOMER_ID =
P.CUSTOMER_ID)
GROUP BY 1,2,3;

/*EXCERCISES*/
SELECT* FROM [Link] R;/*Consulta la tabla rental de la base de
datos sakila.*/

SELECT MAX(RENTAL_DATE), CUSTOMER_ID FROM [Link] GROUP BY


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

/
*########################################################################
#########################################################################
#############################*/
/*HAVING*/
SELECT AMOUNT, COUNT(*) FROM [Link]
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 [Link]
GROUP BY LAST_NAME
HAVING COUNT(*) > 3;

SELECT C.CUSTOMER_ID, C.LAST_NAME, C.FIRST_NAME, SUM([Link])


FROM [Link] P
INNER JOIN [Link] C ON (P.CUSTOMER_ID = C.CUSTOMER_ID)
GROUP BY 1,2,3
HAVING SUM([Link]) < 60
ORDER BY SUM([Link]) DESC;

/*EXERCISES*/
SELECT LAST_NAME, COUNT(*) FROM [Link]
GROUP BY LAST_NAME; /*Realiza un COUNT de last_name*/

SELECT LAST_NAME, COUNT(*) FROM [Link]


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 [Link];

SELECT CITY, CHAR_LENGTH(CITY) AS LONGITUDCIUDAD


FROM [Link];

/*CONCAT*/
SELECT*, CONCAT(FIRST_NAME, ' ',LAST_NAME) AS NOMBRE_COMPLETO FROM
[Link];

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


[Link]; /*CONCATENACION CON MUCHAS COLUMNAS*/

/*ROUND*/
SELECT*, ROUND(AMOUNT, 0) FROM [Link]; /*REDONDEAR VALORES
NUMERICOS*/

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


SELECT*, LCASE(CONCAT(FIRST_NAME, "", LAST_NAME)) AS "NOMBRE COMPLETO"
FROM [Link]; /*MINUSCULAS*/

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


FROM [Link]; /*MAYUSCULAS*/

/*EXERCISES*/
SELECT EMAIL, CHAR_LENGTH(EMAIL) FROM [Link];/*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 [Link];


/*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 [Link]


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 [Link] AS CIUDAD;/*Usa la función UCASE()


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

/
*########################################################################
#########################################################################
#############################*/
/*CASE*/
SELECT* FROM [Link];

SELECT ADDRESS, ADDRESS2,


CASE
WHEN ADDRESS2 IS NULL THEN "SIN DIRECCION"
ELSE "CON DIRECCION"
END AS COMENTARIO
FROM [Link];

SELECT* FROM [Link];

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 [Link];

/*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 [Link];

/
*########################################################################
#########################################################################
#############################*/
/*SUBCONSULTAS*/
SELECT* FROM [Link];

SELECT TITLE FROM [Link]


WHERE TITLE LIKE 'K%' OR TITLE LIKE 'Q%'
AND TITLE IN (SELECT TITLE FROM [Link] WHERE LANGUAGE_ID IN
(SELECT
LANGUAGE_ID FROM [Link] WHERE NAME = 'English'));

SELECT* FROM [Link];

SELECT FIRST_NAME, LAST_NAME


FROM [Link]
WHERE ACTOR_ID IN (SELECT ACTOR_ID FROM SAKILA.FILM_ACTOR WHERE FILM_ID
IN
(
SELECT FILM_ID FROM [Link] WHERE TITLE = 'Alone Trip'));

SELECT TITLE FROM [Link]


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

(SELECT CATEGORY_ID FROM [Link] WHERE NAME = 'Family'));

/*EXERCISES*/
/*FILM,FILM_CATEGORY, CUSTOMER, RENTAL*/
/*SELECT FIRST_NAME, LAST_NAME, EMAIL
FROM [Link]
WHERE CUSTOMER_ID IN (SELECT CUSTOMER_ID FROM [Link] 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 [Link],SUM([Link])
FROM [Link] C
INNER JOIN SAKILA.FILM_CATEGORY FC
ON (C.CATEGORY_ID = FC.CATEGORY_ID)
INNER JOIN [Link] I
ON (FC.FILM_ID = I.INVENTORY_ID)
INNER JOIN [Link] R
ON (I.INVENTORY_ID = R.INVENTORY_ID)
INNER JOIN [Link] P
ON (R.RENTAL_ID = P.RENTAL_ID)
GROUP BY [Link]
ORDER BY SUM([Link]) DESC LIMIT 5;

SELECT* FROM INGRESOS_POR_GENERO;

/*arreglar vista que no funciona*/

You might also like