DimovIvan

MS SQL Retake Exam – 10 Dec 2021

Jun 16th, 2022 (edited)
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.79 KB | None | 0 0
  1. --Retake Exam – 10 Dec 2021
  2.  
  3. CREATE DATABASE Airport
  4.  
  5. GO
  6.  
  7. USE Airport
  8.  
  9. GO
  10.  
  11. CREATE TABLE Passengers(
  12. Id INT PRIMARY KEY IDENTITY,
  13. FullName NVARCHAR(100) UNIQUE NOT NULL,
  14. Email NVARCHAR(50) UNIQUE NOT NULL)
  15.  
  16. CREATE TABLE Pilots(
  17. Id INT PRIMARY KEY IDENTITY,
  18. FirstName NVARCHAR(30) UNIQUE NOT NULL,
  19. LastName NVARCHAR(30) UNIQUE NOT NULL,
  20. Age TINYINT NOT NULL,
  21. CHECK(Age BETWEEN 21 AND 62),
  22. Rating FLOAT(8),
  23. CHECK(Rating BETWEEN 0.0 AND 10.0))
  24.  
  25. CREATE TABLE AircraftTypes(
  26. Id INT PRIMARY KEY IDENTITY,
  27. TypeName NVARCHAR(30) UNIQUE NOT NULL)
  28.  
  29. CREATE TABLE Aircraft(
  30. Id INT PRIMARY KEY IDENTITY,
  31. Manufacturer NVARCHAR(25) NOT NULL,
  32. Model NVARCHAR(30) NOT NULL,
  33. [Year] INT NOT NULL,
  34. FlightHours INT,
  35. Condition CHAR NOT NULL,
  36. TypeId INT FOREIGN KEY REFERENCES AircraftTypes(Id) NOT NULL)
  37.  
  38. CREATE TABLE PilotsAircraft(
  39. AircraftId INT FOREIGN KEY REFERENCES Aircraft(Id) NOT NULL,
  40. PilotId INT FOREIGN KEY REFERENCES Pilots(Id) NOT NULL,
  41. PRIMARY KEY(AircraftId, PilotId))
  42.  
  43. CREATE TABLE Airports(
  44. Id INT PRIMARY KEY IDENTITY,
  45. AirportName NVARCHAR(70) UNIQUE NOT NULL,
  46. Country NVARCHAR(100) UNIQUE NOT NULL)
  47.  
  48. CREATE TABLE FlightDestinations(
  49. Id INT PRIMARY KEY IDENTITY,
  50. AirportId INT FOREIGN KEY REFERENCES Airports(Id) NOT NULL,
  51. [Start] DATETIME2 NOT NULL,
  52. AircraftId INT FOREIGN KEY REFERENCES Aircraft(Id) NOT NULL,
  53. PassengerId INT FOREIGN KEY REFERENCES Passengers(Id) NOT NULL,
  54. TicketPrice DECIMAL(18, 2) DEFAULT 15.00 NOT NULL)
  55.  
  56. --02. Insert
  57.  
  58. INSERT INTO Passengers(FullName, Email)
  59. SELECT
  60.         CONCAT(FirstName, ' ', LastName)
  61.         ,CONCAT(FirstName, LastName, '@gmail.com')
  62.    FROM Pilots
  63.   WHERE Id BETWEEN 5 AND 15
  64.  
  65. --03. Update
  66.  
  67. UPDATE Aircraft
  68.    SET Condition = 'A'
  69.  WHERE Condition IN ('B', 'C')
  70.    AND (FlightHours IS NULL OR FlightHours <= 100)
  71.    AND [Year] >= 2013
  72.  
  73.  --04. Delete
  74.  
  75. DELETE FROM FlightDestinations
  76.       WHERE PassengerId IN (SELECT
  77.                                    Id
  78.                               FROM Passengers
  79.                              WHERE LEN(FullName) <= 10)
  80.  
  81.  DELETE FROM Passengers
  82.        WHERE LEN(FullName) <= 10
  83.  
  84. --05. Aircraft
  85.  
  86.   SELECT
  87.          Manufacturer
  88.          ,Model
  89.          ,FlightHours
  90.          ,Condition
  91.     FROM Aircraft
  92. ORDER BY FlightHours DESC
  93.  
  94. --06. Pilots and Aircraft
  95.  
  96.    SELECT
  97.           p.FirstName
  98.           ,p.LastName
  99.           ,a.Manufacturer
  100.           ,a.Model
  101.           ,a.FlightHours
  102.      FROM Pilots AS p
  103.      JOIN PilotsAircraft AS pa ON p.Id = pa.PilotId
  104. LEFT JOIN Aircraft AS a ON pa.AircraftId = a.Id
  105.     WHERE a.FlightHours IS NOT NULL
  106.       AND a.FlightHours <= 304
  107.  ORDER BY a.FlightHours DESC, p.FirstName
  108.  
  109. --07. Top 20 Flight Destinations
  110.  
  111. SELECT TOP(20)
  112.               f.Id AS DestinationId
  113.               ,f.[Start]
  114.               ,p.FullName
  115.               ,a.AirportName
  116.               ,f.TicketPrice
  117.          FROM FlightDestinations AS f
  118.     LEFT JOIN Passengers AS p ON f.PassengerId = p.Id
  119.     LEFT JOIN Airports AS a ON f.AirportId = a.Id
  120.         WHERE DATEPART(DAY, f.Start) % 2 = 0
  121.      ORDER BY f.TicketPrice DESC, a.AirportName
  122.  
  123. --08. Number of Flights for Each Aircraft
  124.  
  125.    SELECT
  126.           AircraftId
  127.           ,Manufacturer
  128.           ,FlightHours
  129.           ,FlightDestinationsCount
  130.           ,AvgPrice
  131.      FROM (SELECT
  132.                   a.Id AS AircraftId
  133.                   ,a.Manufacturer AS Manufacturer
  134.                   ,a.FlightHours AS FlightHours
  135.                   ,COUNT(f.Id) AS FlightDestinationsCount
  136.                   ,ROUND(AVG(f.TicketPrice), 2) AS AvgPrice
  137.              FROM Aircraft AS a
  138.         LEFT JOIN FlightDestinations AS f ON a.Id = f.AircraftId
  139.          GROUP BY a.Id, a.Manufacturer, a.FlightHours
  140.            ) AS CountingSubquery
  141.      WHERE FlightDestinationsCount >= 2
  142.   ORDER BY FlightDestinationsCount DESC, AircraftId
  143.  
  144. --09. Regular Passengers
  145.  
  146.   SELECT *
  147.     FROM (SELECT
  148.                  p.FullName AS FullName
  149.                  ,COUNT(a.Id) AS CountOfAircraft
  150.                  ,SUM(f.TicketPrice) AS TotalPayed
  151.             FROM Passengers AS p
  152.             JOIN FlightDestinations AS f ON p.Id = f.PassengerId
  153.             JOIN Aircraft AS a ON f.AircraftId = a.Id
  154.         GROUP BY p.FullName
  155.           ) AS CountingSubquery
  156.     WHERE CountOfAircraft >= 2
  157.       AND SUBSTRING(FullName, 2, 1) = 'a'
  158.  ORDER BY FullName
  159.  
  160.  GO
  161.  
  162.  --10. Full Info for Flight Destinations
  163.  
  164.   SELECT
  165.          ap.AirportName
  166.          ,f.[Start] AS DayTime
  167.          ,f.TicketPrice
  168.          ,p.FullName
  169.          ,a.Manufacturer
  170.          ,a.Model
  171.     FROM Airports AS ap
  172.     JOIN FlightDestinations AS f ON ap.Id = f.AirportId
  173.     JOIN Passengers AS p ON f.PassengerId = p.Id
  174.     JOIN Aircraft AS a ON f.AircraftId = a.Id
  175.     WHERE DATEPART(HOUR, f.Start) BETWEEN 6 AND 20
  176.      AND f.TicketPrice > 2500
  177. ORDER BY a.Model
  178.  
  179.  --11. Find all Destinations by Email Address
  180.  
  181.  CREATE FUNCTION udf_FlightDestinationsByEmail(@email NVARCHAR(50))
  182.  RETURNS INT
  183.  AS
  184.  BEGIN
  185.     DECLARE @passengerId INT = 0
  186.     SET @passengerId = (SELECT
  187.                               Id
  188.                          FROM Passengers
  189.                         WHERE Email = @email)
  190.     DECLARE @flightsCount INT = 0
  191.     SET @flightsCount = (SELECT
  192.                                 COUNT(Id)
  193.                            FROM FlightDestinations
  194.                           WHERE PassengerId = @passengerId)
  195.     RETURN @flightsCount
  196.  END
  197.  
  198. SELECT dbo.udf_FlightDestinationsByEmail ('[email protected]')
  199. SELECT dbo.udf_FlightDestinationsByEmail('[email protected]')  
  200. SELECT dbo.udf_FlightDestinationsByEmail('[email protected]')
  201.  
  202. --12. Full Info for Airports
  203.  
  204. CREATE PROC usp_SearchByAirportName @airportName NVARCHAR(70)
  205. AS
  206.  
  207. SELECT
  208.          ap.AirportName
  209.          ,p.FullName
  210.          ,CASE
  211.             WHEN f.TicketPrice <= 400 THEN 'Low'
  212.             WHEN f.TicketPrice BETWEEN 401 AND 1500 THEN 'Medium'
  213.             ELSE 'High'
  214.           END AS LevelOfTickerPrice
  215.          ,a.Manufacturer
  216.          ,a.Condition
  217.          ,atp.TypeName
  218.     FROM Airports AS ap
  219.     JOIN FlightDestinations AS f ON ap.Id = f.AirportId
  220.     JOIN Passengers AS p ON f.PassengerId = p.Id
  221.     JOIN Aircraft AS a ON f.AircraftId = a.Id
  222.     JOIN AircraftTypes AS atp ON atp.Id = a.TypeId
  223.    WHERE ap.AirportName = @airportName
  224. ORDER BY a.Manufacturer, p.FullName
  225.  
  226. GO
  227.  
  228. EXEC usp_SearchByAirportName 'Sir Seretse Khama International Airport'   
  229.  
Add Comment
Please, Sign In to add comment