Advertisement
MaximTakkaTo

Untitled

Dec 12th, 2020
1,075
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 19.87 KB | None | 0 0
  1. USE Carsh
  2. GO
  3. --1) Запросы с выбором строк по условию
  4. --запрос с использованием операторов сравнения
  5. --Вывести информацию о тарифах, цена за час которых больше 60
  6. SELECT *
  7.  FROM Тариф
  8.  WHERE Цена_за_час > 60
  9. --запрос с использованием логического оператора AND
  10. --Вывести госномер и год выпуска автомобилей марки 'Volkswagen', модели 'Polo'
  11. SELECT Госномер, Год_выпуска
  12.  FROM Автомобиль
  13.  WHERE Марка = 'Volkswagen' AND Модель = 'Polo'
  14. --запрос с использованием логического оператора OR
  15. --Вывести госномер, марку, модель, год выпуска автомобилей марок 'Renault',
  16. --                                                               'Hyundai'
  17. SELECT Госномер, Марка, Модель, Год_выпуска
  18.  FROM Автомобиль
  19.  WHERE Марка = 'Renault' OR Марка = 'Hyundai'
  20. --запрос с использованием логического оператора NOT
  21. --Вывести названия тарифов, при использовании которых не предусмотрена страховка
  22. SELECT Название
  23.  FROM Тариф
  24.  WHERE NOT Страховка = 'Без страховки'
  25. --запрос на использование выражений над столбцами
  26. --Вывести названия тарифов и цену за час со скидкой в 20%
  27. SELECT Название, CAST(Цена_за_час * 0.8 AS int) AS [Цена за час со скидкой]
  28.  FROM Тариф
  29. --запрос с проверкой на принадлежность множеству
  30. --Вывыести информацию о поездках, совершенных на автомобилях с id 1, 2, 3
  31. SELECT *
  32.  FROM Поездка
  33.  WHERE Автомобиль IN (1, 2, 3)
  34. --запрос с проверкой на принадлежность диапазону значений
  35. --Вывести информацию о тарифах, цена за час которых не меньше 70 и не больше 120
  36. SELECT *
  37.  FROM Тариф
  38.  WHERE Цена_за_час BETWEEN 70 AND 120
  39. --запрос с проверкой на соответствие шаблону
  40. --Вывести госномер, марку, модель автомобилей, госномер которых начинается с 'О' или с 'У'
  41. SELECT Госномер, Марка, Модель
  42.  FROM Автомобиль
  43.  WHERE Госномер LIKE '[ОУ]%'
  44. --запрос с проверкой на неопределенное значение
  45. --Вывести названия тарифов, у которых отсутсвует описание
  46. SELECT Название
  47.  FROM Тариф
  48.  WHERE Описание IS NULl
  49. --2) Запросы на теоретико-множественные реляционные операции
  50. --запрос на объединение таблиц
  51. --Вывести ФИО клиентов, проживающих в Рязани или Санкт-Петербурге
  52. SELECT ФИО
  53.  FROM Клиент
  54.  WHERE Адрес LIKE 'г. Рязань,%'
  55. UNION
  56. SELECT ФИО
  57.  FROM Клиент
  58.  WHERE Адрес LIKE 'г. Санкт-Петербург,%'
  59. --запрос на пересечение таблиц
  60. --Вывести id клиентов, которые совершали поездки и на автомобиле с id = 3,
  61. --                                               и на автомобиле с id = 5
  62. SELECT Клиент
  63.  FROM Поездка
  64.  WHERE Автомобиль = 3
  65. INTERSECT
  66. SELECT Клиент
  67.  FROM Поездка
  68.  WHERE Автомобиль = 5
  69. --запрос на вычитание таблиц
  70. --Вывести id автомобилей, на которых не было совершено ни одной поездки
  71. SELECT id_Автомобиля
  72.  FROM Автомобиль
  73. EXCEPT
  74. SELECT Автомобиль
  75.  FROM Поездка
  76. --запрос с использованием декартового произведения
  77. --Вывести id_Поездки, ФИО и телефон клиента
  78. SELECT id_Поездки, ФИО, Телефон
  79.  FROM Клиент, Поездка
  80.  WHERE Клиент.id_Клиента = Поездка.Клиент
  81. --3) Многотабличные запросы
  82. --запрос с использованием соединения двух таблиц по равенству и условием отбора
  83. --Вывести ФИО клиентов, проживающих в Рязани
  84. --и id Автомобилей, на которых ими совершались поездки.
  85. SELECT ФИО, Автомобиль
  86.  FROM Клиент JOIN Поездка ON Клиент.id_Клиента = Поездка.Клиент
  87.  WHERE Адрес LIKE 'г. Рязань,%'
  88. --запрос с использованием соединения трех таблиц по равенству и условием отбора
  89. --Вывести id Поездки; ФИО клиента, фамилия, которого 'Шишкина';
  90. --марку и модель автомобиля, на котором им соверашалсь поездка,
  91. SELECT id_Поездки, ФИО, Марка, Модель
  92.  FROM Автомобиль JOIN (Клиент JOIN Поездка ON Клиент.id_Клиента = Поездка.Клиент) ON Автомобиль.id_Автомобиля = Автомобиль
  93.  WHERE ФИО LIKE 'Шишкина%'
  94. --запрос с использованием соединения по четырем таблицам
  95. --Вывести информацию о поездках: Название тарифа, страховка, Госномер автомобиля, ФИО клиента
  96. SELECT Название, Страховка, Госномер, Фио
  97.  FROM Тариф JOIN (Автомобиль JOIN (Клиент JOIN Поездка ON Клиент.id_Клиента = Поездка.Клиент) ON Автомобиль.id_Автомобиля = Автомобиль) ON Тариф.id_Тарифа = Тариф
  98. --запрос с использованием левого внешнего соединения
  99. --Вывести информацию о поездке: id_Поездки, госномер автомобиля
  100. SELECT id_Поездки, Госномер
  101.  FROM Поездка LEFT JOIN Автомобиль ON Автомобиль.id_Автомобиля = Поездка.Автомобиль
  102. --запрос на использование правого внешнего соединения
  103. --Вывести информацию о поездке: id_Поездки, номер ВУ клиента
  104. SELECT Номер_ВУ, id_Поездки
  105.  FROM Клиент RIGHT JOIN Поездка ON Поездка.Клиент = Клиент.id_Клиента
  106. --- запрос с использованием функции COUNT
  107. --Вывести ФИО клиента и количество, соверешенных им, поездок
  108. SELECT ФИО, COUNT (ФИО) AS [Совершенные поездки]
  109.  FROM Клиент JOIN Поездка ON Клиент.id_Клиента = Поездка.Клиент
  110.  GROUP BY ФИО
  111. --запрос с использованием функции SUM
  112. --Вывести Марку автомобиля и количество часов поездок, совершенных на автомобилях данной марки
  113. SELECT Марка, SUM(DATEDIFF(hour,Дата_время_начала, Дата_время_окончания)) AS [Время поездки в часах]
  114.  FROM Тариф JOIN (Автомобиль JOIN Поездка ON Автомобиль.id_Автомобиля = Поездка.Автомобиль) ON Тариф.id_Тарифа = Тариф
  115.  GROUP BY Марка
  116. --3 запроса с использованием временных функций
  117. --Вывести ФИО клиента и количество дней с момента его последней поездки относительно текущей даты.
  118. SELECT ФИО, DATEDIFF(DAY, Дата_время_окончания, SYSDATETIME()) AS [Прошло дней с момента поездки]
  119.  FROM Клиент JOIN Поездка ON Клиент.id_Клиента = Поездка.Клиент
  120. --Вывести информацию о поездке: ФИО клиента, id Автомобиля, Дату, время начала и окончания поездки в RU формате
  121. SELECT ФИО, Автомобиль, FORMAT(Дата_время_начала, 'D', 'ru-RU') + FORMAT(Дата_время_начала, N'HH:mm:ss'),
  122.                         FORMAT(Дата_время_окончания, 'D', 'ru-RU') + FORMAT(Дата_время_окончания, N'HH:mm:ss')
  123.  FROM Клиент JOIN Поездка ON Клиент.id_Клиента = Поездка.Клиент
  124. --Вывести информацию о среднем количестве часов поездок, совершенных на автомобиле конкретной марки
  125. SELECT Марка, AVG(DATEDIFF(HOUR, Дата_время_начала, Дата_время_окончания))
  126.  FROM Автомобиль JOIN Поездка ON Автомобиль.id_Автомобиля = Поездка.Автомобиль
  127.  GROUP BY Марка
  128. --запрос с использованием группировки по одному столбцу
  129. --Вывести количество поездок, совершенных на автомобиле каждой марки
  130. SELECT Марка, COUNT(Марка) AS [Количество поездок]
  131.  FROM Автомобиль JOIN Поездка ON Автомобиль.id_Автомобиля = Поездка.Автомобиль
  132.  GROUP BY Марка
  133. --запрос на использование группировки по нескольким столбцам
  134. --Вывести количество поездок, совершенных на автомобиле каждой Марки и модели
  135. SELECT Марка, Модель, COUNT(Марка) AS [Количество поездок]
  136.  FROM Автомобиль JOIN Поездка ON Автомобиль.id_Автомобиля = Поездка.Автомобиль
  137.  GROUP BY Марка, Модель
  138. --запрос с использованием условия отбора групп HAVING
  139. --Вывести количество поездок, совершенных на автомобиле каждой Марки и модели,
  140. --на которых совершено более одной поездки
  141. SELECT Марка, COUNT(Марка) AS [Количество поездок]
  142.  FROM Автомобиль JOIN Поездка ON Автомобиль.id_Автомобиля = Поездка.Автомобиль
  143.  GROUP BY Марка
  144.  HAVING COUNT(Марка) > 1
  145. --запрос с использованием сортировки по столбцу
  146. --Вывести Марку автомобиля и количество часов поездок, совершенных на автомобилях данной марки
  147. --в порядке возрастания часов
  148. SELECT Марка, SUM(DATEDIFF(hour,Дата_время_начала, Дата_время_окончания)) AS [Время поездки в часах]
  149.  FROM Тариф JOIN (Автомобиль JOIN Поездка ON Автомобиль.id_Автомобиля = Поездка.Автомобиль) ON Тариф.id_Тарифа = Тариф
  150.  GROUP BY Марка
  151.  ORDER BY [Время поездки в часах]
  152.  --4) Запросы на модификацию таблиц
  153.  /*
  154. --запрос на добавление новых данных в таблицу
  155. --Добавить в таблицу Автомобиль новое авто 'Mercedes E200' с госномером К837ВТ71 2018 года выпуска
  156. INSERT INTO Автомобиль (Госномер, Марка, Модель, Год_выпуска)
  157.        VALUES ('К837ВТ71', 'Mercedes', 'E200', '01-01-2018')*/
  158. --!!!запрос на добавление добавление новых данных по результатам выполненного запроса
  159. /*
  160. --запрос на обноление существующих данных в таблице
  161. --Уменьшить цену за час тарифов на 10%
  162. UPDATE Тариф
  163.  SET Цена_за_час = Цена_за_час * 0.9
  164.  
  165. --запрос на изменение обновление существующих данных по результатам подзапроса во фразе WHERE
  166. --Увеличить цену за час на 15% у тарифов, по которым совершались поездки
  167. UPDATE Тариф
  168.  SET Цена_за_час = Цена_за_час * 1.15
  169.  WHERE id_Тарифа in (SELECT Тариф
  170.                       FROM Поездка)
  171.  
  172. --запрос на удаление существующих данных
  173. --Удалить автомобиль с госномером К837ВТ71
  174. DELETE Автомобиль
  175.  WHERE Госномер = 'К837ВТ71'
  176.  
  177.  --запрос на удаление существующих данных из одной таблицы на основе связных с ней таблиц
  178.  --Удалить информацию о поездке клиента с номером ВУ 4044410564, начатой 21.10.2020 в период 21:30 - 22:30.
  179.  
  180.  DELETE Поездка
  181.   FROM Поездка JOIN Клиент ON Поездка.Клиент = Клиент.id_Клиента
  182.   WHERE Номер_ВУ = '4044410564' AND Дата_время_начала >= '21-10-2020 21:30:00' AND Дата_время_окончания <= '21-10-2020 22:30:00'
  183.  
  184.  --запрос на удаление существующих данных по результатам подзапроса во фразе WHERE
  185.  --Удалить информацию о поездке на автомобиле с госномером Т422ХН190, начатой 13.10.2020 в период 08:30 - 9:00.
  186.  
  187.  DELETE
  188.   FROM Поездка
  189.   WHERE Поездка.Автомобиль IN (SELECT id_Автомобиля
  190.                                 FROM Автомобиль
  191.                                 WHERE Госномер = 'Т422ХН190') AND Дата_время_начала >= '13.10.2020 08:30'AND Дата_время_начала <= '13.10.2020 9:00'
  192. */
  193. --5) Многотабличные запросы с использованием подзапросов
  194. --3 запроса с использованием операций сравнения
  195. --Вывести id Поездок, совершенных по тарифам, цена за час которых больше средней.
  196. SELECT id_Поездки
  197.  FROM Поездка JOIN Тариф ON Поездка.Тариф = Тариф.id_Тарифа
  198.  WHERE Цена_за_час > (SELECT AVG(Цена_за_час)
  199.                        FROM Тариф)
  200. --Вывести id Поездок, совершенных на автомобилях, год выпуска которых не равен минимальному
  201. SELECT id_Поездки
  202.  FROM Поездка JOIN Автомобиль ON Поездка.Автомобиль = Автомобиль.id_Автомобиля
  203.  WHERE Год_выпуска != (SELECT MIN(Год_выпуска)
  204.                         FROM Автомобиль)
  205. --Вывести id Поездок, совершенных на автомобилях, год выпуска которых меньше среднего
  206. SELECT id_Поездки
  207.  FROM Поездка JOIN Автомобиль ON Поездка.Автомобиль = Автомобиль.id_Автомобиля
  208.  WHERE Год_выпуска < (SELECT AVG(Год_выпуска)
  209.                         FROM Автомобиль)
  210. --запрос с использованием операции ANY
  211. --Вывести информацию о поездках (id_Поездки, ФИО клиента), совершенных клиентами, проживающих в г.Рязань или в г.Казань
  212. SELECT id_Поездки, ФИО
  213.  FROM Поездка JOIN Клиент ON Поездка.Клиент = Клиент.id_Клиента
  214.  WHERE Адрес = ANY (SELECT Адрес
  215.                      FROM Клиент
  216.                      WHERE Адрес LIKE 'г. Рязань,%' or Адрес LIKE 'г. Казань,%')
  217. --запрос с использованием операции ALL
  218. --Вывести id Поездок, совершенных на автомобилях, год выпуска которых не меньше года выпуска каждого автомобиля
  219. SELECT id_Поездки
  220.  FROM Поездка JOIN Автомобиль ON Поездка.Автомобиль = Автомобиль.id_Автомобиля
  221.  WHERE Год_выпуска >= ALL(SELECT Год_выпуска
  222.                            FROM Автомобиль)
  223. --запрос с использованием операции IN
  224. --Вывести госномера автомобилей, на которых совершалась хотя бы одна поездка
  225. SELECT Госномер
  226.  FROM Автомобиль
  227.  WHERE id_Автомобиля IN (SELECT DISTINCT(Автомобиль)
  228.                           FROM Поездка)
  229. --запрос с использованием операции EXISTS
  230. --Вывести ФИО клиентов, которыми была совершена хотя бы одна поездка
  231. SELECT ФИО
  232.  FROM Клиент
  233.  WHERE EXISTS (SELECT *
  234.                 FROM Поездка
  235.                 WHERE Клиент.id_Клиента = Поездка.Клиент)
  236. --запрос с использованием двух вложенных друг в друга подзапросов
  237. --Вывести ФИО клиентов, совершавших поездки на автомобилях марки 'Renault'
  238. SELECT ФИО
  239.  FROM Клиент
  240.  WHERE id_Клиента IN (SELECT Клиент
  241.                        FROM Поездка
  242.                        WHERE Автомобиль IN ( SELECT id_Автомобиля
  243.                                               FROM Автомобиль
  244.                                               WHERE Марка = 'Renault'))
  245. --запрос с использованием трех вложенных друг в друга подзапросов
  246. --Вывести ФИО клиентов, которые совершали поездки по тарифу с максмальной ценой за час
  247. SELECT ФИО
  248.  FROM Клиент
  249.  WHERE id_Клиента IN (SELECT Клиент
  250.                       FROM Поездка
  251.                       WHERE Тариф IN (SELECT id_Тарифа
  252.                                        FROM Тариф
  253.                                         WHERE Цена_за_час = (SELECT MAX(Цена_за_час)
  254.                                                               FROM Тариф)))
  255. --6) Запросы на изменение структуры существующей таблицы
  256. --запрос на добавление нового столбца к таблице
  257. ALTER TABLE Автомобиль
  258.       ADD Страна_производитель varchar(15)
  259. --запрос на добавление нового ограничения к таблице
  260. ALTER TABLE Автомобиль
  261.       ADD CONSTRAINT check_coutry CHECK (Страна_производитель in (NULL, 'Корея', 'Франция', 'Германия'))
  262. --запрос на удаление нового ограничения к таблице
  263. ALTER TABLE Автомобиль
  264.       DROP CONSTRAINT check_coutry
  265. --запрос на удаление нового столбца к таблице
  266. ALTER TABLE Автомобиль
  267.       DROP COLUMN Страна_производитель
  268. ALTER TABLE Тариф
  269.       ALTER COLUMN Описание varchar(100)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement