ASSIGNMENT 2:
CREATING THE DATABASE:
CREATE DATABASE SalesDB;
USE SalesDB;
CREATE CUSTOMER TABLE:
CREATE TABLE CUSTOMER (
cust_num INT PRIMARY KEY,
cust_lname VARCHAR(50),
cust_fname VARCHAR(50),
cust_balance DECIMAL(10, 2)
);
CREATE PRODUCT TABLE:
CREATE TABLE PRODUCT (
prod_num INT PRIMARY KEY,
prod_name VARCHAR(100),
price DECIMAL(10, 2)
);
CREATE INVOICE TABLE:
CREATE TABLE INVOICE (
inv_num INT PRIMARY KEY,
prod_num INT,
cust_num INT,
inv_date DATE,
unit_sold INT,
inv_amount DECIMAL(10, 2),
FOREIGN KEY (prod_num) REFERENCES PRODUCT(prod_num) ON DELETE
CASCADE,
FOREIGN KEY (cust_num) REFERENCES CUSTOMER(cust_num) ON DELETE
CASCADE
);
INSERT DATA INTO CUSTOMER:
INSERT INTO CUSTOMER (cust_num, cust_lname, cust_fname, cust_balance)
VALUES
(1, 'Smith', 'John', 1500.50),
(2, 'Doe', 'Jane', 2300.00),
(3, 'Brown', 'Charlie', 1250.75),
(4, 'Johnson', 'Emily', 3000.00);
INSERT DATA INTO PRODUCT:
INSERT INTO PRODUCT (prod_num, prod_name, price)
VALUES
(101, 'Laptop', 1200.00),
(102, 'Smartphone', 800.00),
(103, 'Tablet', 500.00),
(104, 'Headphones', 150.00);
INSERT DATA INTO INVOICE:
INSERT INTO INVOICE (inv_num, prod_num, cust_num, inv_date, unit_sold,
inv_amount)
VALUES
(1001, 101, 1, '2024-09-25', 1, 1200.00),
(1002, 102, 2, '2024-09-26', 2, 1600.00),
(1003, 103, 3, '2024-09-27', 1, 500.00),
(1004, 104, 1, '2024-09-28', 2, 300.00),
(1005, 101, 4, '2024-09-29', 1, 1200.00);
questions:
1. Find the names of customers who have purchased no item. Set the default value of
Cust_balance as 0 for such customers.
SELECT cust_fname, cust_lname
FROM CUSTOMER c
WHERE c.cust_num NOT IN (
SELECT cust_num FROM INVOICE
);
UPDATE CUSTOMER
SET cust_balance = 0
WHERE cust_num NOT IN (
SELECT cust_num FROM INVOICE
);
2. Write a trigger to update the CUST_BALANCE in the CUSTOMER table when a new invoice
record is entered for the customer.
CREATE TRIGGER update_cust_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;
3. Find the customers who have purchased more than three units of a product on a day.\
SELECT c.cust_fname, c.cust_lname, i.inv_date, i.unit_sold
FROM CUSTOMER c
JOIN INVOICE i ON c.cust_num = i.cust_num
WHERE i.unit_sold > 3;
4. Write a query to illustrate Left Outer, Right Outer, and Full Outer Join.
Left Outer Join:
SELECT c.cust_fname, i.inv_num
FROM CUSTOMER c
LEFT JOIN INVOICE i ON c.cust_num = i.cust_num;
Right Outer Join:
SELECT c.cust_fname, i.inv_num
FROM CUSTOMER c
RIGHT JOIN INVOICE i ON c.cust_num = i.cust_num;
Full Outer Join:
SELECT c.cust_fname, i.inv_num
FROM CUSTOMER c
LEFT JOIN INVOICE i ON c.cust_num = i.cust_num
UNION
SELECT c.cust_fname, i.inv_num
FROM CUSTOMER c
RIGHT JOIN INVOICE i ON c.cust_num = i.cust_num;
5. 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;
6. As soon as customer balance becomes greater than Rs. 100,000, copy the customer_num in
a new table called GOLD_CUSTOMER.
Create GOLD_CUSTOMER table:
CREATE TABLE GOLD_CUSTOMER (
cust_num INT PRIMARY KEY
);
Create trigger:
CREATE TRIGGER check_gold_customer
AFTER UPDATE ON CUSTOMER
FOR EACH ROW
BEGIN
IF NEW.cust_balance > 100000 THEN
INSERT INTO GOLD_CUSTOMER (cust_num)
VALUES (NEW.cust_num)
ON DUPLICATE KEY UPDATE cust_num = NEW.cust_num;
END IF;
END;
7. Add a new attribute CUST_DOB in the CUSTOMER table.
ALTER TABLE CUSTOMER
ADD COLUMN cust_dob DATE;