Sunteți pe pagina 1din 16

MINISTERUL EDUCAȚIEI AL REPUBLICII MOLDOVA

UNIVERSITATEA TEHNICĂ A MOLDOVEI

FACULTATEA CALCULATOARE, INFORMATICĂ ȘI MICROELECTRONICĂ

DEPARTAMENULT INGINERIE SOFTWARE ȘI AUTOMATICĂ

LUCRARE DE LABORATOR NR. 4


Disciplina : Baze de date
Tema : Instrucțiunea SELECT TRANSACT-SQL

A elaborat : st.gr.TI-181 f/r , Caldari Pavel

A verificat : prof.univ. Saranciuc Dorian

2023
Scopul lucrării:

Studierea elementelor de bază ale limbajului Transact-SQL, a structurii instrucțiunii


SELECT și a tipurilor de funcții utilizate în interogări. În afară de aceasta, se tratează aspectele
de utilizare a interfeței Editorului de Interogări pentru crearea și gestiunea interogărilor SQL.

Sarcina lucrării:
Sarcinile vor fi aplicate asupra bazei de date (care conține date despre zboruri avia), a cărei
descriere scurtă este propusă în continuare:

Schema bazei de date constă din 8 scheme relaționale:

Tabelul “Aircrafts”, fiecare model de aeronavă este identificat prin codul său din 3 cifre
(aircraft_code). De asemenea, sunt indicate numele modelului (model), viteza maximă (max_speed) și
altitudinea maximă (max_altitude).
Tabelul “Airports”, va conține câmpurile identificatorul aeroportului format din 3 litere
(id_airport), denumirea aeroportului (name_airport), orașul în care se află aeroportul (city) și fusul orar
(timezone). Cîmpul id_airport va fi cheie primară pentru tabelul dat.
Tabelul “Boarding_passes”, la înregistrarea pentru zbor, care este posibil de a efectua din timp,
pasagerului i se eliberează un bilet. Tabelul conține câmpurile id-ul biletului (id_ticket), numărul
biletului de îmbarcare (boarding_no) și numărul locului în avion (seat_no). Cîmpul id_ticket va fi cheie
primară pentru tabelul dat.
Tabelul “Bookings”, fiecare rezervare poate include mai multe bilete, câte unul pentru fiecare
pasager. Biletul, la rândul său, poate include mai multe zboruri. Informații despre rezervări se mai conține
și în tabelul Tickets. Tabelul conține următoarele câmpuri id-ul rezervării (booking_no), data rezervării
(booking_date) și câmpul ce conține costul total al tuturor pasagerilor incluși în rezervare
(total_amount). Cîmpul booking_no va fi cheie primară pentru tabelul dat.
Tabelul “Flights”, conține câmpul id-ul zborului (id_flight), fiind și cheia primară, la fel conține
și numărul zborului (flight_no). Un zbor mereu conectează două puncte – aeroporturile de plecare
(id_airport_departure) și sosire (id_airport_arrival), iar dacă nu există un zbor direct de la un aeroport
la altul, atunci biletul include mai multe zboruri necesare. Fiecare zbor are o dată și o oră de plecare
(time_departure) și sosire (time_arrival). Ora reală de plecare (actual_departure) și sosire
(actual_arrival) este diferită, de obicei nu prea mult, dar uneori timp de câteva ore dacă zborul este
întârziat. Câmpul status_flight, reprezintă în ce stare este acum zborul, de exemplu: Arrived, Scheduled
și ultimul camp ce va face legătura cu alt tabel este aircraft_code.
Tabelul “Seats”, fiecare scaun este determinat de numărul său (seat_no) și are o clase de servicii
atribuită (tarif_conditions) – Economy, Comfort sau Business. Acest tabel are 2 cheii primare
aircraft_code și seat_no.

2
Tabelul “Ticket_flights”, prin intermediul acestui tabel se face conexiunea dintre Flights
Tickets, iar fiecare zbor sunt reprezentate prin cost (amount) și clasa de serviciu (tarif_conditions).
Cheia primară a acestui tabel este id_ticket.
Tabelul “Tickets”, biletul este format dintr-un număr unic din 13 cifre (id_ticket), la fel conține
și identificatorul pasagerului (id_passenger), la fel numele și prenumele acestuia (passenger_name) și în
final informații de contact (contact_data). Cheia primară a tabelului este id_ticket.

Pentru baza de date “Flights” au fost scrise următoarele interogări :

--1. Toate datele despre aeronave.

SELECT * FROM aircrafts;

--2. Toate datele despre bilete.

SELECT * FROM Tickets

--3. Să se obțină lista clienților numele cărora începe cu litera A.

SELECT passenger_name FROM Tickets where passenger_name like 'A%'

3
--4. Să se obțină lista locurilor cu clasa de tarifare dintr-o aeronavă.

