You may make a copy of a worksheet and complete this activity, or simply type your answers in any text editor.
You may work alone or with 3-4 other students in this course (max size=5).
Consider the Santa_Workshop database. Refer to the Santa's workshop database scenario.
    Elf(badge, name, wname)   
          –- FK: wname references Workshop(wname)
is_supervised(badge, sbadge)   
          –- PK: badge, an elf can have at most one supervisor, 
      a supervisor can supervise many elves
          –- FK: badge references Elf(badge)
          –- FK: sbadge references Elf(badge)
Workshop(wname, location)
Toy(toy_id, toy_name)
Built_in(toy_id, wname)
          –- FK: toy_id references Toy(toy_id)
          –- FK: wname references Workshop(wname)
Evaluation(badge, rater, rate_date, rating)
          -- FK: badge references Elf(badge)
          -- FK: rater references Elf(badge)
          -- assume rating is of type INT      
          No. Just because it is a key in one relation doesn't mean it is in another. Being a key is relative to the relation. In this scenario, we want to be able to keep track of multiple workshops that build one toy (and also multiple toys that are built in one workshop).
CREATE TABLE Workshop(wname VARCHAR(255), 
                    location VARCHAR(255),
                    PRIMARY KEY (wname));
CREATE TABLE Toy(toy_id VARCHAR(30), 
                    toy_name VARCHAR(255),
                    PRIMARY KEY (toy_id));
CREATE TABLE Built_in(toy_id VARCHAR(30), 
                    wname VARCHAR(255),
                    PRIMARY KEY (toy_id, wname),
                    FOREIGN KEY (toy_id) references Toy(toy_id),
                    FOREIGN KEY (wname) references Workshop(wname));
CREATE TABLE Elf (badge VARCHAR(10), 
                    name VARCHAR(60), 
                    wname VARCHAR(255),
                    PRIMARY KEY (badge),                 
                    FOREIGN KEY (wname) REFERENCES Workshop(wname));
CREATE TABLE is_supervised (badge VARCHAR(10), 
                    sbadge VARCHAR(10),
                    PRIMARY KEY (badge),
                    FOREIGN KEY (badge) REFERENCES Elf(badge));
CREATE TABLE Evaluation(badge VARCHAR(10), 
                    rater VARCHAR(10), 
                    rate_date DATE,
                    rating INT,
                    PRIMARY KEY (badge, rater, rate_date),
                    FOREIGN KEY (rater) REFERENCES Elf(badge)); 
-- (note the order of creation - due to foreign keys)
-- To test, inserts some data
INSERT INTO Workshop VALUES ('NorthStar', '123 North St.');
INSERT INTO Workshop VALUES ('EastStar', '123 East St.');
INSERT INTO Workshop VALUES ('WestStar', '123 West St.');
INSERT INTO Workshop VALUES ('SouthStar', '123 South St.');
INSERT INTO Toy VALUES ('111', 'Car');
INSERT INTO Toy VALUES ('222', 'Book');
INSERT INTO Toy VALUES ('333', 'Doll');
INSERT INTO Toy VALUES ('444', 'Ball');
INSERT INTO Toy VALUES ('555', 'Bike');
INSERT INTO Toy VALUES ('666', 'Board game');
INSERT INTO Built_in VALUES ('111', 'NorthStar');
INSERT INTO Built_in VALUES ('222', 'SouthStar');
INSERT INTO Built_in VALUES ('222', 'WestStar');
INSERT INTO Built_in VALUES ('333', 'NorthStar');
INSERT INTO Built_in VALUES ('333', 'EastStar');
INSERT INTO Built_in VALUES ('444', 'EastStar');
INSERT INTO Built_in VALUES ('444', 'WestStar');
INSERT INTO Built_in VALUES ('444', 'NorthStar');
INSERT INTO Built_in VALUES ('555', 'EastStar');
INSERT INTO Built_in VALUES ('666', 'WestStar');
INSERT INTO Elf VALUES ('1111111111', 'Humpty', 'NorthStar');
INSERT INTO Elf VALUES ('1111111112', 'Dumpty', 'NorthStar');
INSERT INTO Elf VALUES ('1111111113', 'Wacky', 'EastStar');
INSERT INTO Elf VALUES ('1111111114', 'Duh', 'NorthStar');
INSERT INTO Elf VALUES ('1111111115', 'Huh', 'SouthStar');
INSERT INTO Elf VALUES ('1111111116', 'Duhhuh', 'SouthStar');
INSERT INTO Elf VALUES ('1111111117', 'Mickey', 'SouthStar');
INSERT INTO Elf VALUES ('1111111118', 'Minnie', 'WestStar');
INSERT INTO Elf VALUES ('1111111119', 'Goofy', 'SouthStar');
INSERT INTO Elf VALUES ('1111111120', 'Donald', 'SouthStar');
INSERT INTO Elf VALUES ('1111111121', 'Daisy', 'EastStar');
INSERT INTO Elf VALUES ('1111111122', 'Pluto', 'EastStar');
-- INSERT INTO is_supervised VALUES ('1111111111', '');
INSERT INTO is_supervised VALUES ('1111111112', '1111111111');
INSERT INTO is_supervised VALUES ('1111111113', '1111111111');
INSERT INTO is_supervised VALUES ('1111111114', '1111111112');
INSERT INTO is_supervised VALUES ('1111111115', '1111111112');
INSERT INTO is_supervised VALUES ('1111111116', '1111111114');
INSERT INTO is_supervised VALUES ('1111111117', '1111111114');
INSERT INTO is_supervised VALUES ('1111111118', '1111111114');
INSERT INTO is_supervised VALUES ('1111111119', '1111111116');
INSERT INTO is_supervised VALUES ('1111111120', '1111111114');
INSERT INTO is_supervised VALUES ('1111111121', '1111111115');
INSERT INTO is_supervised VALUES ('1111111122', '1111111116');
INSERT INTO Evaluation VALUES ('1111111112', '1111111111', '20221030', 3);
INSERT INTO Evaluation VALUES ('1111111113', '1111111111', '20221030', 4);
INSERT INTO Evaluation VALUES ('1111111114', '1111111112', '20221010', 2);
INSERT INTO Evaluation VALUES ('1111111115', '1111111112', '20221028', 3);
INSERT INTO Evaluation VALUES ('1111111114', '1111111112', '20221030', 3);
INSERT INTO Evaluation VALUES ('1111111116', '1111111114', '20221030', 1);
INSERT INTO Evaluation VALUES ('1111111117', '1111111114', '20221030', 2);
INSERT INTO Evaluation VALUES ('1111111118', '1111111114', '20221020', 3);
INSERT INTO Evaluation VALUES ('1111111118', '1111111114', '20221030', 4);
INSERT INTO Evaluation VALUES ('1111111119', '1111111116', '20220930', 3);
INSERT INTO Evaluation VALUES ('1111111119', '1111111116', '20221030', 3);
INSERT INTO Evaluation VALUES ('1111111120', '1111111114', '20220930', 3);
INSERT INTO Evaluation VALUES ('1111111120', '1111111114', '20220830', 3);
INSERT INTO Evaluation VALUES ('1111111120', '1111111114', '20220730', 4);
INSERT INTO Evaluation VALUES ('1111111120', '1111111114', '20221030', 4);
INSERT INTO Evaluation VALUES ('1111111121', '1111111115', '20220830', 2);
INSERT INTO Evaluation VALUES ('1111111122', '1111111116', '20220830', 3);
INSERT INTO Evaluation VALUES ('1111111122', '1111111116', '20220930', 4);
INSERT INTO Evaluation VALUES ('1111111122', '1111111116', '20221030', 4); 
           SELECT badge, name FROM Elf WHERE wname='NorthStar';
