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 );
SELECT name, title
FROM DEPARTMENT JOIN COURSE
ON name = offered_by;



SELECT name, title FROM DEPARTMENT LEFT OUTER JOIN COURSE ON name = offered_by;
SELECT name, title FROM DEPARTMENT LEFT OUTER JOIN COURSE ON name = offered_by;
+-------------+------+-------+--------+--------+ +---------+-----------+---------+-------------+ | name | code | t_s_n | chair | budget | | cnum | title | credits | offered_by | +-------------+------+-------+--------+--------+ +---------+-----------+---------+-------------+ | Mathematics | MATH | 7 | Peter | 200.0 | | MATH101 | Calculus | 6 | Mathematics | | Physics | PHY | 5 | Albert | 100.1 | | PHYS101 | Mechanics | 6 | Physics | | Biology | BIOL | 0 | Mary | 0.0 | | MATH300 | Topology | 12 | NULL | +-------------+------+-------+--------+--------+ +---------+-----------+---------+-------------+
+-------------+------+-------+--------+--------+---------+-----------+---------+-------------+ | name | code | t_s_n | chair | budget | cnum | title | credits | offered_by | +-------------+------+-------+--------+--------+---------+-----------+---------+-------------+ | Mathematics | MATH | 7 | Peter | 200.0 | MATH101 | Calculus | 6 | Mathematics | | Physics | PHY | 5 | Albert | 100.1 | PHYS101 | Mechanics | 6 | Physics | | Biology | BIOL | 0 | Mary | 0.0 | NULL | NULL | NULL | NULL | +-------------+------+-------+--------+--------+---------+-----------+---------+-------------+
SELECT name, title FROM DEPARTMENT LEFT OUTER JOIN COURSE ON name = offered_by;
+-------------+-----------+ | name | title | +-------------+-----------+ | Mathematics | Calculus | | Physics | Mechanics | | Biology | NULL | +-------------+-----------+
SELECT name, title FROM DEPARTMENT RIGHT OUTER JOIN COURSE ON name = offered_by;
SELECT name, title FROM DEPARTMENT RIGHT OUTER JOIN COURSE ON name = offered_by;
+-------------+------+-------+--------+--------+ +---------+-----------+---------+-------------+ | name | code | t_s_n | chair | budget | | cnum | title | credits | offered_by | +-------------+------+-------+--------+--------+ +---------+-----------+---------+-------------+ | Mathematics | MATH | 7 | Peter | 200.0 | | MATH101 | Calculus | 6 | Mathematics | | Physics | PHY | 5 | Albert | 100.1 | | PHYS101 | Mechanics | 6 | Physics | | Biology | BIOL | 0 | Mary | 0.0 | | MATH300 | Topology | 12 | NULL | +-------------+------+-------+--------+--------+ +---------+-----------+---------+-------------+
+-------------+------+-------+--------+--------+---------+-----------+---------+-------------+ | name | code | t_s_n | chair | budget | cnum | title | credits | offered_by | +-------------+------+-------+--------+--------+---------+-----------+---------+-------------+ | Mathematics | MATH | 7 | Peter | 200.0 | MATH101 | Calculus | 6 | Mathematics | | Physics | PHY | 5 | Albert | 100.1 | PHYS101 | Mechanics | 6 | Physics | | NULL | NULL | NULL | NULL | NULL | MATH300 | Topology | 12 | NULL | +-------------+------+-------+--------+--------+---------+-----------+---------+-------------+
SELECT name, title FROM DEPARTMENT RIGHT OUTER JOIN COURSE ON name = offered_by;
+-------------+-----------+ | name | title | +-------------+-----------+ | Mathematics | Calculus | | NULL | Topology | | Physics | Mechanics | +-------------+-----------+
SELECT name, title
FROM DEPARTMENT FULL OUTER JOIN COURSE
ON name = offered_by;
SELECT name, title
FROM DEPARTMENT LEFT OUTER JOIN COURSE
ON name = offered_by
UNION
SELECT name, title
FROM DEPARTMENT RIGHT OUTER JOIN COURSE
ON name = offered_by;
SELECT offered_by, COUNT(*) FROM COURSE GROUP BY offered_by;
SELECT name, count(title)
FROM DEPARTMENT LEFT OUTER JOIN COURSE
ON DEPARTMENT.name = COURSE.offered_by
GROUP BY name;
SELECT name, count(title)
FROM DEPARTMENT LEFT OUTER JOIN COURSE
ON DEPARTMENT.name = COURSE.offered_by
GROUP BY name;