Category: MySQL

  • Sakila MySQL skaičiavimų ir lentelių jungimo užklausos

    Sakila MySQL skaičiavimų ir lentelių jungimo užklausos

    # 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;
  • Sakila elementariausios užklausos

    Sakila elementariausios užklausos

    # Pasirinkite aktoriaus vardą ir pavardę:
    
    SELECT `first_name` AS 'First Name', `last_name` AS 'Last Name' 
    FROM `actor`;

    Lentelės ir stulpelių pavadinimus dėl saugumo rekomenduotina rašyti `backtick’uose`.

    # Pasirinkite aktoriaus vardą ir pavardę, atvaizduoti didžiosiomis raidėmis viename stulpelyje:
    
    SELECT UPPER(CONCAT(`first_name`, ' ', `last_name`)) AS 'Vardas ir Pavarde' 
    FROM `actor`;
    # Pasirinkite aktoriaus 'Ray' vardą ir pavardę, atvaizduoti didžiosiomis raidėmis viename stulpelyje:
     
    SELECT UPPER(CONCAT(`first_name`, ' ', `last_name`)) AS 'Vardas ir Pavarde' 
    FROM `actor` 
    WHERE `first_name` = 'Ray';
    # Pasirinkite aktoriaus vardą ir pavardę, atvaizduoti tas pavardes, kuriose viena greta kitos yra raidės 'ER':
     
    SELECT `first_name` AS 'Vardas', `last_name` AS 'Pavarde' 
    FROM `actor` 
    WHERE `last_name` LIKE '%er%';
    # Pasirinkite aktoriaus vardą ir pavardę, atvaizduoti mažosiomis raidėmis viename stulpelyje  ir kurių pavardė bigiasi 'ON':
    
    SELECT LOWER(CONCAT(`first_name`, ' ', `last_name`)) AS 'Vardas ir Pavarde' 
    FROM `actor` 
    WHERE `last_name` LIKE '%on';
    # Pasirinkti Aktoriaus vardą ir pavardę, kai aktoriaus vardas yra 'Angela':
    
    SELECT `first_name`, `last_name` 
    FROM `actor` 
    WHERE `first_name` = 'angela';
    # Suskaičiuoti kiek yra aktorių su skirtingomis pavardėmis:
    
    SELECT count(distinct `last_name`) AS 'Aktoriu skaicius su skirtingomis pavardemis'
    FROM `actor`;
    
    #arba:
    
    SELECT COUNT(DISTINCT `last_name`) 
    as 'Aktoriu skaicius su skirtingomis pavardemis' 
    FROM `actor` 
    WHERE `last_name` IS NOT NULL;
    # Pasirinkti aktorių vardus ir pavardes, kurių pavardės nesikartoja
    
    SELECT distinct `first_name` AS 'Vardas', `last_name` AS 'Pavarde' 
    FROM `actor`
    GROUP BY `last_name`;
    # Pasirinkti aktorių pavardes, kurios kartojasi, ir kiek kartų jos pasikartoja:
    
    SELECT `last_name` AS 'Pavarde', COUNT(`last_name`) AS 'Kartojasi' FROM `actor`
    GROUP BY `last_name`
    HAVING COUNT(`last_name`) > 1;
    # Pasirinkti viską iš film lentelės
    
    SELECT * FROM `film`;
    # Pasirinkti skirtingus rating įrašus:
    
    SELECT DISTINCT `rating` AS 'Rating'
    FROM `film`;
    # Pasirinkti pirmus 10 įrašų iš film lentelės:
    
    SELECT * FROM `film`
    LIMIT 10;
    # Pasirinkti visus filmus su reitingu pg-13:
    
    SELECT * FROM `film`
    WHERE `rating` = 'pg-13';
    # Kiek filmų yra film lentelėje:
    
    SELECT COUNT(`film_id`) as 'Is viso fimu' 
    FROM `film`;
    # Pasirinkti filmus, išlesitus 2006 metas ir vėliau:
    
    SELECT `title` AS 'Filmo pavadinimas', `release_year` AS 'Gamybos metai'
    FROM `film`
    WHERE `release_year` >= '2005';
    # Pasirinkti viską iš rental lentelės:
    
    SELECT * FROM `rental`;
    # Pasirinkti filmus iš film lentelės, kurių pavadinime yra žodis love:
    
    SELECT * FROM `film`
    WHERE `title` like '%love%';
  • Sakila, MySQL Workbench, MySQL

    Sakila, MySQL Workbench, MySQL

    Sakila Duomenų bazė: https://dev.mysql.com/doc/index-other.html

    MySQL Workbench: https://dev.mysql.com/downloads/workbench/

    MySQL Server: https://dev.mysql.com/downloads/, bet jeigu bus naudojamas pvz. XAMPP ar Laragon – MySQL serverio diegti nereikia.

    Duomenų bazei anksčiau dėl specifinės situacijos naudojau XAMPP, tačiau šiuo metu Windows aplinkoje sėkmingai naudoju Laragon:

    Laragon