SELECT g.nazwa, g.wysokosc, COUNT(DISTINCT u.wspinacz)
FROM Gory g LEFT JOIN Ekspedycje ON (g.id = e.gora AND e.rok = 1985)
LEFT JOIN UczestnicyEkspedycji u ON (e.id = u.ekspedycja)
GROUP BY g.nazwa, g.wysokosc, g.kraj
ORDER BY g.wysokosc DESC;
SELECT w.imie, w.nazwisko COUNT(e.ekspedycja)
FROM Wspinacze w LEFT JOIN UczestnicyEkspedycji u ON(w.id = u.wspinacz)
GROUP BY w.imie, w.nazwisko;
SELECT DISTINCT w.imie, w.nazwisko
FROM Wspinacze w JOIN UczestnicyEkspedycji u ON (w.id = u.wspinacz)
JOIN Ekspedycje e ON (u.ekspedycja = e.id)
WHERE e.rok = 1997;
SELECT DISTINCT w.imie, w.nazwisko
FROM Wspinacze w JOIN UczestnicyEkspedycji u ON (w.id = u.wspinacz)
JOIN Ekspedycje e ON (e.id = u.ekspedycja)
JOIN Gory g ON (g.id = e.gora)
WHERE g.wysokosc BETWEEN 5000 AND 6000;
CREATE SEQUENCE seq START WITH 100 INCREMENT BY 1;
INSERT INTO Wspinacze VALUES (seq.nextval, 'Piotr', 'Pustelnik', 1951);
INSERT INTO Wspinacze VALUES (seq.nextval, 'Piotr', 'Morawski', 1976);
INSERT INTO Wspinacze VALUES (seq.nextval, 'Dariusz', 'Załuski', 1959);
INSERT INTO Wspinacze VALUES (seq.nextval, 'Peter', 'Hamor', 1964);
INSERT INTO Gory VALUES (seq.nextval, 'Annapurna', 8091, 'Nepal');
INSERT INTO Ekspedycje VALUES (seq.nextval, 2008,
(SELECT id FROM Gory WHERE nazwa = 'Annapurna' AND kraj = 'Nepal' AND wysokosc = 8091));
INSERT INTO UczestnicyEkspedycji
(SELECT (SELECT e.id FROM Ekspedycje e
WHERE e.rok = 2008 AND
e.gora = (SELECT id FROM Gory WHERE nazwa = 'Annapurna' AND kraj = 'Nepal' AND wysokosc = 8091)), w.id, 0
FROM Wspinacze w
WHERE (w.imie = 'Piotr' AND w.nazwisko IN ('Pustelnik', 'Morawski')) OR
(w.imie = 'Dariusz' AND w.nazwisko = 'Załuski') OR
(w.imie = 'Peter' AND w.nazwisko = 'Hamor'));
UPDATE UczestnicyEkspedycji
SET szef = 1
WHERE wspinacz = (SELECT id FROM Wspinacze WHERE imie = 'Piotr' AND nazwisko = 'Pustelnik');
SELECT DISTINCT g.nazwa
FROM Gory g JOIN Ekspedycje e ON (g.id = e.gora)
WHERE e.rok < 1990;
SELECT DISTINCT g.nazwa
FROM Gory g JOIN Ekspedycje e ON (g.id = e.gora)
JOIN UczestnicyEkspedycji u ON (e.id = u.ekspedycja)
JOIN Wspinacze w ON (w.id = u.wspinacz)
WHERE e.rok - w.rok_urodzenia > 40;
SELECT DISTINCT g.nazwa
FROM Gory g JOIN Ekspedycje e ON (g.id = e.gora)
JOIN UczestnicyEkspedycji u ON (e.id = u.ekspedycja)
JOIN Wspinacze w ON (w.id = u.wspinacz)
WHERE w.imie = 'Piotr' AND w.nazwisko = 'Pustelnik' AND u.szef = 1
INTERSECT
SELECT DISTINCT g.nazwa
FROM Gory g JOIN Ekspedycje e ON (g.id = e.gora)
JOIN UczestnicyEkspedycji u ON (e.id = u.ekspedycja)
JOIN Wspinacze w ON (w.id = u.wspinacz)
WHERE w.imie = 'Piotr' AND w.nazwisko = 'Morawski';
CREATE VIEW Wszystko AS
SELECT g.id AS goraid, g.nazwa AS nazwa, g.wysokosc AS wysokosc,w.imie AS imie, w.nazwisko AS nazwisko, e.rok AS rok
FROM Gory g JOIN Ekspedycje e ON (g.id = e.gora)
JOIN UczestnicyEkspedycji u ON (e.id = u.ekspedycja)
JOIN Wspinacze w ON (w.id = u.wspinacz)
WHERE w.imie = 'Leszek' AND w.nazwisko = 'Cichy' AND e.rok < 1990;
SELECT DISTINCT g.nazwa
FROM Wszystko all
WHERE 3 > (SELECT COUNT(goraid) FROM Wszystko WHERE wysokosc > all.wysokosc);