Advertisement
JmihPodvalbniy

Untitled

May 12th, 2024 (edited)
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 7.89 KB | Software | 0 0
  1. CREATE DATABASE DZ1233;
  2.  
  3. --1) Создать таблицу #students с тремя столбцами (id, name, age) и заполнить ее данными. Используя цикл FOR, вывести всех студентов,
  4. --возраст которых больше 20 лет.
  5. USE DZ1233
  6. CREATE TABLE students (
  7. id INT IDENTITY(1,1) PRIMARY KEY,
  8. name VARCHAR(50),
  9. age INT
  10. );
  11.  
  12. INSERT INTO students (name, age)
  13. VALUES
  14. ('Alice', 22),
  15. ('Bob', 19),
  16. ('Charlie', 25),
  17. ('David', 20),
  18. ('Eve', 21);
  19.  
  20. DECLARE @counter INT = 1;
  21. WHILE @counter <= (SELECT COUNT(*) FROM students)
  22. BEGIN
  23. IF (SELECT age FROM students WHERE id = @counter) > 20
  24. BEGIN
  25. SELECT * FROM students WHERE id = @counter;
  26. END
  27. SET @counter = @counter + 1;
  28. END
  29.  
  30. --2) Создать три переменные @day, @month и @year и присвоить им текущую дату. Используя оператор CASE, вывести сообщение в формате
  31. --"День-Месяц-Год".
  32. DECLARE @DAY INT, @MONTH INT, @YEAR INT;
  33. SET @DAY = DAY(GETDATE());
  34. SET @MONTH = MONTH(GETDATE());
  35. SET @YEAR = YEAR(GETDATE());
  36. SELECT
  37. CASE
  38. WHEN @DAY < 10 THEN '0' + CAST(@DAY AS VARCHAR(2))
  39. ELSE CAST(@DAY AS VARCHAR(2))
  40. END + '-' +
  41. CASE
  42. WHEN @MONTH < 10 THEN '0' + CAST(@MONTH AS VARCHAR(2))
  43. ELSE CAST(@MONTH AS VARCHAR(2))
  44. END + '-' +
  45. CAST(@YEAR AS VARCHAR(4)) AS [День-Месяц-Год];
  46.  
  47. --3) Создать таблицу #tempTable с одним столбцом и заполнить ее значениями от 1 до 5. Далее вывести значения из этой таблицы.
  48. CREATE TABLE tempTable (
  49. VALUE INT
  50. );
  51. INSERT INTO tempTable (VALUE)
  52. VALUES (1), (2), (3), (4), (5);
  53. SELECT VALUE FROM tempTable;
  54.  
  55. --4)  Укажите сражения, в которых участвовало, по меньшей мере, три корабля одной и той же страны.
  56. -------------------------------------------------------------------------------
  57. CREATE TABLE Classes (
  58.     class VARCHAR(50) NOT NULL,
  59.     TYPE VARCHAR(2) NOT NULL,
  60.     country VARCHAR(20) NOT NULL,
  61.     numGuns TINYINT NULL,
  62.     bore REAL NULL,
  63.     displacement INT NULL,
  64.     PRIMARY KEY (class)
  65. );
  66.  
  67. CREATE TABLE Battles (
  68.     name VARCHAR(20) NOT NULL,
  69.     DATE DATETIME NOT NULL,
  70.     PRIMARY KEY (name)
  71. );
  72.  
  73. CREATE TABLE Ships (
  74.     name VARCHAR(50) NOT NULL,
  75.     class VARCHAR(50) NOT NULL,
  76.     launched SMALLINT NULL,
  77.     PRIMARY KEY (name),
  78.     FOREIGN KEY (class) REFERENCES Classes(class)
  79. );
  80.  
  81. CREATE TABLE Outcomes (
  82.     ship VARCHAR(50) NOT NULL,
  83.     battle VARCHAR(20) NOT NULL,
  84.     RESULT VARCHAR(10) NOT NULL,
  85.     PRIMARY KEY (ship, battle),
  86.     FOREIGN KEY (battle) REFERENCES Battles(name)
  87. );
  88. -------------------------------------------------------------------------------
  89. USE DZ1233;
  90.  
  91. INSERT INTO Classes (class, TYPE, country, numGuns, bore, displacement) VALUES
  92.     ('Bismarck', 'bb', 'Germany', 8, 15, 41700),
  93.     ('Iowa', 'bb', 'USA', 9, 16, 45000),
  94.     ('Kongo', 'bc', 'Japan', 8, 14, 27500),
  95.     ('North Carolina', 'bb', 'USA', 9, 16, 35000),
  96.     ('Renown', 'bc', 'Gt. Britain', 6, 15, 32000),
  97.     ('Revenge', 'bb', 'Gt. Britain', 8, 15, 29150),
  98.     ('Tennessee', 'bb', 'USA', 12, 14, 32000),
  99.     ('Yamato', 'bb', 'Japan', 9, 18, 65000),
  100.     ('King George V', 'bb', 'Gt. Britain', 10, 14, 35000),
  101.     ('Nelson', 'bb', 'Gt. Britain', 9, 16, 33950),
  102.     ('Fuso', 'bb', 'Japan', 12, 14, 35000),
  103.     ('Essex', 'cv', 'USA', 12, 14, 30000),
  104.     ('Colorado', 'bb', 'USA', 8, 16, 32600);
  105.  
  106. INSERT INTO Battles (name, DATE) VALUES
  107.     ('North Atlantic', 1941-05-24),
  108.     ('Guadalcanal', 1942-11-15),
  109.     ('North Cape', 1943-12-26),
  110.     ('Surigao Strait', 1944-10-25),
  111.     ('Coral Sea', 1942-05-04),
  112.     ('Midway', 1942-06-04);
  113.  
  114. INSERT INTO Ships (name, class, launched) VALUES
  115.     ('Bismarck', 'Bismarck', 1939),
  116.     ('California', 'Tennessee', 1921),
  117.     ('Duke of York', 'King George V', 1941),
  118.     ('Fuso', 'Fuso', 1915),
  119.     ('Hood', 'Renown', 1920),
  120.     ('Iowa', 'Iowa', 1943),
  121.     ('King George V', 'King George V', 1940),
  122.     ('Kirishima', 'Kongo', 1915),
  123.     ('Missouri', 'Iowa', 1944),
  124.     ('Musashi', 'Yamato', 1942),
  125.     ('New Jersey', 'Iowa', 1943),
  126.     ('North Carolina', 'North Carolina', 1941),
  127.     ('Prince of Wales', 'King George V', 1941),
  128.     ('Ramillies', 'Revenge', 1917),
  129.     ('Rodney', 'Nelson', 1927),
  130.     ('South Dakota', 'North Carolina', 1942),
  131.     ('Tennessee', 'Tennessee', 1920),
  132.     ('Washington', 'North Carolina', 1941),
  133.     ('Wisconsin', 'Iowa', 1944),
  134.     ('Yamashiro', 'Fuso', 1917),
  135.     ('Yorktown', 'Essex', 1937),
  136.     ('West Virginia', 'Colorado', 1923);
  137.  
  138.  
  139. INSERT INTO Outcomes (ship, battle, RESULT) VALUES
  140.     ('Bismarck', 'North Atlantic', 'sunk'),
  141.     ('California', 'Surigao Strait', 'ok'),
  142.     ('Duke of York', 'North Cape', 'ok'),
  143.     ('Fuso', 'Surigao Strait', 'sunk'),
  144.     ('Hood', 'North Atlantic', 'sunk'),
  145.     ('King George V', 'North Atlantic', 'ok'),
  146.     ('Kirishima', 'Guadalcanal', 'sunk'),
  147.     ('Prince of Wales', 'North Atlantic', 'damaged'),
  148.     ('South Dakota', 'Guadalcanal', 'damaged'),
  149.     ('Tennessee', 'Surigao Strait', 'ok'),
  150.     ('Washington', 'Guadalcanal', 'ok'),
  151.     ('West Virginia', 'Surigao Strait', 'ok'),
  152.     ('South Dakota', 'North Atlantic', 'damaged'),
  153.     ('Yamashiro', 'Surigao Strait', 'sunk');
  154. -------------------------------------------------------------------------------
  155. USE DZ1233;
  156.  
  157. SELECT Battles.name
  158. FROM Battles
  159. JOIN Outcomes ON Battles.name = Outcomes.battle
  160. JOIN Ships ON Outcomes.ship = Ships.name
  161. JOIN Classes ON Ships.class = Classes.class
  162. GROUP BY Battles.name, Classes.country
  163. HAVING COUNT(DISTINCT Ships.name) >= 3;
  164.  
  165. --5)  Найдите классы, в которые входит только один корабль из базы данных (учесть также корабли в Outcomes).
  166. USE DZ1233;
  167.  
  168. SELECT Classes.class
  169. FROM Classes
  170. LEFT JOIN Ships ON Classes.class = Ships.class
  171. GROUP BY Classes.class
  172. HAVING COUNT(DISTINCT Ships.name) = 1;
  173. --6)  Найдите страны, владевшие когда-либо как обычными кораблями, так и крейсерами.
  174. USE DZ1233;
  175.  
  176. SELECT country
  177. FROM Classes
  178. WHERE TYPE IN ('bb', 'bc')
  179. GROUP BY country
  180. HAVING COUNT(DISTINCT TYPE) = 2;
  181. --7)  Найдите корабли, «сохранившиеся для будущих сражений»; то есть выведенные из строя в одной битве (damaged), они участвовали в
  182. --другой.
  183. USE DZ1233;
  184.  
  185. SELECT DISTINCT Outcomes.ship
  186. FROM Outcomes
  187. JOIN Outcomes AS Outcomes2 ON Outcomes.ship = Outcomes2.ship AND Outcomes.battle <> Outcomes2.battle
  188. WHERE Outcomes.RESULT = 'damaged';
  189. --8)  Найдите названия всех тех кораблей из базы данных, о которых можно определенно сказать, что они были спущены на воду до 1941 г.
  190. USE DZ1233;
  191.  
  192. SELECT name
  193. FROM Ships
  194. WHERE launched < 1941;
  195. --9)  Укажите названия, водоизмещение и число орудий, кораблей участвовавших в сражении при Гвадалканале (Guadalcanal).
  196. USE DZ1233;
  197.  
  198. SELECT Ships.name, Classes.displacement, Classes.numGuns
  199. FROM Ships
  200. JOIN Classes ON Ships.class = Classes.class
  201. JOIN Outcomes ON Ships.name = Outcomes.ship
  202. WHERE Outcomes.battle = 'Guadalcanal';
  203. --10)  Найдите названия кораблей, имеющих наибольшее число орудий среди всех кораблей такого же водоизмещения (учесть корабли из --таблицы Outcomes).
  204. USE DZ1233;
  205.  
  206. SELECT Ships.name
  207. FROM Ships
  208. INNER JOIN Classes ON Ships.class = Classes.class
  209. WHERE
  210.   Classes.numGuns = (
  211.     SELECT
  212.       MAX(Classes.numGuns)
  213.     FROM Classes
  214.     WHERE
  215.       Classes.displacement = Classes.displacement
  216.   );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement