Answer to Lecture Assignment No.3

8.10
CREATE TABLE Publisher
(
    Name  CHAR(30),
    Address CHAR(50),
    Phone CHAR(12),

    CONSTRAINT NameIsPK PRIMARY KEY (Name),
);

CREATE TABLE BOOK
(  BookID    INTEGER,
   Title  CHAR(50),
   PublishName  CHAR(30),

   CONSTRAINT BookidIsPK PRIMARY KEY (BookID),
   CONSTRAINT PublishNameIsFK FOREIGN KEY REFERENCES PUBLISHER(Name) ON DELETE SET NULL ON UPDATE CASCADE,
);

CREATE TABLE LIBRARY_BRANCH
(
    BranchID  INTEGER,
    BranchName CHAR(20),
    Address  CHAR(50),

   CONSTRAINT BranchIdIsPK PRIMARY KEY (BranchID),
);

CREATE TABLE BOOK_COPIES
(
    BookID  INTEGER,
    BranchID  INTEGER,
    No_Of_Copies  INTEGER,

    CONSTRAINT B_B_IdIsPK PRIMARY KEY (BookID, BranchID),
    CONSTRAINT BookIDIsFK FOREIGN KEY REFERENCES BOOK(BookID) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT BranchIDIsFK FOREIGN KEY REFERENCES LIBRARY_BRANCH(BranchID) ON DELETE CASCADE ON UPDATE CASCADE,
);

CREATE TABLE BORROWER
(
    CardNo  INTEGER,
    Name  CHAR(20),
    Address CHAR(50),
    Phone CHAR(12),

    CONSTRAINT CardNoIsPK PRIMARY KEY (CardNo),
);

CREATE TABLE BOOK_LOANS
(
    BookID  INTEGER,
    BranchID  INTEGER,
    CardNo  INTEGER,
    DateOut  DATE,
    DueDate  DATE,

    CONSTRAINT B_B_C_IsPK PRIMARY KEY (BookID, BranchID, CardNo),
    CONSTRAINT BookIDIsFK FOREIGN KEY REFERENCES BOOK(BookID) ON DELETE RESTRICT ON UPDATE RESTRICT,
    CONSTRAINT BranchIDIsFK FOREIGN KEY REFERENCES LIBRARY_BRANCH(BranchID) ON DELETE RESTRICT ON UPDATE RESTRICT,
    CONSTRAINT CardNoIsFK FOREIGN KEY REFERENCES BORROWER(BranchID) ON DELETE RESTRICT ON UPDATE RESTRICT,
);
 

CREATE BOOK_AUTHORS
(
    BookID  INTEGER,
    AuthorName  CHAR(20),

    CONSTRAINT B_A_IsPK PRIMARY KEY (BookID, AuthorName),
    CONSTRAINT BookIDIsFK FOREIGN KEY REFERENCES BOOK(BookID) ON DELETE CASCADE ON UPDATE CASCADE,

);

8.16

a)  SELECT Name
     FROM STUDENT
     WHERE Class = 4 AND Major = 'CS';

b)  SELECT CourseName
     FROM COURSE, SECTION
     WHERE COURSE.CourseNumber = SECTION.CourseNumber AND Instructor = 'King' AND ( Year = 98 OR Year = 99);

c)  SELECT CourseNumber, Semester, Year, COUNT(StudentNumber)
     FROM SECTION AS S, GRADE_REPORT AS G
     WHERE S.SectionIdentifier = G.SectionIdentifier AND Instructor = 'King'
     GROUP BY CourseNumber, Semester, Year

d)  SELECT Name, CourseName, CourseNumber, CreditHours, Semester, Year, Grade
     FROM STUDENT, COURSE, SECTION, GRADE_REPORT
     WHERE  STUDENT.StudentNumber = GRADE_REPORT.StudentNumber AND
                    COURSE.CourseNumber = SECTION.CourseNumber AND
                    SECTION.SectionIdentifier = GRADE_REPORT.SectionIdentifier AND
                    STUDENT.Class = 5 AND STUDENT.Major = 'CS';

e)  SELECT Name, Major
     FROM STUDENT
     WHERE StudentNumber NOT IN
                                      ( SELECT StudentNumber
                                        FROM GRADE_REPORT
                                        WHERE Grade <> 'A' )
                                AND
                    StudentNumber IN
                                      (SELECT StudentNumber
                                       FROM GRADE_REPORT
                                       WHERE Grade = 'A');
 

f)  SELECT Name, Major
    FROM STUDENT
    WHERE StudentNumber NOT IN
           ( SELECT  StudentNumber
             FROM GRADE_REPORT
             WHERE Grade = 'A'
          );
 

8.17
a)  INSERT INTO STUDENT(Name, StudentNumber, Class, Major) VALUES ( 'Johnson', 25, 1, 'CS');

b) UPDATE STUDENT SET Class = 2 WHERE Name = 'Smith';

c) INSERT INTO COURSE(CourseName, CourseNumber, CreditHours, Department)
    VALUES ( 'Knowledge Engineering', 'CS4390', 3, 'CS');
 

8.18
a) CREATE VIEW DeptInfo(DeptName, ManagerFName,ManagerLName ManagerSalary) AS
        SELECT DNAME, FNAME, LNAME, SALARY
        FROM EMPLOYEE, DEPARTMENT
        WHERE MGRSSN = SSN;

b)  CREATE VIEW ResearchEmp(EmpFName, EmpLName, SupervisorFName, SupervisorLName, Salary) AS
       SELECT E1.FNAME, E1.LNAME, E2.FNAME, E2.LNAME, S1.SALARY
       FROM EMPLOYEE AS E1, EMPLOYEE AS E2, DEPARTMENT AS D
       WHERE E1.SUPERSSN = E2.SSN AND E1.DNO = D.DNUMBER AND D.DNAME = 'Research';

c)  CREATE VIEW ProjectInfo(ProjectName, DeptName, No_Of_Emp, Total_Hours) AS
        SELECT P.PNAME, D.DNAME, COUNT(W.ESSN), SUM(W.HOURS)
        FROM PROJECT AS P, WORKS_ON AS W, DEPARTMENT AS D
        WHERE P.PNUMBER = W.PNO AND P.DNUM = D.DNUMBER
        GROUP BY P.PNAME, D.DNAME;