SELECT badge, name FROM Elf WHERE wname='NorthStar' OR wname='EastStar';
SELECT sbadge, COUNT(badge) AS count_badge FROM is_supervised GROUP BY sbadge;
SELECT DISTINCT sbadge FROM Elf, is_supervised WHERE wname='NorthStar' AND Elf.badge=is_supervised.badge; -- or SELECT DISTINCT sbadge FROM Elf NATURAL JOIN is_supervised WHERE wname='NorthStar';
SELECT sbadge FROM is_supervised GROUP BY sbadge HAVING COUNT(badge) >= 3;
SELECT E1.badge, E2.badge FROM Elf E1, Elf E2, is_supervised WHERE E1.badge=is_supervised.badge AND E2.badge=is_supervised.sbadge AND E1.wname=E2.wname; -- E1 for Elf, E2 for supervisor
SELECT DISTINCT toy_id, toy_name FROM Toy NATURAL JOIN Built_in WHERE wname='NorthStar' OR wname='EastStar'; -- Another example (SELECT toy_id, toy_name FROM Toy NATURAL JOIN Built_in WHERE wname='NorthStar') UNION (SELECT toy_id, toy_name FROM Toy NATURAL JOIN Built_in WHERE wname='EastStar');
(SELECT toy_id, toy_name
 FROM   Toy NATURAL JOIN Built_in
 WHERE  wname='NorthStar')
INTERSECT 
(SELECT toy_id, toy_name
 FROM   Toy NATURAL JOIN Built_in
 WHERE  wname='EastStar');
-- or
SELECT toy_id, toy_name
FROM   Toy NATURAL JOIN Built_in
WHERE  wname='NorthStar'
AND    toy_id IN (SELECT toy_id
                  FROM   Toy NATURAL JOIN Built_in
                  WHERE  wname='EastStar');     
          (SELECT toy_id, toy_name
 FROM   Toy NATURAL JOIN Built_in
 WHERE  wname='NorthStar')
EXCEPT
(SELECT toy_id, toy_name
 FROM   Toy NATURAL JOIN Built_in
 WHERE  wname='EastStar');
-- or
SELECT toy_id, toy_name
FROM   Toy NATURAL JOIN Built_in
WHERE  wname='NorthStar'
AND    toy_id NOT IN (SELECT toy_id
                      FROM   Toy NATURAL JOIN Built_in
                      WHERE  wname='EastStar');    
          WITH sbadge_of_NorthStarElf AS (SELECT is_supervised.sbadge
                                FROM   Elf NATURAL JOIN is_supervised
                                WHERE  Elf.wname='NorthStar')
SELECT sbadge_of_NorthStarElf.sbadge, Elf.name
FROM   sbadge_of_NorthStarElf, Elf
WHERE  sbadge_of_NorthStarElf.sbadge = Elf.badge;    
          WITH rater_count AS (SELECT   rater, COUNT(*) AS count_eval
                     FROM     Evaluation
                     GROUP BY rater)
SELECT name, count_eval
FROM   Elf, rater_count
WHERE  badge = rater;    
          
 CC-BY-NC-SA 4.0 license.