przyklady_sql.pdf

(89 KB) Pobierz
Przyk³ady rozwi¹zañ zadañ w jêzyku SQL:
Przykłady rozwiązań zadań w języku SQL:
1. Podać datę pierwszego i ostatniego egzaminu przeprowadzonego w każdym z ośrodków.
SELECT o.id_osrodek, nazwa_o, MAX(data_egz), MIN(data_egz)
FROM osrodki o, egzaminy e
WHERE o.id_osrodek = e.id_osrodek(+)
GROUP BY o.id_osrodek, nazwa_o ;
2. Który egzaminator przeprowadził najwięcej egzaminów w poszczególnych ośrodkach?
SELECT o.id_osrodek, nazwa_o, g.id_egzaminator, nazwisko, imie, COUNT(*)
FROM osrodki o, egzaminy e, egzaminatorzy g
WHERE o.id_osrodek = e.id_osrodek and g.id_egzaminator = e.id_egzaminator
GROUP BY o.id_osrodek, nazwa_o, g.id_egzaminator, nazwisko, imie
HAVING COUNT(*) = (SELECT MAX(count(*)) FROM egzaminy
WHERE id_osrodek = o.id_osrodek
GROUP BY id_osrodek, id_egzaminator) ;
3. Który student zdawał pierwszy egzamin w każdym z ośrodków?
SELECT o.id_osrodek, nazwa_o, s.id_student, nazwisko, imie, data_egz
FROM osrodki o, egzaminy e, studenci s
WHERE o.id_osrodek = e.id_osrodek and s.id_student = e.id_student
GROUP BY o.id_osrodek, nazwa_o, s.id_student, nazwisko, imie, data_egz
HAVING data_egz = (SELECT MIN(data_egz) FROM egzaminy
WHERE id_osrodek = o.id_osrodek
GROUP BY id_osrodek) ;
4. Ile osób zdawało egzaminy w poszczególnych ośrodkach?
SELECT o.id_osrodek, nazwa_o NAZWA, COUNT(DISTINCT e.id_student) LICZBA_OSÓB
FROM osrodki o, egzaminy e
WHERE o.id_osrodek = e.id_osrodek(+)
GROUP BY o.id_osrodek, nazwa_o ;
1
5. Który egzaminator egzaminował najwięcej osób?
SELECT e.id_egzaminator, nazwisko, imie
FROM egzaminatorzy g, egzaminy e
WHERE g.id_egzaminator = e.id_egzaminator
GROUP BY e.id_egzaminator, nazwisko, imie
HAVING COUNT(DISTINCT id_student) = (SELECT MAX(COUNT(DISTINCT id_student))
FROM egzaminy GROUP BY id_egzaminator)
6. W którym miesiącu i którego roku przeprowadzono najwięcej egzaminów w ośrodku o nazwie Atena?
Podać nazwę miesiąca i rok czterocyfrowy.
SELECT TO_CHAR(Data_egz,'MONTH,YYYY') Data_egz, o.id_osrodek, Nazwa_o, COUNT(*)
FROM osrodki o, egzaminy e
WHERE o.id_osrodek = e.id_osrodek AND nazwa_o = 'Atena'
GROUP BY TO_CHAR(Data_egz,'MONTH,YYYY'), o.id_osrodek, Nazwa_o
HAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM osrodki o1, egzaminy e1
WHERE o1.id_osrodek = e1.id_osrodek AND nazwa_o = 'Atena'
GROUP BY o1.id_osrodek, to_char(data_egz,'MONTH,YYYY'))
7. Zdefiniować perspektywę, która umożliwi wyświetlenie informacji na temat:
Z których przedmiotów przeprowadzono najwięcej egzaminów w poszczególnych ośrodkach? Podać
identyfikator i nazwę ośrodka oraz identyfikator i nazwę przedmiotu.
CREATE VIEW v_test_1 AS
SELECT o.id_osrodek, nazwa_o , p.id_przedmiot, nazwa_p, COUNT(*) Liczba
FROM przedmioty p, egzaminy e, osrodki o
WHERE p.id_przedmiot = e.id_przedmiot AND o.id_osrodek = e.id_osrodek
GROUP BY o.id_osrodek, nazwa_o, p.id_przedmiot, nazwa_p
HAVING COUNT(*) = (SELECT MAX(count(*)) FROM egzaminy
WHERE id_osrodek = o.id_osrodek
GROUP BY id_osrodek, id_przedmiot) ;
2
Zgłoś jeśli naruszono regulamin