Загрузка данных
-- =========================================================================
-- ПРАКТИЧЕСКАЯ РАБОТА №2: ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ
-- =========================================================================
-- 1. Найти ФИО и телефон владельца автомобиля с госномером «С540УХ50».
SELECT o.last_name, o.first_name, o.patronymic, o.phone
FROM owners o
JOIN Avtomobili a ON a.ID_Vladeltsa = o.id_owner
WHERE a.Gosnomer = 'С540УХ50';
-- 2. Найти владельца с наибольшим количеством машин (ФИО + количество).
SELECT o.last_name, o.first_name, o.patronymic, COUNT(a.ID_Avto) AS Kolichestvo_Mashin
FROM owners o
JOIN Avtomobili a ON a.ID_Vladeltsa = o.id_owner
GROUP BY o.id_owner, o.last_name, o.first_name, o.patronymic
ORDER BY Kolichestvo_Mashin DESC
LIMIT 1;
-- 3. Вывести список машин BMW вместе с ФИО и телефоном владельца.
SELECT a.Marka, a.Model, a.Gosnomer, o.last_name, o.first_name, o.patronymic, o.phone
FROM Avtomobili a
JOIN owners o ON a.ID_Vladeltsa = o.id_owner
WHERE a.Marka = 'BMW';
-- 4. Найти всех владельцев, чья фамилия начинается на «С».
SELECT *
FROM owners
WHERE last_name LIKE 'С%';
-- 5. Изменить примечание владельца с ID_Vladeltsa = 6 на «Постоянный клиент».
-- (В таблице owners первичный ключ называется id_owner)
UPDATE owners
SET note = 'Постоянный клиент'
WHERE id_owner = 6;
-- 6. Добавьте нового владельца и сразу новую машину на него.
-- Шаг А: Добавляем нового человека (id_owner сгенерируется автоматически, например 126)
INSERT INTO owners (last_name, first_name, patronymic, phone, note)
VALUES ('Кузнецов', 'Алексей', 'Павлович', '+7(999)123-45-67', 'Новый клиент');
-- Шаг Б: Добавляем машину, привязывая её к LAST_INSERT_ID() — эта функция автоматически
-- подставит ID только что созданного владельца Кузнецова.
INSERT INTO Avtomobili (ID_Vladeltsa, Marka, Model, Gosnomer, Tip_kuzova)
VALUES (LAST_INSERT_ID(), 'Audi', 'A6', 'Х777ХХ77', 'Седан');
-- 7. Найдите всех владельцев с примечанием "Обычный клиент".
SELECT *
FROM owners
WHERE note = 'Обычный клиент';
-- 8. Выведите ФИО владельца и все его машины для владельца с id_owner = 12.
SELECT o.last_name, o.first_name, o.patronymic, a.Marka, a.Model, a.Gosnomer
FROM owners o
JOIN Avtomobili a ON a.ID_Vladeltsa = o.id_owner
WHERE o.id_owner = 12;
-- 9. Найдите владельцев, у которых в базе указано более одной машины, но нет отметки VIP.
SELECT o.last_name, o.first_name, o.patronymic, COUNT(a.ID_Avto) AS Kolichestvo_Mashin
FROM owners o
JOIN Avtomobili a ON a.ID_Vladeltsa = o.id_owner
WHERE o.note NOT LIKE '%VIP%' OR o.note IS NULL
GROUP BY o.id_owner, o.last_name, o.first_name, o.patronymic
HAVING COUNT(a.ID_Avto) > 1;
-- 10. Найдите владельца с самой большой фамилией (по количеству букв).
-- Используем функцию LENGTH (или CHAR_LENGTH) для подсчета символов
SELECT *, CHAR_LENGTH(last_name) AS Dlina_Familii
FROM owners
ORDER BY Dlina_Familii DESC
LIMIT 1;
-- 11. Выведите список владельцев, отсортированный по фамилии в алфавитном порядке.
SELECT *
FROM owners
ORDER BY last_name ASC;
-- 12. 52 владелец сменил номер телефона на +7(952)999-99-99. Обновите данные.
UPDATE owners
SET phone = '+7(952)999-99-99'
WHERE id_owner = 52;
-- 13. Найдите, есть ли в таблице owners владельцы без единой машины (используйте LEFT JOIN).
SELECT o.*
FROM owners o
LEFT JOIN Avtomobili a ON a.ID_Vladeltsa = o.id_owner
WHERE a.ID_Avto IS NULL;
-- 14. Какая машина у Сикирской, вывести фио и машину.
SELECT o.last_name, o.first_name, o.patronymic, a.Marka, a.Model, a.Gosnomer
FROM owners o
JOIN Avtomobili a ON a.ID_Vladeltsa = o.id_owner
WHERE o.last_name = 'Сикирская';
-- 15. Выведите фио людей которые владеют Toyota.
SELECT DISTINCT o.last_name, o.first_name, o.patronymic
FROM owners o
JOIN Avtomobili a ON a.ID_Vladeltsa = o.id_owner
WHERE a.Marka = 'Toyota';
-- 16. Егорова забыла Госномер и модель своей машины, но помнит, что это был ВАЗ, помогите ей найти машину.
SELECT o.last_name, o.first_name, a.Marka, a.Model, a.Gosnomer
FROM owners o
JOIN Avtomobili a ON a.ID_Vladeltsa = o.id_owner
WHERE o.last_name = 'Егорова' AND a.Marka LIKE '%ВАЗ%';
-- 17. Найдите владельца внедорожника и выведите его Имя, отчество и номер телефона.
SELECT o.first_name, o.patronymic, o.phone, a.Marka, a.Model, a.Tip_kuzova
FROM owners o
JOIN Avtomobili a ON a.ID_Vladeltsa = o.id_owner
WHERE a.Tip_kuzova = 'Внедорожник';
-- 18. Добропорядочный гражданин ищет продавщицу Соляриса по имени Анна. Найти её айди, телефон, машину и госномер.
SELECT o.id_owner, o.phone, a.Marka, a.Model, a.Gosnomer
FROM owners o
JOIN Avtomobili a ON a.ID_Vladeltsa = o.id_owner
WHERE o.first_name = 'Анна' AND a.Model = 'Solaris';