Answer 9
Answer 9
1
(Week 9)
1
FLIGHT_LEG.(FLIGHT_NUMBER) --> FLIGHT.(NNUMBER)
FLIGHT_LEG.(DEPARTURE_AIRPORT_CODE) --> AIRPORT.(AIRPORT_CODE)
FLIGHT_LEG.(ARRIVAL_AIRPORT_CODE) --> AIRPORT.(AIRPORT_CODE)
LEG_INSTANCE.(FLIGHT_NUMBER, LEG_NUMBER) -->
FLIGHT_LEG.(FLIGHT_NUMBER, LEG_NUMBER)
LEG_INSTANCE.(AIRPLANE_ID) --> AIRPLANE.(AIRPLANE_ID)
LEG_INSTANCE.(DEPARTURE_AIRPORT_CODE) --> AIRPORT.(AIRPORT_CODE)
LEG_INSTANCE.(ARRIVAL_AIRPORT_CODE) --> AIRPORT.(AIRPORT_CODE)
FARES.(FLIGHT_NUMBER) --> FLIGHT.(NNUMBER)
CAN_LAND.(AIRPLANE_TYPE_NAME) --> AIRPLANE_TYPE.(TYPE_NAME)
CAN_LAND.(AIRPORT_CODE) --> AIRPORT.(AIRPORT_CODE)
AIRPLANE.(AIRPLANE_TYPE) --> AIRPLANE_TYPE.(TYPE_NAME)
SEAT_RESERVATION.(FLIGHT_NUMBER, LEG_NUMBER, DATE) -->
LEG_INSTANCE.(FLIGHT_NUMBER, LEG_NUMBER, DATE)
2
SCHEDULED_DEPARTURE_TIME CHAR(8) NOT NULL,
ARRIVAL_AIRPORT_CODE CHAR(3) NOT NULL,
SCHEDULED_ARRIVAL_TIME CHAR(8) NOT NULL,
PRIMARY KEY (FLIGHT_NUMBER, LEG_NUMBER),
FOREIGN KEY (FLIGHT_NUMBER) REFERENCES FLIGHT (NNUMBER),
FOREIGN KEY (DEPARTURE_AIRPORT_CODE) REFERENCES
AIRPORT (AIRPORT_CODE),
FOREIGN KEY (ARRIVAL_AIRPORT_CODE) REFERENCES
AIRPORT (AIRPORT_CODE) );
3
(TYPE_NAME VARCHAR(20) NOT NULL,
MAX_SEATS INTEGER NOT NULL,
COMPANY VARCHAR(15) NOT NULL,
PRIMARY KEY (TYPE_NAME) );
_________________________________________________________________
4
(a) For each department whose average employee salary is more than
$30000, retrieve the department name and the number of employ-
ees working for that department.
(b) Suppose we want the number of male employees in each depart-
ment rather than all employees as in case (a). Can we specify this
query in SQL?
Answer:
(a) SELECT DNAME, COUNT (*)
FROM DEPARTMENT, EMPLOYEE
WHERE DNUMBER=DNO
GROUP BY DNAME
HAVING AVG (SALARY) > 30000;
(b) The query can be specied in SQL by using a nested query as
follows (not all implementations may support this type of query):
SELECT DNAME, COUNT (*)
FROM DEPARTMENT, EMPLOYEE
WHERE DNUMBER=DNO AND SEX='M' AND DNO IN (
SELECT DNO
FROM EMPLOYEE
GROUP BY DNO
HAVING AVG (SALARY) > 30000 )
GROUP BY DNAME;
_________________________________________________________________
_________________________________________________________________
6
FROM EMPLOYEE
GROUP BY DNO;
State which of the following queries and updates would be allowed on
the view. If a query or update is allowed, show what the corresponding
query or update on the base relations would look like, and give its result
when applied to the database of Figure 7.6.
(a) SELECT *
FROM DEPT_SUMMARY;
(b) SELECT D, C
FROM DEPT_SUMMARY
WHERE TOTAL_S > 100000;
(c) SELECT D, AVERAGE_S
FROM DEPT_SUMMARY
WHERE C > (SELECT C
FROM DEPT_SUMMARY
WHERE D=4);
(d) UPDATE DEPT_SUMMARY
SET D=3
WHERE D=4;
(e) DELETE FROM DEPT_SUMMARY
WHERE C > 4;
Answer:
(a) This query is allowed, and the resulting query on the base relation
would be the same query as in the view denition, which is:
SELECT DNO, COUNT (*), SUM (SALARY), AVG (SALARY)
FROM EMPLOYEE
GROUP BY DNO;
(b) This query is allowed, and the resulting query on the base relation
could be:
SELECT DNO, COUNT (*)
FROM EMPLOYEE
GROUP BY DNO
HAVING SUM(SALARY) > 100000;
7
(c) This query is allowed, and the resulting query on the base relation
could be:
SELECT DNO, AVG (SALARY)
FROM EMPLOYEE
GROUP BY DNO
HAVING COUNT(*) > (SELECT COUNT(*)
FROM EMPLOYEE
WHERE DNO=4);
(d) This update may be interpreted to mean that all EMPLOYEEs
who work for department 4 should be reassigned to department 3,
or it may be interpreted to mean that the department number is
being changed; hence, it is ambiguous.
(e) This deletion may be interpreted to mean that every department
with more than 4 employees should be deleted, or that all em-
ployees who work for a department with more than 4 employees
should be deleted; hence, it is also ambiguous.
_________________________________________________________________