


CREATE TABLE DEPARTMENT( name VARCHAR(50) NOT NULL, code CHAR(5) NOT NULL, total_staff_number DECIMAL(2) NOT NULL, chair VARCHAR(50) NULL, budget DECIMAL(9,1) NOT NULL, CONSTRAINT dept_pkey PRIMARY KEY(name), CONSTRAINT dept_ckey1 UNIQUE(code), CONSTRAINT dept_ckey2 UNIQUE(chair), CONSTRAINT dept_check1 CHECK (total_staff_number BETWEEN 1 AND 50) );
CREATE TABLE COURSE(
cnum CHAR(7) NOT NULL,
title VARCHAR(200) NOT NULL,
credits DECIMAL(2) NOT NULL,
offered_by VARCHAR(50) NULL,
CONSTRAINT course_pkey PRIMARY KEY(cnum),
CONSTRAINT course_check1 CHECK (credits IN (6, 12)),
CONSTRAINT course_fkey1 FOREIGN KEY(offered_by)
REFERENCES DEPARTMENT(name) ON DELETE CASCADE );
DEPARTMENT name | code | total_staff_number | chair | budget
COURSE cnum | title | credits | offered_by
SELECT COURSE.title
FROM COURSE JOIN DEPARTMENT
ON DEPARTMENT.name = COURSE.offered_by
WHERE DEPARTMENT.chair = 'Peter';
SELECT title
FROM COURSE JOIN DEPARTMENT
ON name = offered_by
WHERE chair = 'Peter';
SELECT C.title
FROM COURSE C JOIN DEPARTMENT D
ON D.name = C.offered_by
WHERE D.chair = 'Peter';
SELECT COURSE.title FROM COURSE, DEPARTMENT WHERE DEPARTMENT.name = COURSE.offered_by AND DEPARTMENT.chair = 'Peter';
SELECT title FROM COURSE, DEPARTMENT WHERE name = offered_by AND chair = 'Peter';
SELECT COURSE.title
FROM COURSE JOIN DEPARTMENT
ON DEPARTMENT.name = COURSE.offered_by
WHERE DEPARTMENT.chair = 'Peter';
SELECT title
FROM COURSE JOIN DEPARTMENT
ON name = offered_by
WHERE chair = 'Peter';
SELECT C.title
FROM COURSE C JOIN DEPARTMENT D
ON D.name = C.offered_by
WHERE D.chair = 'Peter';
DEPARTMENT dname | code | total staff number | chair | budget
EMPLOYEE enum | ename | dname
SELECT ename FROM EMPLOYEE NATURAL JOIN DEPARTMENT WHERE chair = 'James Bond';
SELECT ename
FROM EMPLOYEE JOIN DEPARTMENT
ON EMPLOYEE.dname = DEPARTMENT.dname
WHERE chair = 'James Bond';
DEPARTMENT dname | code | total staff number | chair | budget
EMPLOYEE enum | ename | dname
SELECT ename
FROM EMPLOYEE JOIN DEPARTMENT
USING(dname)
WHERE chair = 'James Bond';
SELECT ename
FROM EMPLOYEE JOIN DEPARTMENT
ON EMPLOYEE.dname = DEPARTMENT.dname
WHERE chair = 'James Bond';

DEPARTMENT dname | code | total staff number | chair | budget
EMPLOYEE enum | ename | dname
SELECT ename, chair FROM EMPLOYEE CROSS JOIN DEPARTMENT;
SELECT ename, chair FROM EMPLOYEE JOIN DEPARTMENT;
SELECT ename, chair FROM EMPLOYEE, DEPARTMENT;


COURSE
cnum | title | credits
STUDENT
snum | name | degree
ENROLMENT
cnum | snum | edate | result
SELECT STUDENT.name
FROM COURSE JOIN ENROLMENT
ON COURSE.cnum = ENROLMENT.cnum
JOIN STUDENT
ON ENROLMENT.snum = STUDENT.snum
WHERE COURSE.title = 'Java';
SELECT STUDENT.name
FROM COURSE JOIN ENROLMENT
ON COURSE.cnum = ENROLMENT.cnum
JOIN STUDENT
ON ENROLMENT.snum = STUDENT.snum
WHERE COURSE.title = 'Java';
SELECT STUDENT.name
FROM COURSE, ENROLMENT, STUDENT
WHERE COURSE.cnum = ENROLMENT.cnum AND ENROLMENT.snum = STUDENT.snum AND
COURSE.title = 'Java';
SELECT STUDENT.name
FROM ( SELECT *
FROM COURSE JOIN ENROLMENT
ON COURSE.cnum = ENROLMENT.cnum
WHERE COURSE.title = 'Java' ) CE JOIN STUDENT
ON CE.snum = STUDENT.snum
WHERE COURSE.title = 'Java';