SELECT a.aircraft_code,
a.model,
s.seat_no,
s.tarif_conditions
FROM aircrafts a
JOIN seats s ON a.aircraft_code = s.aircraft_code
WHERE a.model LIKE 'Boeing%'
ORDER BY s.seat_no;

--5. Toate datele despre locuri.

SELECT * FROM Seats

4
--6. Să se afle numărul de locuri clasate pe condițiile de tarifare.

SELECT s.aircraft_code, s.tarif_conditions, count(*) as num


FROM Seats s
GROUP BY s.aircraft_code, s.tarif_conditions
ORDER BY s.aircraft_code, s.tarif_conditions

--7. Toate datele despre aeroporturi.

SELECT * FROM Airports

--8. Să se afle orașele în care este cel puțin un aeroport.

SELECT a.id_airport as code,


a.name_airport,
a.city,
a.timezone
FROM Airports a
WHERE CAST(a.city AS NVARCHAR(20)) IN (
SELECT CAST(aa.city AS NVARCHAR(20))
FROM Airports aa
GROUP BY CAST(aa.city AS NVARCHAR(20))
HAVING COUNT(*) > 0
)
ORDER BY CAST(a.city AS NVARCHAR(20)), a.id_airport;

5
--9. Să se afle denumirea și numărul orașelor de pornire.

SELECT (COUNT((CAST(a.city AS NVARCHAR(20))))) AS Numar_Orase, (CAST(a.city AS


NVARCHAR(20)))
FROM Flights f, Airports a
WHERE f.id_airport_departure = a.id_airport
GROUP BY CAST(a.city AS NVARCHAR(20)), f.id_airport_departure

--10. Să se afle timpul de pornire și timpul de sosire în dependeță de orașele de pornire.

SELECT f.time_departure, f.time_arrival, CAST(a.city AS NVARCHAR(50)) AS City


FROM Flights f, Airports a
WHERE f.id_airport_departure = a.id_airport
GROUP BY CAST(a.city AS NVARCHAR(50)), f.time_departure, f.time_arrival

6
--11. Să se afle timpul de pornire și timpul de sosire în dependeță de orașele de sosire.

SELECT f.time_departure, f.time_arrival, CAST(a.city AS NVARCHAR(50)) AS City


FROM Flights f, Airports a
WHERE f.id_airport_arrival = a.id_airport
GROUP BY CAST(a.city AS NVARCHAR(50)), f.time_departure, f.time_arrival

--12. Toate datele despre rezervări.

SELECT * FROM Bookings

--13. Să se afle primele 10 cele mai scumpe rezervări.

SELECT TOP 10 *
FROM Bookings
ORDER BY total_amount DESC

7
--14. Să se afle din ce bilete constă rezervarea cu numărul cutare.

SELECT id_ticket,
id_passenger,
passenger_name
FROM Tickets
WHERE booking_no = '000A39';

--15. Lista tuturor clienților ce au decolat din Rusia.

SELECT t.passenger_name, a.name_airport, f.id_airport_arrival, f.id_airport_departure,


f.time_arrival, f.time_departure FROM Airports a, Tickets t, Ticket_flights tf, Flights f
WHERE city LIKE '%Russia%' and
t.id_ticket = tf.id_ticket and
tf.id_flight = f.id_flight and
f.id_airport_departure = a.id_airport

--16. Să se afișeze lista clienților cu lista de contacte.

SELECT t.passenger_name, t.contact_data


FROM Tickets t

--17. De afișat lista aeroporturilor din Rusia.

SELECT a.name_airport FROM Airports a


WHERE city LIKE '%Russia%'

8
--18. Să se afișeze toate fusurile orale din SUA.

SELECT a.timezone FROM Airports a


WHERE city LIKE '%United%'

--19. Să se afișeze bronările din anul curent.

SELECT b.booking_no,b.booking_date, b.total_amount, t.passenger_name


FROM Bookings b, Tickets t
WHERE b.booking_date LIKE '%2020%' and
b.booking_no = t.booking_no

--20. Să se afișeze bronările cu suma mai mare de 1000 euro.

SELECT b.booking_no, b.booking_date, b.total_amount, t.passenger_name


FROM Bookings b, Tickets t
WHERE b.total_amount > 1000 and
b.booking_no = t.booking_no

9
--21. Afișați zborurile a căror oră de plecare (actual_departure) și sosire (actual_arrival) este
nulă.

SELECT f.id_flight, f.flight_no, f.time_departure, f.actual_departure, f.time_arrival,


f.actual_arrival
FROM Flights f
WHERE f.actual_departure = '' and
f.actual_arrival = ''

--22. Afișați zborurile a căror oră de plecare (actual_departure) și sosire (actual_arrival) este
nulă și statutul zborului finisat.

SELECT f.id_flight, f.flight_no, f.time_departure, f.actual_departure, f.time_arrival,


f.actual_arrival
FROM Flights f
WHERE f.actual_departure = '' and
f.actual_arrival = '' and
f.status_flight LIKE 'Scheduled'

