ORDER BY
ORDER BY сортирует результаты запроса по одному или нескольким столбцам. По умолчанию сортировка идёт по возрастанию (ASC); для сортировки по убыванию используется DESC.
ORDER BY, LIMIT/OFFSET, агрегаты, GROUP BY, HAVING, JOIN, UNION.hr: WHERE, LIKE, CASE, AVG.world: JOIN + фильтр IsOfficial = 'T'; больше всего строк — у стран с языками.Airlines: GROUP BY, JOIN для билетов, сортировка по агрегату.ORDER BY сортирует результаты запроса по одному или нескольким столбцам. По умолчанию сортировка идёт по возрастанию (ASC); для сортировки по убыванию используется DESC.
LIMIT ограничивает количество возвращаемых строк, OFFSET пропускает указанное число строк. Вторая страница из 20 строк: LIMIT 20 OFFSET 20.
COUNT, SUM, AVG, MIN, MAX. Функция AVG() игнорирует NULL при вычислении среднего.
GROUP BY группирует строки с одинаковыми значениями в указанных столбцах. В SELECT можно выводить только группируемые столбцы и результаты агрегирующих функций.
WHERE фильтрует строки до группировки; HAVING фильтрует группы после агрегации. HAVING без GROUP BY допустим, но используется редко — он фильтрует единственную группу из всех строк.
Типы: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN. INNER JOIN возвращает только совпадающие строки из обеих таблиц; LEFT JOIN — все строки из левой таблицы и совпавшие из правой.
UNION удаляет дубликаты; UNION ALL сохраняет все строки. Объединяемые запросы должны иметь одинаковое количество столбцов и совместимые типы данных.
SELECT *
FROM employees
WHERE department_id = 90;
SELECT first_name, last_name, salary
FROM employees
WHERE salary > 5000;
SELECT first_name, last_name
FROM employees
WHERE last_name LIKE 'L%';
SELECT first_name, last_name, salary,
CASE
WHEN salary > 10000 THEN 1
ELSE 0
END AS salary_group
FROM employees;
SELECT AVG(salary) AS avg_salary
FROM employees
WHERE salary < 10000;
SELECT country.Name AS country_name, city.Name AS capital
FROM country
JOIN city ON country.Capital = city.ID;
SELECT country.Name AS country_name, countrylanguage.Language
FROM country
JOIN countrylanguage ON country.Code = countrylanguage.CountryCode;
SELECT country.Name AS country_name, countrylanguage.Language
FROM country
JOIN countrylanguage ON country.Code = countrylanguage.CountryCode
WHERE countrylanguage.IsOfficial = 'T';
SELECT COUNT(*) FROM country JOIN city ON country.Capital = city.ID;
SELECT COUNT(*) FROM country JOIN countrylanguage ON country.Code = countrylanguage.CountryCode;
SELECT COUNT(*) FROM country JOIN countrylanguage ON country.Code = countrylanguage.CountryCode
WHERE countrylanguage.IsOfficial = 'T';
Больше всего строк будет во втором запросе, потому что одна страна может иметь много языков; меньше всего — в третьем, где остаются только официальные языки.
SELECT model, COUNT(*) AS aircraft_count
FROM aircraft
GROUP BY model;
SELECT plane, COUNT(*) AS trip_count
FROM trips
GROUP BY plane;
SELECT service_class, AVG(price) AS avg_price
FROM tickets
GROUP BY service_class;
SELECT trips.id, trips.trip_no, COUNT(tickets.id) AS ticket_count
FROM trips
JOIN tickets ON trips.id = tickets.trip_id
GROUP BY trips.id, trips.trip_no
ORDER BY ticket_count DESC;