You are on page 1of 9

Q1 2022

1) CREATE TABLE ProductionLoss (

LeeNumber INT PRIMARY KEY,

CreateDate DATE,

CostOfMaterials DECIMAL,

ExactWeight VARCHAR(20),

Lot VARCHAR(50),

Includes INT,

FOREIGN KEY (Includes) REFERENCES ProductionUnits(LeeNumber)

);

CREATE TABLE ProductionUnits (

LeeNumber INT PRIMARY KEY,

ProductType VARCHAR(50),

CreatedFrom INT,

Units INT,

Type VARCHAR(50),

QualityTest CHAR(1),

ProductDesc VARCHAR(255),

FOREIGN KEY (CreatedFrom) REFERENCES ProductionLoss(LeeNumber)

);

CREATE TABLE RawMaterials (

MaterialID INT PRIMARY KEY,

UnitCost DECIMAL

);
1B) -- Inserting into ProductionLoss table

INSERT INTO ProductionLoss (LeeNumber, CreateDate, CostOfMaterials, ExactWeight, Lot, Includes)

VALUES (1, '2024-02-28', 100.50, 'Exact', 'Lot001', 1),

(2, '2024-02-27', 75.25, 'Weight', 'Lot002', 2),

(3, '2024-02-26', 120.75, 'Exact', 'Lot003', 3);

-- Inserting into ProductionUnits table

INSERT INTO ProductionUnits (LeeNumber, ProductType, CreatedFrom, Units, Type, QualityTest,


ProductDesc)

VALUES (1, 'Toy', 1, 100, 'Plastic', 'Y', 'Toy Car'),

(2, 'Medicine', 2, 500, 'Liquid', 'N', 'Antibiotic'),

(3, 'Food', 3, 300, 'Solid', 'Y', 'Chocolate Bar');

-- Inserting into RawMaterials table

INSERT INTO RawMaterials (MaterialID, UnitCost)

VALUES (1, 10.25),

(2, 5.50),

(3, 8.75);
Q2)1A) CREATE DATABASE MaarifaDB;

1B) CREATE TABLE EmployeeTB_REG_NUMBER (

Fname VARCHAR(50),

MNIT INT,

LName VARCHAR(50),

SSN INT PRIMARY KEY,

DOB DATE,

SEX CHAR(1),

Address VARCHAR(100),

Salary DECIMAL(10,2),

SUPPERSSN INT,

DNUMBER INT

);

CREATE TABLE DEPARTMENTTB_REG_NUMBER (

DNAME VARCHAR(50),

DNUMBER INT PRIMARY KEY,

MGRSSN INT,

MGRSTARTDATE DATE

);
c. SQL statements to insert values into EmployeeTB_REG_NUMBER and
DEPARTMENTTB_REG_NUMBER:VALUES

('Usamaks', 123456, 'JABIR', 334455, '1999-01-20', 'M', 'SAAD', 450000, 123356, 3),

('HAMID', 998877, 'YASIR', 665544, '1994-01-20', 'M', 'RAMIA', 223399, 'ZAID', 112388, 'MULA', 880099,
'KHEIR', 551199);

INSERT INTO DEPARTMENTTB_REG_NUMBER (DNAME, DNUMBER, MGRSSN, MGRSTARTDATE)

VALUES

('Reseach', 4, 334455, '2006-01-18'),

('ICT', 9, 665544, '2006-01-11'),

('Accounting', 223399, 2007-01-20),

('Procurement', 9, 880099, '2016-01-18');

d. SQL queries: i. Sum, max, min, and average salary of employees in the "Accounting"
department:SELECT

SUM(Salary) AS Total_Salary,

MAX(Salary) AS Max_Salary,

MIN(Salary) AS Min_Salary,

AVG(Salary) AS Avg_Salary

FROM

EmployeeTB_REG_NUMBER E

JOIN DEPARTMENTTB_REG_NUMBER D ON E.DNUMBER = D.DNUMBER

WHERE

D.DNAME = 'Accounting';

ii. Names of employees controlled by department number 5 using EXISTS operator:

SELECT Fname, LName


FROM EmployeeTB_REG_NUMBER E

WHERE EXISTS (

SELECT 1

FROM DEPARTMENTTB_REG_NUMBER D

WHERE E.DNUMBER = D.DNUMBER AND D.DNUMBER = 5

);

iii. Names of each department and the number of employees working in each
department with at least 2 employees:

SELECT D.DNAME, COUNT(*) AS Num_Employees

FROM EmployeeTB_REG_NUMBER E

JOIN DEPARTMENTTB_REG_NUMBER D ON E.DNUMBER = D.DNUMBER

GROUP BY D.DNAME

HAVING COUNT(*) >= 2;

iv. Names of employees born in the 1990s:

SELECT Fname, LName

FROM EmployeeTB_REG_NUMBER

WHERE YEAR(DOB) BETWEEN 1990 AND 1999;

v. Names of employees and their department name using JOIN:

SELECT E.Fname, E.LName, D.DNAME

FROM EmployeeTB_REG_NUMBER E

