Загрузка данных


-- =========================================================================
-- ПРАКТИЧЕСКАЯ РАБОТА №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';