Найти тему
JavAKnazzz

SQL --- заметки

Оглавление

Базовый синтаксис:

1. Выбрать весь столбец из таблицы без фильтрации

SELECT name FROM passenger

2. Выбрать столбец с фильтрацией

SELECT * ---> выбрать всё
FROM trip ---> откуда
WHERE town_from = 'Moscow' ---> критерий фильтрации

3. Вывести имена людей, которые заканчиваются на "man"

SELECT name
FROM passenger
WHERE name LIKE '%man' ---> символ % означает любую последовательность символов, а "man" - конкретную последовательность символов. Таким образом, данное условие выберет все значения в столбце name, которые заканчиваются на "man".

4. Вывести количество рейсов, совершенных на TU-134

SELECT COUNT(plane) AS count
FROM trip
WHERE plane = 'TU-134'

---> COUNT(plane) - это функция, которая подсчитывает количество строк, в которых значение в столбце plane не равно NULL.

5. Какие компании совершали перелеты на Boeing

SELECT DISTINCT name
FROM company c
JOIN trip t ON t.company = c.id
WHERE t.plane = 'Boeing'

---> SELECT DISTINCT name - выбирает уникальные значения из столбца name.
--->FROM company c - указывает, что данные будут выбираться из таблицы company и используется псевдоним c для этой таблицы.
---> JOIN trip t ON t.company = c.id - объединяет таблицу trip с таблицей company по условию, что значение в столбце company таблицы trip равно значению в столбце id таблицы company.
---> WHERE t.plane = 'Boeing' - фильтрует строки, выбирая только те, в которых значение в столбце plane таблицы trip равно 'Boeing'.

6. В какие города можно улететь из Парижа (Paris) и сколько времени это займёт?

SELECT town_to,
TIMEDIFF(time_in, time_out) AS flight_time
FROM trip
WHERE town_from = 'Paris'

---> TIMEDIFF(time_in, time_out) as flight_time - вычисляет разницу между значениями в столбцах time_in и time_out и называет полученный столбец flight_time.

7. Вывести вылеты, совершенные с 10 ч. по 14 ч. 1 января 1900 г.

SELECT *
FROM trip
WHERE time_out BETWEEN '1900-01-01T10:00:00' AND '1900-01-01T14:00:00'

8. Выведите пассажиров с самым длинным ФИО. Пробелы, дефисы и точки считаются частью имени.

SELECT name
FROM passenger
WHERE LENGTH(name) = (
SELECT MAX(LENGTH(name))
FROM passenger
);

9. Вывести id и количество пассажиров для всех прошедших полётов

SELECT trip,
COUNT(passenger) AS count
FROM Pass_in_trip
GROUP BY trip;

10. Вывести имена людей, у которых есть полный тёзка среди пассажиров

SELECT name
FROM passenger
GROUP BY name
HAVING COUNT(name) > 1;

---> GROUP BY name: группирует результаты по значению в столбце "name"
---> HAVING COUNT(name) > 1: фильтрует результаты и выводит только те строки, у которых количество повторяющихся значений в столбце "name" больше 1

11. Вывести отсортированный по количеству перелетов (по убыванию) и имени (по возрастанию) список пассажиров, совершивших хотя бы 1 полет.

SELECT name, COUNT(*) AS count
FROM Passenger
JOIN Pass_in_trip
ON Passenger.id = Pass_in_trip.passenger
GROUP BY passenger
HAVING COUNT(trip) > 0
ORDER BY COUNT(trip) DESC, name;