1.


CREATE SEQUENCE serial_member START 0;

CREATE TABLE gymmember (
    membershipID INTEGER PRIMARY KEY , DEFAULT nextval('serial_member')
    firstname VARCHAR(10),
    lastname VARCHAR(20),
    traininglevel INTEGER,
    birthdate DATE
);

CREATE SEQUENCE serial_instructor START 0;

CREATE TABLE instructor (
  instructorID    INTEGER  PRIMARY KEY DEFAULT nextval('serial_instructor'),
  firstname       VARCHAR(10),
  lastname        VARCHAR(20),
  isdietician     BOOL
);

CREATE SEQUENCE serial_class START 0;

CREATE TABLE class (
  classID         INTEGER PRIMARY KEY DEFAULT nextval('serial_class'),
  instructorID    INTEGER REFERENCES instructor(instructorID),
  weekday         VARCHAR(9),
  room            CHAR(5),
  starttime       TIME,
  occurencenumber INTEGER
);

CREATE SEQUENCE serial_test START 0;

CREATE TABLE test (
  testID     INTEGER  PRIMARY KEY DEFAULT nextval('serial_test'),
  maxpoints  INTEGER
);

CREATE TABLE taketest (
  membershipID      INTEGER REFERENCES gymmember(membershipID),
  testID            INTEGER REFERENCES test(testID),
  achievedpoints    INTEGER,
  PRIMARY KEY (membershipID, testID)
);

CREATE TABLE participates (
  membershipID      INTEGER REFERENCES gymmember(membershipID),
  classID           INTEGER REFERENCES class(classID),
  PRIMARY KEY (membershipID, classID)
);

2.

1.1
SELECT name, domain
FROM god
WHERE olympian = true
ORDER BY name DESC;


1.2
SELECT name, death_toll
FROM disaster NATURAL JOIN caused s
JOIN god ON god.name = s.god_name
WHERE did >= 1 AND death_toll > 11 AND olympian = true
ORDER BY  name DESC, death_toll DESC;


3.
SELECT name, strength
FROM demigod
WHERE strength > 9000 AND name NOT IN (
  SELECT DISTINCT name
  FROM demigod JOIN heroic_deed 
  ON demigod.name = heroic_deed.demigod_name
  WHERE date >= '0039-05-07');
  
7.
SELECT DISTINCT oid, item, amount
FROM offering NATURAL JOIN offered_to s
JOIN god ON god.name = s.god_name
WHERE olympian = true AND amount >= ALL ( 
  SELECT amount
  FROM offering);
  
9.
SELECT name, birthday 
FROM human JOIN worships 
 ON human.name = worships.human_name
 AND human.birthday = worships.human_birthday
GROUP BY human.name, human.birthday
HAVING COUNT(worships.god_name) = (SELECT COUNT(name)
  FROM god);
  
10.
SELECT s.human_name
FROM (SELECT human_name, human_birthday
 FROM worships
 WHERE god_name = 'Zeus'
 UNION ALL
 SELECT human_name, human_birthday
 FROM offered_to
 WHERE god_name = 'Zeus') s
WHERE (s.human_name, s.human_birthday)
NOT IN (SELECT human_name, human_birthday
 FROM parents
 WHERE god_name = 'Zeus');