|
3.6 Multi-Table Joins [Top]
-----------------------------------------------------------------------------------
CREATE TABLE customer (
id INTEGER NOT NULL DEFAULT AUTOINCREMENT,
fname CHAR ( 15 ) NOT NULL,
lname CHAR ( 20 ) NOT NULL,
address CHAR ( 35 ) NOT NULL,
city CHAR ( 20 ) NOT NULL,
state CHAR ( 16 ) NULL,
zip CHAR ( 10 ) NULL,
phone CHAR ( 12 ) NOT NULL,
company_name CHAR ( 35 ) NULL,
PRIMARY KEY ( id ) );
CREATE TABLE employee (
emp_id INTEGER NOT NULL PRIMARY KEY,
manager_id INTEGER NULL,
emp_fname CHAR ( 20 ) NOT NULL,
emp_lname CHAR ( 20 ) NOT NULL,
dept_id INTEGER NOT NULL,
street CHAR ( 40 ) NOT NULL,
city CHAR ( 20 ) NOT NULL,
state CHAR ( 16 ) NULL,
zip_code CHAR ( 10 ) NULL,
phone CHAR ( 10 ) NULL,
status CHAR ( 2 ) NULL,
ss_number CHAR ( 11 ) NULL,
salary NUMERIC ( 20, 3 ) NOT NULL,
start_date DATE NOT NULL,
termination_date DATE NULL,
birth_date DATE NULL,
bene_health_ins CHAR ( 2 ) NULL,
bene_life_ins CHAR ( 2 ) NULL,
bene_day_care CHAR ( 2 ) NULL,
sex CHAR ( 2 ) NULL );
CREATE TABLE fin_code (
code CHAR ( 2 ) NOT NULL PRIMARY KEY,
type CHAR ( 10 ) NOT NULL,
description CHAR ( 50 ) NULL );
CREATE TABLE product (
id INTEGER NOT NULL,
name CHAR ( 15 ) NOT NULL,
description CHAR ( 30 ) NOT NULL,
size CHAR ( 18 ) NOT NULL,
color CHAR ( 6 ) NOT NULL,
quantity INTEGER NOT NULL,
unit_price NUMERIC ( 15, 2 ) NOT NULL,
PRIMARY KEY ( id ) );
CREATE TABLE sales_order (
id INTEGER NOT NULL DEFAULT AUTOINCREMENT,
cust_id INTEGER NOT NULL REFERENCES customer ( id ),
order_date DATE NOT NULL,
fin_code_id CHAR ( 2 ) NULL REFERENCES fin_code ( code ),
region CHAR ( 7 ) NULL,
sales_rep INTEGER NOT NULL REFERENCES employee ( emp_id ),
PRIMARY KEY ( id ) );
CREATE TABLE sales_order_items (
id INTEGER NOT NULL REFERENCES sales_order ( id ),
line_id SMALLINT NOT NULL,
prod_id INTEGER NOT NULL REFERENCES product ( id ),
quantity INTEGER NOT NULL,
ship_date DATE NOT NULL,
PRIMARY KEY ( id, line_id ) );
-----------------------------------------------------------------------------------
SELECT customer.company_name,
sales_order.order_date,
product.name,
product.description,
sales_order_items.quantity,
product.unit_price * sales_order_items.quantity AS amount
FROM customer
INNER JOIN sales_order
ON sales_order.cust_id = customer.id
INNER JOIN sales_order_items
ON sales_order_items.id = sales_order.id
INNER JOIN product
ON product.id = sales_order_items.prod_id
ORDER BY customer.company_name,
sales_order.order_date,
product.name;
-----------------------------------------------------------------------------------
FROM ( ( ( customer
INNER JOIN sales_order
ON sales_order.cust_id = customer.id )
INNER JOIN sales_order_items
ON sales_order_items.id = sales_order.id )
INNER JOIN product
ON product.id = sales_order_items.prod_id )
-----------------------------------------------------------------------------------
SELECT customer.company_name AS company_name,
product.name AS product_name,
product.description AS product_description,
SUM ( sales_order_items.quantity ) AS quantity,
SUM ( product.unit_price
* sales_order_items.quantity ) AS amount
FROM ( customer
CROSS JOIN product )
LEFT OUTER JOIN
( sales_order
INNER JOIN sales_order_items
ON sales_order_items.id = sales_order.id )
ON customer.id = sales_order.cust_id
AND product.id = sales_order_items.prod_id
WHERE customer.state = 'DC'
AND product.name LIKE '%shirt%'
GROUP BY customer.company_name,
product.name,
product.description
ORDER BY customer.company_name,
product.name,
product.description;
-----------------------------------------------------------------------------------
SELECT sales_order.order_date AS order_date,
sales_order.id AS order_id,
customer.company_name AS customer_name,
STRING ( employee.emp_fname,
' ',
employee.emp_lname ) AS rep_name,
fin_code.description AS fin_code
FROM sales_order
INNER JOIN customer
ON sales_order.cust_id = customer.id
INNER JOIN employee
ON sales_order.sales_rep = employee.emp_id
INNER JOIN fin_code
ON sales_order.fin_code_id = fin_code.code
WHERE sales_order.order_date BETWEEN '2000-01-02' AND '2000-01-06'
ORDER BY order_date,
order_id;
----------------------------------------------------------------------------------- |
|