JOIN DEPARTMENTTB_REG_NUMBER D ON E.DNUMBER = D.DNUMBER;


Q3 2022

a. SQL statement to create the database:

CREATE DATABASE YourDatabaseName;

USE YourDatabaseName;

CREATE TABLE StaffTb (

staff_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,

first_name VARCHAR(255),

last_name VARCHAR(255),

salary INT,

joining_date DATE,

department VARCHAR(255)

);

CREATE TABLE StaffBonus (

worker_ref_id INT,

bonus_amount INT,

bonus_date DATE,

FOREIGN KEY (worker_ref_id) REFERENCES StaffTb(staff_id)

);

b. SQL statement to insert values into StaffTb and StaffBonus:


INSERT INTO StaffTb (staff_id, first_name, last_name, salary, joining_date, department) VALUES
(001, 'MIMA', 'MAHIGA', 100000.12, '2015-02-20', 'HR'),
(002, 'ZARI', 'JABIR', 80000.50, '2015-06-11', 'Admin'),
(003, 'JAMES', 'KIHOLO JAMES', 300000.90, '2015-02-20', 'HR'),
(004, 'KILAIN', 'ZIDIN', 500000.80, NULL, 'Admin'),
(005, 'GIRI', NULL, 500000.90, '2021-06-11', 'Admin'),
(006, 'RUKIA', 'Diwan', 200000.70, '2021-06-11', 'Account'),
(007, 'SALEH', 'KITWANA', 75000.89, '2021-01-20', 'Account'),
(008, 'REHEMA', 'CHEPETI', 90000.99, '2020-04-11', 'Admin');

INSERT INTO StaffBonus (worker_ref_id, bonus_amount, bonus_date) VALUES


(001, 500.993, '2017-02-20'),
(002, 500.345, '2018-06-11'),
(003, 808.000, '2017-02-20'),
(001, 650.980, '2019-02-20'),
(002, 250.110, '2022-06-11');

c. SQL queries to perform the tasks

i. Fetch "FIRST_NAME" from Staff Table with highest bonus value:

SELECT first_name

FROM StaffTb

WHERE staff_id = (SELECT worker_ref_id FROM StaffBonus ORDER BY bonus_amount DESC LIMIT 1);

ii. Fetch all staff's salary and their corresponding bonus received between the year 2022 and
2017:

SELECT s.first_name, s.salary, b.bonus_amount

FROM StaffTb s

INNER JOIN StaffBonus b ON s.staff_id = b.worker_ref_id

WHERE YEAR(b.bonus_date) BETWEEN 2017 AND 2022;

iii. Print the FIRST_NAME and LAST_NAME from Staff Table into a single column
COMPLETE_NAME:

SELECT CONCAT(first_name, ' ', IFNULL(last_name, '')) AS COMPLETE_NAME

FROM StaffTb;

iv. Print all staff details from the Staff Table ordered by FIRST NAME ascending and
DEPARTMENT descending:

SELECT *

FROM StaffTb

ORDER BY first_name ASC, department DESC;


v. Print details of the staffs whose SALARY lies between 100000 and 500000:

SELECT *

FROM StaffTb

WHERE salary BETWEEN 100000 AND 500000;

Q4)2022

a. SQL statement to create a database called SafariShopDB:

CREATE DATABASE SafariShopDB;

c. SQL statement to create table ProductionTb:


CREATE TABLE ProductionTb (
production_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
prod_name VARCHAR(20) NOT NULL,
production_cost FLOAT NOT NULL DEFAULT 0.0,
production_price DECIMAL NOT NULL DEFAULT 0.0
);

d. SQL statement to insert records into ProductionTb:


INSERT INTO ProductionTb (production_id, prod_name, production_cost,
production_price)
VALUES
(1, 'True Widget', 3.76, 12.12),
(2, 'Basic Widget', 5.95, 8.35),
(3, 'Micro Widget', 0.95, 1.35),
(4, 'Mega Widget', 99.95, 120.09),
(5, 'Simple Widget', 6.0, NULL), -- Missing production price for Simple Widget
(6, 'Clone Widget', 92.33, 100.54),
(7, 'Giga Widget', 12.22, 13.63),
(8, 'Light Widget', 7.22, 12.33);

d. i. SQL statement to create a scalar value function to display the profit obtained for
each product:
CREATE FUNCTION CalculateProfit (production_cost FLOAT, production_price DECIMAL)
RETURNS DECIMAL
BEGIN
DECLARE profit DECIMAL;
SET profit = production_price - production_cost;
RETURN profit;
END;

ii. SQL statement to create a procedure called Prod_Price to display profit for each
product:

CREATE PROCEDURE Prod_Price ()

BEGIN

SELECT prod_name, CalculateProfit(production_cost, production_price) AS Profit

FROM ProductionTb;

END;

iii. SQL query using DENSE_RANK, OVER function, and partition by clause to rank the production
by cost:

SELECT

production_id,

prod_name,

production_cost,

DENSE_RANK() OVER (ORDER BY production_cost) AS cost_rank

FROM ProductionTb;

You might also like