Advertisement
Iv555

Untitled

Jun 14th, 2022
406
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.16 KB | None | 0 0
  1. --Section 1. DDL
  2.  
  3. CREATE DATABASE Airport
  4.  
  5. --T01 Database design
  6.  
  7. CREATE TABLE Passengers
  8. (
  9. Id INT PRIMARY KEY IDENTITY,
  10. FullName VARCHAR(100) UNIQUE NOT NULL,
  11. Email VARCHAR(50) UNIQUE NOT NULL
  12. )
  13.  
  14. CREATE TABLE Pilots
  15. (
  16. Id INT PRIMARY KEY IDENTITY,
  17. FirstName VARCHAR(30) UNIQUE NOT NULL,
  18. LastName VARCHAR(30) UNIQUE NOT NULL,
  19. Age TINYINT NOT NULL CHECK (Age >= 21 AND Age <=62),
  20. Rating FLOAT(53) CHECK (Rating >= 0.0 AND Rating <= 10.0)
  21. )
  22.  
  23. CREATE TABLE AircraftTypes
  24. (
  25. Id INT PRIMARY KEY IDENTITY,
  26. TypeName VARCHAR(30) UNIQUE NOT NULL
  27. )
  28.  
  29. CREATE TABLE Aircraft
  30. (
  31. Id INT PRIMARY KEY IDENTITY,
  32. Manufacturer VARCHAR(25) NOT NULL,
  33. Model VARCHAR(30) NOT NULL,
  34. [Year] INT NOT NULL,
  35. FlightHours INT,
  36. Condition CHAR(1) NOT NULL,
  37. TypeId INT FOREIGN KEY REFERENCES AircraftTypes(Id) NOT NULL
  38. )
  39.  
  40. CREATE TABLE PilotsAircraft
  41. (
  42. AircraftId INT FOREIGN KEY REFERENCES Aircraft(Id) NOT NULL,
  43. PilotId INT FOREIGN KEY REFERENCES Pilots(Id) NOT NULL,
  44. PRIMARY KEY (AircraftId,PilotId)
  45. )
  46.  
  47. CREATE TABLE Airports
  48. (
  49. Id INT PRIMARY KEY IDENTITY,
  50. AirportName VARCHAR(70) UNIQUE NOT NULL,
  51. Country VARCHAR(100) UNIQUE NOT NULL
  52. )
  53.  
  54. CREATE TABLE FlightDestinations
  55. (
  56. Id INT PRIMARY KEY IDENTITY,
  57. AirportId INT FOREIGN KEY REFERENCES Airports(Id) NOT NULL,
  58. [Start] DATETIME NOT NULL,
  59. AircraftId INT FOREIGN KEY REFERENCES Aircraft(Id) NOT NULL,
  60. PassengerId INT FOREIGN KEY REFERENCES Passengers(Id) NOT NULL,
  61. TicketPrice DECIMAL(18,2) DEFAULT 15 NOT NULL
  62. )
  63.  
  64. --Section 2. DML
  65.  
  66. --T02 Insert
  67.  
  68. DECLARE @PilotId INT = 5
  69.  
  70. WHILE @PilotId <=15
  71. BEGIN
  72. INSERT INTO Passengers VALUES
  73. ((SELECT CONCAT(FirstName, ' ', LastName) FROM Pilots WHERE Id = @PilotId), (SELECT CONCAT(FirstName,LastName,'@gmail.com') FROM Pilots WHERE Id=@PilotId))
  74. SET @PilotId += 1
  75. END
  76.  
  77. --T03 Update
  78.  
  79. UPDATE Aircraft
  80. SET Condition = 'A'
  81. WHERE (Condition = 'C' OR Condition = 'B') AND (FlightHours IS NULL OR FlightHours <=100) AND ([Year] >= 2013)
  82.  
  83. --T04 Delete
  84.  
  85. DELETE Passengers
  86. WHERE LEN(FullName) <=10
  87.  
  88. --Section 3. Querying
  89.  
  90. --T05 Aircraft
  91.  
  92. SELECT Manufacturer, Model, FlightHours, Condition FROM Aircraft
  93. ORDER BY FlightHours DESC
  94.  
  95. --T06 Pilots and Aircraft
  96.  
  97. SELECT 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. JOIN Aircraft as a ON pa.AircraftId = a.Id
  105. WHERE a.FlightHours IS NOT NULL AND a.FlightHours <= 304
  106. ORDER BY a.FlightHours DESC, p.FirstName
  107.  
  108. --T07 Top 20 Flight Destinations
  109.  
  110. SELECT TOP 20 fd.Id AS [DestinationId]
  111. , fd.[Start]
  112. , p.FullName
  113. , a.AirportName
  114. , fd.TicketPrice
  115. FROM FlightDestinations AS fd
  116. JOIN Passengers AS p ON fd.PassengerId = p.Id
  117. JOIN Airports AS a ON fd.AirportId = a.Id
  118. WHERE DATEPART(DAY, fd.Start) % 2 = 0
  119. ORDER BY fd.TicketPrice DESC, a.AirportName
  120.  
  121. --T08 Number of Flights for Each Aircraft
  122.  
  123. SELECT a.Id AS [AircraftId]
  124. , a.Manufacturer
  125. , a.FlightHours
  126. , COUNT(fd.Id) AS [FlightDestinationsCount]
  127. , ROUND(AVG(fd.TicketPrice),2) AS [AvgPrice]
  128. FROM Aircraft AS a
  129. JOIN FlightDestinations AS fd ON a.Id = fd.AircraftId
  130. GROUP BY a.Id, a.Manufacturer, a.FlightHours
  131. HAVING COUNT(fd.Id) >=2
  132. ORDER BY FlightDestinationsCount DESC, a.Id
  133.  
  134. --T09 Regular Passengers
  135.  
  136. SELECT p.FullName
  137. , COUNT(a.Id) AS [CountOfAircraft]
  138. , SUM(fd.TicketPrice) AS [TotalPayed]
  139. FROM Passengers AS p
  140. JOIN FlightDestinations AS fd ON p.Id = fd.PassengerId
  141. JOIN Aircraft AS a ON fd.AircraftId = a.Id
  142. WHERE p.FullName LIKE '_a%'
  143. GROUP BY p.FullName
  144. HAVING COUNT(a.Id) > 1
  145. ORDER BY p.FullName
  146.  
  147. --T10 Full Info for Flight Destinations
  148.  
  149. SELECT a.AirportName
  150. , fd.[Start] AS [DayTime]
  151. , fd.TicketPrice
  152. , p.FullName
  153. , ac.Manufacturer
  154. , ac.Model
  155. FROM FlightDestinations AS fd
  156. JOIN Passengers AS p ON fd.PassengerId = p.Id
  157. JOIN Airports AS a ON fd.AirportId = a.Id
  158. JOIN Aircraft AS ac ON fd.AircraftId = ac.Id
  159. WHERE DATEPART(HOUR, fd.[Start]) BETWEEN 6 AND 20 AND fd.TicketPrice > 2500
  160. ORDER BY ac.Model
  161.  
  162.  
  163. --Section 4. Programmability
  164.  
  165. --T11 Find all Destinations by Email Address
  166.  
  167. GO
  168. CREATE OR ALTER FUNCTION udf_FlightDestinationsByEmail(@email VARCHAR(50))
  169. RETURNS INT
  170. AS
  171. BEGIN
  172. RETURN (SELECT COUNT(fd.Id) FROM Passengers AS p
  173. JOIN FlightDestinations AS fd ON p.Id = fd.PassengerId
  174. WHERE p.Email = @email)
  175. END
  176. go
  177.  
  178. SELECT dbo.udf_FlightDestinationsByEmail('PierretteDunmuir@gmail.com') --1
  179. SELECT dbo.udf_FlightDestinationsByEmail('Montacute@gmail.com') --3
  180. SELECT dbo.udf_FlightDestinationsByEmail('MerisShale@gmail.com') --0
  181.  
  182. --T12 Full Info for Airports
  183.  
  184. GO
  185.  
  186. CREATE OR ALTER PROC usp_SearchByAirportName(@airportName VARCHAR(70))
  187. AS
  188. BEGIN
  189. SELECT ap.AirportName
  190. , p.FullName
  191. , CASE
  192. WHEN fd.TicketPrice <= 400 THEN 'Low'
  193. WHEN fd.TicketPrice BETWEEN 401 AND 1500 THEN 'Medium'
  194. WHEN fd.TicketPrice >=1501 THEN 'High'
  195. END AS [LevelOfTickerPrice]
  196. , ac.Manufacturer
  197. , ac.Condition
  198. , act.TypeName
  199. FROM Airports AS ap
  200. JOIN FlightDestinations AS fd ON ap.Id = fd.AirportId
  201. JOIN Passengers AS p ON fd.PassengerId = p.Id
  202. JOIN Aircraft AS ac ON fd.AircraftId = ac.Id
  203. JOIN AircraftTypes AS act ON ac.TypeId = act.Id
  204. WHERE ap.AirportName = @airportName
  205. ORDER BY ac.Manufacturer, p.FullName
  206. END
  207.  
  208. EXEC usp_SearchByAirportName 'Sir Seretse Khama International Airport'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement