Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

QUESTION 2

CUSTOMER (cust_num, cust_lname , cust_fname, cust_balance);


PRODUCT (prod_num, prod_name, price);
INVOICE (inv_num, prod_num, cust_num, inv_date ,unit_sold, inv_amount);

CREATE TABLE CUSTOMER (


cust_num INT PRIMARY KEY NOT NULL,
cust_lname VARCHAR(255) NOT NULL,
cust_fname VARCHAR(255) NOT NULL,
cust_balance INT
);

CREATE TABLE PRODUCT (


prod_num INT PRIMARY KEY NOT NULL,
prod_name VARCHAR(255) NOT NULL,
price INT
);

CREATE TABLE INVOICE (


inv_num INT PRIMARY KEY,
prod_num INT,
cust_num INT,
inv_date DATE,
unit_sold INT,
inv_amount INT,
FOREIGN KEY (prod_num) REFERENCES PRODUCT(prod_num),
FOREIGN KEY (cust_num) REFERENCES CUSTOMER(cust_num)
);

INSERT INTO CUSTOMER (cust_num, cust_lname, cust_fname, cust_balance) VALUES


(1, 'Hamilton', 'Lewis', 100000),
(2, 'Verstappen', 'Max', 80000),
(3, 'Bottas', 'Valtteri', 70000),
(4, 'Leclerc', 'Charles', 60000),
(5, 'Norris', 'Lando', 50000),
(6, 'Sainz', 'Carlos', 40000),
(7, 'Gasly', 'Pierre', 30000);

INSERT INTO INVOICE (inv_num, prod_num, cust_num, inv_date, unit_sold,


inv_amount) VALUES
(1, 1, 1, '2022-01-01', 1, 500000),
(2, 1, 2, '2022-01-02', 1, 500000),
(3, 1, 3, '2022-01-03', 1, 500000),
(4, 1, 4, '2022-01-04', 1, 500000),
(5, 1, 5, '2022-01-05', 1, 500000),
(6, 1, 6, '2022-01-06', 1, 500000),
(7, 1, 7, '2022-01-07', 1, 500000);

INSERT INTO PRODUCT (prod_num, prod_name, price) VALUES


(1, 'F1 Race Cars', 500000),
(2, 'F1 Racing Helmets', 10000),
(3, 'F1 Racing Suits', 50000),
(4, 'F1 Racing Gloves', 5000),
(5, 'F1 Racing Shoes', 10000),
(6, 'F1 Racing Steering Wheels', 20000),
(7, 'F1 Racing Tires', 100000);

a) Find the names of the customers who have purchased no item. Set default value of
Cust_balance as 0 for such customers.

SELECT cust_lname, cust_fname,


CASE
WHEN cust_balance IS NULL THEN 0
ELSE cust_balance
END as cust_balance
FROM CUSTOMER
WHERE cust_num NOT IN (SELECT cust_num FROM INVOICE);

b) Write the trigger to update the CUST_BALANCE in the CUSTOMER table when a new invoice
record is entered for the customer.

DELIMITER //
CREATE TRIGGER update_customer_balance
AFTER INSERT ON invoice
FOR EACH ROW
BEGIN
UPDATE customer SET cust_balance = cust_balance + NEW.inv_amount WHERE cust_num =
NEW.cust_num;
END //
DELIMITER ;

c) Find the customers who have purchased more than three units of a product in a day.

SELECT inv.cust_num
FROM invoice inv
WHERE inv.unit_sold > 3
GROUP BY inv.cust_num, inv.inv_date
HAVING COUNT(*) >= 1;
d) Write a query to illustrate Left Outer, Right Outer and Full Outer Join.

LEFT OUTER JOIN


SELECT c.cust_name, i.inv_num
FROM customer c
LEFT JOIN invoice i
ON c.cust_num = i.cust_num;

RIGHT OUTER JOIN


SELECT c.cust_name, i.inv_num
FROM customer c
RIGHT JOIN invoice i
ON c.cust_num = i.cust_num;

FULL OUTER JOIN


SELECT c.cust_name, i.inv_num
FROM customer c
FULL OUTER JOIN invoice i
ON c.cust_num = i.cust_num;

e) Count the number of products sold on each date.

SELECT inv_date, SUM(unit_sold) AS total_units_sold


FROM invoice
GROUP BY inv_date;

f) As soon as the customer balance becomes greater than Rs. 100,000, copy the customer_num
in a new table called ”GOLD_CUSTOMER” .

CREATE TABLE GOLD_CUSTOMER(


cust_num int PRIMARY KEY, cust_lname varchar(30), cust_fname varchar(30)
);
CREATE TRIGGER IN GOLD_CUSTOMER FOR EACH ROW
INSERT INTO GOLD_CUSTOMER
(SELECT cust_num, cust_lname, cust_fname FROM CUSTOMER WHERE cust_num = new.cust_num
AND
cust_balance > 100000 AND
cust_num NOT IN(SELECT cust_num FROM GOLD_CUSTOMER));

g) Add a new attribute CUST_DOB in customer table

ALTER TABLE customer ADD COLUMN cust_dob DATE;

You might also like