EMPLOYEE enum, name, manager
+------+-------+---------+ | enum | name | manager | +------+-------+---------+ | 10 | John | NULL | | 20 | Peter | 10 | | 30 | Mary | 10 | | 40 | Mike | 20 | | 50 | Kate | 20 | | 60 | Greg | 50 | | 70 | Phil | 50 | +------+-------+---------+
SELECT manager FROM EMPLOYEE WHERE enum = 40;
20
SELECT name FROM EMPLOYEE WHERE enum = 20;
Peter
E1 E2 +------+-------+---------+ +------+-------+---------+ | enum | name | manager | | enum | name | manager | +------+-------+---------+ +------+-------+---------+ | 10 | John | NULL | | 10 | John | NULL | | 20 | Peter | 10 | -------->| 20 | Peter | 10 | | 30 | Mary | 10 | | | 30 | Mary | 10 | | 40 | Mike | 20 |----- | 40 | Mike | 20 | | 50 | Kate | 20 | | 50 | Kate | 20 | | 60 | Greg | 50 | | 60 | Greg | 50 | | 70 | Phil | 50 | | 70 | Phil | 50 | +------+-------+---------+ +------+-------+---------+
| 40 | Mike | 20 |
| 20 | Peter | 10 |
SELECT E2.name
FROM EMPLOYEE E1 JOIN EMPLOYEE E2
ON E1.manager = E2.enum
WHERE E1.enum = 40;
E1 E2 +------+-------+---------+ +------+-------+---------+ | enum | name | manager | | enum | name | manager | +------+-------+---------+ +------+-------+---------+ | 10 | John | NULL | | 10 | John | NULL | | 20 | Peter | 10 | -------->| 20 | Peter | 10 | | 30 | Mary | 10 | | | 30 | Mary | 10 | | 40 | Mike | 20 |----- | 40 | Mike | 20 | | 50 | Kate | 20 | | 50 | Kate | 20 | | 60 | Greg | 50 | | 60 | Greg | 50 | | 70 | Phil | 50 | | 70 | Phil | 50 | +------+-------+---------+ +------+-------+---------+
SELECT manager FROM EMPLOYEE WHERE enum = 40;
SELECT name FROM EMPLOYEE WHERE enum = 20;
( SELECT manager FROM EMPLOYEE WHERE enum = 40 ) E40
SELECT EMPLOYEE.name
FROM EMPLOYEE JOIN ( SELECT manager
FROM EMPLOYEE
WHERE enum = 40 ) E40
ON EMPLOYEE.enum = E40.manager;
+------+-------+---------+ | enum | name | manager | +------+-------+---------+ | 10 | John | NULL | | 20 | Peter | 10 | | 30 | Mary | 10 | | 40 | Mike | 20 | | 50 | Kate | 20 | | 60 | Greg | 50 | | 70 | Phil | 50 | +------+-------+---------+
E1 E2 +------+-------+---------+ +------+-------+---------+ | enum | name | manager | | enum | name | manager | +------+-------+---------+ +------+-------+---------+ | 10 | John | NULL | | 10 | John | NULL | | 20 | Peter | 10 | | 20 | Peter | 10 | | 30 | Mary | 10 | | 30 | Mary | 10 | | 40 | Mike | 20 | | 40 | Mike | 20 | | 50 | Kate | 20 | -------- | 50 | Kate | 20 | | 60 | Greg | 50 |<---| | 60 | Greg | 50 | | 70 | Phil | 50 |<---| | 70 | Phil | 50 | +------+-------+---------+ +------+-------+---------+
| 50 | Kate | 20 |
| 60 | Greg | 50 |
| 70 | Phil | 50 |
SELECT E1.name
FROM EMPLOYEE E1 JOIN EMPLOYEE E2
ON E1.manager = E2.enum
WHERE E2.name = 'Kate';
E1 E2 +------+-------+---------+ +------+-------+---------+ | enum | name | manager | | enum | name | manager | +------+-------+---------+ +------+-------+---------+ | 10 | John | NULL | | 10 | John | NULL | | 20 | Peter | 10 | | 20 | Peter | 10 | | 30 | Mary | 10 | | 30 | Mary | 10 | | 40 | Mike | 20 | | 40 | Mike | 20 | | 50 | Kate | 20 | -------- | 50 | Kate | 20 | | 60 | Greg | 50 |<---| | 60 | Greg | 50 | | 70 | Phil | 50 |<---| | 70 | Phil | 50 | +------+-------+---------+ +------+-------+---------+
SELECT enum FROM EMPLOYEE WHERE name = 'Kate';
SELECT name FROM EMPLOYEE WHERE manager = 50;
( SELECT enum FROM EMPLOYEE WHERE name = 'Kate' ) KATE
SELECT EMPLOYEE.name
FROM EMPLOYEE JOIN ( SELECT enum
FROM EMPLOYEE
WHERE name = 'Kate' ) KATE
ON EMPLOYEE.manager = KATE.enum;