--23. Afișați toate locurile cu status de Business.

SELECT DISTINCT s.aircraft_code, s.seat_no, s.tarif_conditions


FROM Seats s
WHERE s.tarif_conditions = 'Business'

10
--24. Afișați toate locurile cu status de Economy.

SELECT DISTINCT s.aircraft_code, s.seat_no, s.tarif_conditions


FROM Seats s
WHERE s.tarif_conditions LIKE 'Economy'

--25. Afișați locurile din avion cu status de Comfort ce costă sub 300 euro.

SELECT tf.id_flight, tf.id_ticket, bs.seat_no, tf.tarif_conditions, tf.amount


FROM Ticket_flights tf, Boarding_passes bs
WHERE tf.amount < 300 and
tf.tarif_conditions = 'Comfort' and
tf.id_ticket = bs.id_ticket

11
--26. Afișați pasagerii ce au mers în scaun Economy cu prețul sub 200 euro.

SELECT t.passenger_name, tf.id_ticket, bs.seat_no, tf.tarif_conditions, tf.amount


FROM Tickets t, Ticket_flights tf, Boarding_passes bs
WHERE tf.amount < 200 and
tf.tarif_conditions LIKE 'Economy' and
t.id_ticket = tf.id_ticket and
tf.id_ticket = bs.id_ticket

--27. Câți pasageri în total au călătorit în scaun Economy și Comfort.

SELECT tf.tarif_conditions, count(*) as num


FROM Ticket_flights tf, Tickets t, Boarding_passes bs
WHERE t.id_ticket = tf.id_ticket and
tf.id_ticket = bs.id_ticket
GROUP BY tf.tarif_conditions
ORDER BY tf.tarif_conditions

--28. Afișați id-urile și denumirele aeroporturilor.

SELECT DISTINCT a.id_airport, cast(a.name_airport as nvarchar(30)) as Airport_Name


FROM Airports a, Flights f

12
--29. Numărul de locuri pe tarife a avioanelor.

SELECT s.tarif_conditions, count(s.tarif_conditions) as number_seats


FROM Aircrafts a, Seats s
WHERE a.aircraft_code = s.aircraft_code
GROUP BY s.tarif_conditions
ORDER BY s.tarif_conditions

--30. Viteza maximă și altitudinea maximă de zbor a avioanelor.

SELECT a.*
FROM Aircrafts a
INNER JOIN (SELECT aircraft_code, MAX(max_speed) as Max_Speed, MAX(max_altitude)
as Max_Altitude
FROM Aircrafts
GROUP BY aircraft_code) groupeda
ON a.aircraft_code = groupeda.aircraft_code

--31. Lista pasagerilor, data zborului, aeroportul din care a decolat și orașul.

SELECT t.passenger_name, f.time_departure, a.name_airport


FROM Tickets t, Flights f, Airports a, Ticket_flights tf
WHERE t.id_ticket = tf.id_ticket and
tf.id_flight = f.id_flight and
f.id_airport_departure = a.id_airport

13
--32. Cea mai mare sumă achitată pentru bilet.

SELECT DISTINCT MAX(tf.amount) as Max_Amount


FROM Tickets t, Ticket_flights tf

--33. ID-urile și denumirile aeropoartelor unde au fost cele mai multe decolări.

SELECT MAX(f.id_airport_departure) AS More_flights, cast(a.name_airport as nvarchar(20))


FROM Flights f, Airports a
WHERE f.id_airport_departure = a.id_airport
GROUP BY cast(a.name_airport as nvarchar(20))

--34. Separarea numelui și prenumelui.

SELECT passenger_name,
Substring(passenger_name, 1, CHARINDEX(' ', passenger_name)) as FirstName,
Substring(passenger_name, CHARINDEX(' ', passenger_name)+1, LEN(passenger_name)) as
LastName
Substring(passenger_name, LEN(Substring(passenger_name, 1, (CHARINDEX(' ',
passenger_name)+1))), 20) as LastName
FROM Tickets

14
15
--35. Câte zboruri au fost efectuate în luna X.

SELECT COUNT(f.actual_departure) AS Count_of_flights


FROM Flights f
WHERE f.actual_departure LIKE '%-10-%'

Concluzie
În lucrarea de laborator curentă am studiat elementele de bază ale limbajului Transact-
SQL, a structurii instrucțiunii SELECT și a tipurilor de funcții utilizate în interogări.
Microsoft SQL Server 2017 reprezinta cel mai puternic si semnificativ instrument de
gestiune a bazelor de date oferind posibilitati si facilitate de constructive si gestiune a bazelor de
date programatorului și administratorului.
Am învățat să formulez interogări pentru extragerea datelor necesare din tabelele
bazei de date și am practicat instrucțiunea SELECT pentru formularea interogărilor.

16

S-ar putea să vă placă și