edycja 1. Warszawa 2015
http://goo.gl/iASZ9g
Rozszerzenie
--CONCAT() funkcja sklejająca napisy
SELECT CONCAT('Hello',' ','World!');
SELECT CONCAT(first_name,' ',last_name) FROM actor;
--NOW() zwraca aktualny czas
SELECT NOW();
--SUBSTR() wycinanie napisu z napisu
SELECT SUBSTR('abcdefghijklmnzopqrstuvwxyz',1,8);
SELECT SUBSTR(first_name,1,1), SUBSTR(last_name,1,1)
FROM actor;
--DATE_ADD() do manipulacji datami
SELECT DATE_ADD(NOW(), INTERVAL 1 QUARTER);
SELECT last_update, DATE_ADD(last_update, INTERVAL -1 DAY)
FROM film;1. Napisz zapytanie, które zwróci inicjały aktorów jako jednokolumnowy rezultat
Przypomnienie
Lista różnych dat wydań filmów
SELECT DISTINCT
release_year
FROM film;Lista ratingów filmów
SELECT DISTINCT
rating
FROM film;2. Napisz listę imion aktorów, które pojawiają się w opisach jakichkolwiek filmów zawartych w bazie.
Potem dla porównania popraw zapytanie tak, żeby zwracało tylko unikalne imiona.
SELECT
SUM(amount)
FROM payment;Suma wszystkich płatności
SELECT
MIN(amount),
AVG(amount),
MAX(amount)
FROM payment;Najmniejsza, średnia, największa kwota
SELECT
MIN(city),
MAX(city)
FROM city ci
INNER JOIN country co
ON ci.country_id = co.country_id
AND co.country = 'Myanmar';Alfabetycznie pierwsze i ostatnie miasto w Myanmarze
SELECT
COUNT(city),
COUNT(DISTINCT city)
FROM city;Lista miast i unikalnych nazw miast
SELECT
COUNT(null),
COUNT(*),
COUNT(1),
COUNT(DISTINCT last_name)
FROM actor;Liczba aktorów i unikalnych nazwisk
3. Na dwa różne sposoby policz średnią płatność dla pracownika o imieniu 'Mike'
SELECT DISTINCT
rating, rental_rate
FROM film
ORDER BY rating, rental_rate;
-----------------------------
SELECT
rating, rental_rate
FROM film
GROUP BY rating, rental_rate
ORDER BY rating, rental_rate;SELECT
staff_id,
SUM(amount)
FROM payment
GROUP BY staff_id;Suma kwot płatności
przyjętych przez
poszczególnych
pracowników
SELECT
rating,
AVG(rental_rate)
FROM film
WHERE rating > 'P'
GROUP BY
rental_duration,
rating
ORDER BY rating;Średnia stawka wypożyczenia filmu o ratingu 'P', 'PG-13', 'R' dla ratingu i długości wypoyczenia
SELECT
last_name,
COUNT(1)
FROM actor
GROUP BY
last_name
ORDER BY 2 desc;Nazwiska aktorów z liczbą wystąpień, posortowane od najczęstszych
4*. Napisz zapytanie zwracające poniższy wynik.
Dwie widoczne wartości liczbowe to średnia płatności przypisanych do Jona i Mike'a
(albo ma ktoś pomysł, albo praca domowa)
SELECT
staff_id,
SUM(amount)
FROM payment
GROUP BY staff_id
HAVING SUM(amount) > 33500;Lista pracowników i suma kwot wypożyczeń dla pracowników o sumie > 33500
SELECT rating,
MIN(rental_rate) AS `min`,
MAX(rental_rate) AS `max`,
COUNT(DISTINCT rental_rate) AS rates
FROM film
WHERE rating in ('PG','PG-13','R')
AND rental_rate > 0.99
GROUP BY rating
HAVING AVG(length) > 114;SELECT last_name
FROM actor
GROUP BY last_name
HAVING COUNT(1) > 1
ORDER BY last_name, COUNT(1) DESC5. Napisz zapytanie, które wylistuje jedyną nieunikalną nazwę miasta jaka jest w zbiorze.
*Potem spróbuj napisać zapytanie, które wypisze to miasto, a następnie - jeżeli leżą one w różnych krajach - wypisze dwa z nich.
CASE
WHEN ... THEN ...
WHEN ... THEN ...
ELSE ...
ENDSELECT title, CASE
WHEN length > 60 THEN 'Długometrażowy'
WHEN length <= 60 THEN 'Krótkometrażowy'
ELSE 'Brak danych' END as `Typ filmu`
FROM film
ORDER BY CASE
WHEN length <= 60 THEN 0
WHEN length > 60 THEN 1
ELSE 2 END, titleCzemu nie użyłem `length` w sortowaniu?
6. W Stanach Zjednoczonych (w bazie - 'United States') adresy ulic kończą się z reguły rodzajem ulic - ostatnie słowo to np. 'Avenue' albo 'Street'.
6cd. Napisz zapytanie które odfiltruje adresy położone w USA, następnie: