# Pasirinkti filmo, kurio id yra 10 nuomos detales (title, rental_rate, rental_date, return_date, inventory_id):
SELECT f.`title` AS 'Filmo pavadinimas', f.`rental_rate` AS 'Nuomos reitingas',
r.`rental_date` AS 'Isnuomavimo pradzia', r.`return_date` AS 'Grazinimo data',
r.`inventory_id` AS 'Inventoriaus Nr'
FROM `film` f INNER JOIN `inventory` i
ON f.`film_id` = i.`film_id`
INNER JOIN `rental` r
ON i.`inventory_id` = r.`inventory_id`
where f.film_id = 10;
# Kiek aktorių yra aktorių lentelėje:
SELECT COUNT(`actor_id`) AS 'Is viso aktoriu' FROM `actor`;
# Kurie filmai nebuvo grąžinti:
SELECT f.`title`, r.`return_date` FROM `film` f
INNER JOIN `inventory` i
ON f.`film_id` = i.`film_id`
INNER JOIN `rental` r
ON i.`inventory_id` = r.`inventory_id`
WHERE r.`return_date` IS NULL;
# Išrinkti nuomininkų vardus ir pavardes, kurie nuomojosi 35 ir daugiau filmų:
SELECT CONCAT(c.`first_name`, ' ', c.`last_name`) AS 'Nuomininkas', COUNT(r.`customer_id`) AS 'Isnuomotu filmu skaicius'
FROM `customer` c
INNER JOIN `rental` r
ON c.customer_id = r.customer_id
#GROUP BY c.`first_name` ASC
GROUP BY r.`customer_id` ASC
HAVING COUNT(r.`customer_id`) >=35
# Išrinkti filmus (pavadinimas, data), išnuomotus po x datos:
SELECT f.`title` AS 'Filmo pavadinimas', r.`rental_date` AS 'Issinuomojimo data'
FROM `film` f
INNER JOIN `inventory` i
ON f.`film_id` = i.`film_id`
INNER JOIN `rental` r
ON i.`inventory_id` = r.`inventory_id`
WHERE r.`rental_date` >= '2006-01-01'
ORDER BY r.`rental_date` DESC;
# Išrinkti 10 populiariausių filmų pagal nuomą (filmo pavadinimas, išnuomojimų skaičius):
SELECT f.`title` AS 'Filmo pavadinimas', COUNT(r.`rental_id`) AS 'Issinuomojimu skaicius'
FROM `film` f
INNER JOIN `inventory` i
ON f.`film_id` = i.`film_id`
INNER JOIN `rental` r
ON i.`inventory_id` = r.`inventory_id`
WHERE r.`rental_date` IS NOT NULL
GROUP BY f.`film_id`, f.`title`
ORDER BY COUNT(r.`rental_id`) DESC
LIMIT 10;
# Kokia vidutinė nuomos trukmė:
SELECT AVG(TIMESTAMPDIFF(HOUR, `rental_date`, `return_date`)) AS 'Vidutine nuomos trukme'
FROM `rental`;
SELECT AVG(TIMESTAMPDIFF(HOUR, `rental_date`, `return_date`)) AS 'Vidutine nuomos trukme'
FROM `rental`
WHERE `inventory_id` = 7;
# 10 daugiausiai pinigų išleidusių nuomininkų ir kiek jie išleido:
SELECT c.`first_name`, c.`last_name`, SUM(p.`amount`)
FROM `customer` c
INNER JOIN `payment` p
ON c.`customer_id` = p.`customer_id`
GROUP BY c.`customer_id`, c.`first_name`
ORDER BY SUM(p.`amount`) DESC
LIMIT 10;
# Kurie 3 aktoriai suvaidino daugiausiai filmuose vaidmenų:
SELECT CONCAT(a.`first_name`, ' ', a.`last_name`) AS 'Aktorius', COUNT(f.`film_id`) AS 'Suvaidino vaidmenu'
FROM `actor` a
INNER JOIN `film_actor` fa
ON a.`actor_id` = fa.`actor_id`
INNER JOIN `film` f
ON fa.`film_id` = f.`film_id`
GROUP BY a.`actor_id`
ORDER BY COUNT(f.`film_id`) DESC
LIMIT 3;
#Ar iš nuomos parduotuvės nr 2 galima išsinuomoti šiuo metu filmą ACADEMY DINOSAUR:
select f.`title` AS 'Filmo pavadinimas', r.`return_date` AS 'Grazinimo data'
FROM `film` f INNER JOIN inventory i
ON f.`film_id` = i.`film_id`
INNER JOIN `rental` r
ON i.`inventory_id` = r.`inventory_id`
WHERE f.`title` = 'ACADEMY DINOSAUR'
AND i.`store_id` = '2'
AND r.`rental_date` IS NOT NULL
AND r.`return_date` IS NULL;
(Jeigu grąžina null, vadinasi filmas negrįžęs ir jo išnuomoti negalima)
#Atvaizduoti ir suskaičiuoti pasikartojančias pavardes:
SELECT `last_name` as 'Pavarde', COUNT(`last_name`) AS 'Pavardziu skaicius'
FROM `actor`
GROUP BY `last_name`
ORDER BY COUNT(`last_name`) DESC;
#Kiek įrašų yra actor lentelėje:
select count(*) as 'Is viso irasu' from actor;
#Parodyti aktorius su skirtingomis pavardėmis:
select distinct last_name as 'Pavarde' from actor;
#Parodyti aktorių vardus ir pavardes bet filtruojant tik aktorius su skirtingomis pavardėmis:
SELECT first_name as 'Vardas', last_name as 'Pavarde'
FROM actor
where last_name IN (
select last_name
from actor
group by last_name
having count(*) = 1
);
#Kiek aktorių yra su skirtingomis pavardėmis:
select count(distinct last_name) as 'Nepasikartojanciu pavardziu skaicius' from actor;
#Atvaizduoti address lentelės 10 įrašų, pagal district:
select * from address
order by district
limit 10;
#Atvaizduoti address lentelę:
select * from address;
#Kiek yra address lentelėje eilučių:
select count(*) as 'Eiluciu skaicius' from address;
#Atvaizduoti skirtingus district:
select distinct district from address;
#Suskaičiuoti kiek yra skirtingų district:
select count(distinct district) as 'Skirtingi district' from address;
#Atvaizduoti address ir district tik su 1 kartą pasikartojan2iu district pavadinimu:
select address, district
from address
where district in (
select district
from address
group by district
having count(*) = 1
);
#Atvaizduoti name, last_update category lentelės tik su unikaliomis name reikšmėmis:
select name, last_update
from category
where name in(
select name
from category
group by name
having count(*) = 1
);
#Atvaizduoti trumpiausią, ilgiausią, vidutinio ilgio filmą:
select avg(length) from film;
select min(length) from film;
select max(length) from film;
#Atvaizduoti min ir max + filmo pavadinimas (avg skaičiuoja vidurkį, todėl tikėtina, kad užklausa nieko negrąžins):
select title as 'Pavadinimas', length as 'Max ilgis' from film
where length = (select max(length) from film);
select title, length from film
where length = (select min(length) from film);
#Išvesti filmo pavadinimą, kategoriją ir jo trukmę (filmo ilgį) mažėjančia tvarka pagal trukmę:
select f.title, c.name, f.length
from film f
inner join film_category fc
on f.film_id = fc.film_id
inner join category c
on fc.category_id = c.category_id
order by f.length DESC;
#Išvesti payments tam tikrai datai (vasario mėn):
select * from payment where payment_date like '%02-%';
#Išrinkti kokiai sumai kiekvienas darbuotojas (staff) 2005 m. liepos mėn. išnuomavo filmų:
select st.first_name, st.last_name, p.payment_date, p.amount from staff st
inner join payment p
on st.staff_id = p.staff_id
where p.payment_date like '2005-07%'
order by p.amount;
#Išrinkti ir susumuoti kokiai sumai kiekvienas darbuotojas (staff) 2005 m. liepos mėn. išnuomavo filmų:
select st.first_name, st.last_name, sum(p.amount) as total_amount
from staff st
inner join payment p
on st.staff_id = p.staff_id
where p.payment_date like '2005-07%'
group by st.staff_id, st.first_name, st.last_name
order by total_amount desc, st.first_name;
#Išrinkti aktorius kurių vardas yra Victor, Adam, John naudojant in:
select * from actor where first_name in ('albert', 'adam', 'john');
#Išrinkti 5 daugiausiai uždirbusias filmų kategorijas, rikiuoti mažėjančia tvarka:
select c.name, sum(p.amount) as total_amount
from category c
join film_category fc
on c.category_id = fc.category_id
join film f
on fc.film_id = f.film_id
join inventory i
on f.film_id = i.film_id
join rental r
on i.inventory_id = r.inventory_id
join payment p
on r.rental_id = p.rental_id
group by c.name
order by total_amount desc
Limit 5;
#Kiek parduotuvės uždirbo iš nuomos, išvesti duomenis mažėjančia tvarka pagal sumą:
select s.store_id as store, sum(p.amount) as amount
from store s
join inventory i
on s.store_id = i.store_id
join rental r
on i.inventory_id = r.inventory_id
join payment p
on r.rental_id = p.rental_id
group by store
order by amount desc;
#Išvesti aktoriaus vardą ir pavardę viename langelyje ir pavaizduoti didžiosiomis raidėmis rikiuojant pagal vardą/pavardę:
select upper(concat(first_name, ' ', last_name)) as 'Actors' from actor
order by last_name;
select actor_id, first_name, last_name from actor
where last_name like '%LL%'
order by last_name, first_name;
#Išvesti aktorių id, vardą ir pavardę kurių pavardėje yra dviguma L ('LL') + išrikiuoti pagal vardą/pavardę:
select actor_id, first_name, last_name from actor
where last_name like '%LL%';
#Panaudojant IN išrinkti pasirinktas šalis:
select country_id, country from country
where country in ('Afghanistan', 'Bangladesh', 'China');
#Redaguoti lentelės kolonas: po country įterpti "language":
alter table country add language varchar(45) after country;
# Pakeisti varchar(45) į varchar(90):
alter table country modify column language varchar(90);
#Ištrinti language stulpelį:
alter table country drop column language;
#Išvesti ir suskaičiuoti pasikartojančias pavardes iš aktorių lentelės mažėjančia tvarka:
select last_name as Pavarde, count(last_name) as Skaicius from actor
group by last_name
order by Skaicius desc;
#Išvesti aktorių pavardes, kurios pasikartoja 3 ir daugiau kartų:
select last_name as Pavarde, count(last_name) as Skaicius from actor
group by Pavarde
having Skaicius > 3;
#Pakeisti aktoriaus ELVIS MARX pavardę į PRESLEY:
update actor set last_name ='PRESLEY' where actor_id = 22;
#'payment' lentelės sukūrimo užklausa:
show create table payment;
#Atvaizduoti address lentelės 10 įrašų, pagal district:
select * from address
order by district
limit 10;
#Išvesti staff vardus, pavardes ir adresus:
#select s.first_name, s.last_name, a.address from staff s
join address a
on s.address_id = a.address_id;
#Išvesti filmų sąrašą ir prie kiekvieno filmo pateikti jame vaidinusių aktorių skaičių:
select f.title as film, count(fa.actor_id) as amount from film f
join film_actor fa
on f.film_id = fa.film_id
group by film
order by amount desc;
#Kiek inventoriaus sandėlyje yra 'Hunchback Impossible' kopijų:
select f.title as title, count(i.film_id) as amount from film f
join inventory i
on f.film_id = i.film_id
where title = 'Hunchback Impossible'
group by title
order by amount desc;