Author: r15pdev
-
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
# 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 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:
-
PHP: Loop A Dice
Kad nereikėtų perkrauti puslapio, panaudojame cilklą (loop) for su sąlyga if() {}else{}
Cikle nustatome, kad “mesime” kauliuką 10 kartų.
Sąlygoje jeigu kauliukas lygus (==) ‘6’, išvedamas tekstas “You win!”, kitu atveju – “Better luck next time!”. Jeigu “iškrenta” kamuoliukas “6”, ciklas nutraukiamas (break).for ($count = 1; $count <=10; $count++){ $dice = rand(1, 6); echo '<p>Your dice is ' .$dice . '</p>'; if($dice == 6) { echo 'You win!'; break; } else { echo '<p>Better luck next time</p>'; } }
-
PHP: Loops
Loops naudojamas kai iš anksto žinome, kiek kartų reikės vykdyti tą patį kodą.
echo '<strong>First Loop example</strong><br>'; for($count = 1; $count <=100; $count++) { echo $count . ' '; } echo '<br><strong>Second Loop example</strong><br>'; for($count2 = 1; $count2 <=100; $count2 = $count2 + 10) { echo $count2 . ' '; }
- $count = 1; Čia kintamajam $count priskiriama reikšmė lygi 1 .
- $count <= 100; Tai sąlyga. Ji skaitoma taip: kartoti kodą iš naujo tol, kol $count reikšmė yra mažesnė arba lygi 100.
- $count++ Tai reiškia, kad kaskart kodui kartojantis iš naujo, counter’iui pridedama po 1.
- $count + 10 Tai reiškia, kad kaskart kodui kartojantis iš naujo, counter’iui pridedama po 10.
- echo $count . ‘ ‘; Tai išveda counter’io reikšmę, kuri atskiriama tarpu (‘ ‘).
-
PHP: Throw A Dice!
Šiame PHP skripte imituojamas kauliuko metimas. Sąlyga tokia: jeigu atsitiktinis skaičius yra ‘6’, į ekraną išvedamas: Jackpot! You’ve thrown a 6!
Visais kitais atvejais yra tikrinama sąlyga. Šiuo atveju kintamajam $dice priskirta reikšmė (6) ir kol ji nebus lygi (==) ‘6’, puslapis vis persikraus.
Puslapis persikrauna kas 3 sekundės: header(“Refresh:3”);echo '<strong>Throw A Dice!</strong><br><br>'; $dice = rand(1, 6); if ($dice == 6) { echo 'Jackpot!' . ' ' . "You've thrown a" . ' ' . $dice . '!'; }else{ header("Refresh:3"); echo 'Your number is'. ' ' . $dice . '!' . ' ' . 'Your browser will refresh after 3 sec. or you may do it manually!'; } echo '<br><br><a href="./dice.php">Refresh current page<a/>';
Tai PHP script pavyzdys. Čia panaudojama:
- echo – teksto / rezultato išvedimas.
- $dice = rand(1, 6); , kur $ žymi kintamąjį, rand(1, 6) – paduoda atsitiktinį skaičių apibrėžtame intervale.
- == – reikšmės sutampa;
- if() { } else { } – sąlyga.
- ‘ ‘ . ‘ ‘ – Sujungimas ( concatenation )