0% found this document useful (0 votes)
2 views

DBMS Lab answer

The document contains SQL commands for creating and managing various database tables, including Employee, Departments, Students, Courses, Accounts, and Transactions. It includes operations such as inserting, updating, and deleting records, as well as creating functions and procedures for specific tasks like calculating bonuses and transferring funds. Additionally, it demonstrates how to generate dummy data and perform queries to retrieve information from the database.

Uploaded by

dharanidk895
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

DBMS Lab answer

The document contains SQL commands for creating and managing various database tables, including Employee, Departments, Students, Courses, Accounts, and Transactions. It includes operations such as inserting, updating, and deleting records, as well as creating functions and procedures for specific tasks like calculating bonuses and transferring funds. Additionally, it demonstrates how to generate dummy data and perform queries to retrieve information from the database.

Uploaded by

dharanidk895
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 35

Ex 1.

a:
use db1;

CREATE TABLE Employee (

EmpID INT PRIMARY KEY,

Name VARCHAR(100) NOT NULL,

Age INT CHECK (Age >= 18),

Email VARCHAR(100) UNIQUE,

Salary DECIMAL(10, 2) CHECK (Salary >= 0)

);

-- Insert data

INSERT INTO Employee (EmpID, Name, Age, Email, Salary)

VALUES (101, 'Alice', 25, '[email protected]', 50000.00);

select * from employee;

-- Update salary

UPDATE Employee

SET Salary = 55000.00

WHERE EmpID = 101;

select * from employee;

-- Delete a record

DELETE FROM Employee

WHERE EmpID = 101;

select * from employee;

Ex 1.b:
use db1;

DELIMITER //

CREATE FUNCTION GetBonus(salary DECIMAL(10,2))

RETURNS DECIMAL(10,2)
BEGIN

RETURN salary * 0.10;

END;

//

DELIMITER ;

SELECT GetBonus(50000.00)

DELIMITER //

CREATE PROCEDURE InsertEmployee (

IN empId INT,

IN empName VARCHAR(100),

IN empAge INT,

IN empEmail VARCHAR(100),

IN empSalary DECIMAL(10,2)

BEGIN

INSERT INTO Employee (EmpID, Name, Age, Email, Salary)

VALUES (empId, empName, empAge, empEmail, empSalary);

END;

//

DELIMITER ;

call InsertEmployee(112,"Dinesh",19,"[email protected]",20000);

select *from Employee;

Ex 2.a:
use db1;

CREATE TABLE Departments (

dept_id INT PRIMARY KEY,


dept_name VARCHAR(100) NOT NULL UNIQUE

);

CREATE TABLE Students (

student_id INT PRIMARY KEY,

student_name VARCHAR(100) NOT NULL,

email VARCHAR(100) UNIQUE,

enrollment_date DATE NOT NULL

);

CREATE TABLE Courses (

course_id INT PRIMARY KEY,

course_name VARCHAR(100) NOT NULL,

dept_id INT,

FOREIGN KEY (dept_id) REFERENCES Departments(dept_id)

ON DELETE SET NULL ON UPDATE CASCADE

);

CREATE TABLE Enrollments (

enrollment_id INT PRIMARY KEY,

student_id INT NOT NULL,

course_id INT NOT NULL,

enrollment_date DATE,

grade CHAR(2),

FOREIGN KEY (student_id) REFERENCES Students(student_id)

ON DELETE CASCADE ON UPDATE CASCADE,

FOREIGN KEY (course_id) REFERENCES Courses(course_id)

ON DELETE CASCADE ON UPDATE CASCADE,

UNIQUE (student_id, course_id)

);

-- Insert Departments
INSERT INTO Departments (dept_id, dept_name) VALUES

(1, 'Computer Science'),

(2, 'Mathematics');

-- Insert Students

INSERT INTO Students (student_id, student_name, email, enrollment_date) VALUES

(101, 'Alice', '[email protected]', '2024-01-15'),

(102, 'Bob', '[email protected]', '2024-02-20');

-- Insert Courses

INSERT INTO Courses (course_id, course_name, dept_id) VALUES

(201, 'Data Structures', 1),

(202, 'Calculus', 2);

-- Insert Enrollments

INSERT INTO Enrollments (enrollment_id, student_id, course_id, enrollment_date, grade) VALUES

(301, 101, 201, '2024-03-01', 'A'),

(302, 102, 202, '2024-03-05', 'B');

SELECT * FROM Courses;

UPDATE Departments SET dept_id = 10 WHERE dept_id = 1;

SELECT * FROM Courses;

Ex 2.b:
CREATE TABLE Accounts (

account_id INT PRIMARY KEY,

balance DECIMAL(10, 2) NOT NULL CHECK (balance >= 0)

);
CREATE TABLE Transactions (

transaction_id INT AUTO_INCREMENT PRIMARY KEY,

from_account INT,

to_account INT,

amount DECIMAL(10, 2) NOT NULL CHECK (amount > 0),

transaction_date DATETIME DEFAULT CURRENT_TIMESTAMP,

FOREIGN KEY (from_account) REFERENCES Accounts(account_id),

FOREIGN KEY (to_account) REFERENCES Accounts(account_id)

);

INSERT INTO Accounts (account_id, balance) VALUES

(1, 5000.00),

(2, 3000.00);

DELIMITER //

CREATE PROCEDURE TransferFunds(

IN from_acc INT,

IN to_acc INT,

IN amt DECIMAL(10,2)

BEGIN

DECLARE from_balance DECIMAL(10,2);

DECLARE error_flag BOOLEAN DEFAULT FALSE;

START TRANSACTION;

-- Check if both accounts exist

SELECT balance INTO from_balance FROM Accounts WHERE account_id = from_acc FOR UPDATE;

IF from_balance IS NULL THEN

SET error_flag = TRUE;

ELSEIF from_balance < amt THEN


SET error_flag = TRUE;

END IF;

IF NOT error_flag THEN

-- Deduct from sender

UPDATE Accounts

SET balance = balance - amt

WHERE account_id = from_acc;

-- Credit to receiver

UPDATE Accounts

SET balance = balance + amt

WHERE account_id = to_acc;

-- Record transaction

INSERT INTO Transactions(from_account, to_account, amount)

VALUES (from_acc, to_acc, amt);

COMMIT;

ELSE

ROLLBACK;

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Transfer failed: insufficient balance or account
missing';

END IF;

END;

//

DELIMITER ;

Ex 3.a:
use db1;

SELECT * FROM Transactions

WHERE amount > 1000;

SELECT * FROM Accounts

WHERE balance BETWEEN 2000 AND 6000;

SELECT * FROM Transactions

WHERE DATE(transaction_date) = '2025-05-24';

SELECT from_account, SUM(amount) AS total_sent

FROM Transactions

GROUP BY from_account;

SELECT to_account, SUM(amount) AS total_received

FROM Transactions

GROUP BY to_account;

SELECT to_account, SUM(amount) AS total_received

FROM Transactions

GROUP BY to_account;

Ex 3.b:
DELIMITER //

CREATE PROCEDURE ReverseNumber(IN original_num INT, OUT reversed_num INT)

BEGIN

DECLARE temp_num INT;

SET temp_num = original_num;

SET reversed_num = 0;

WHILE temp_num > 0 DO

SET reversed_num = reversed_num * 10 + (temp_num % 10);

SET temp_num = FLOOR(temp_num / 10);

END WHILE;
END //

DELIMITER ;

CALL ReverseNumber(12345, @rev);

SELECT @rev AS ReversedNumber;

Ex 4.a:
-- Customer table

CREATE TABLE Customer (

customer_id INT PRIMARY KEY,

name VARCHAR(100) NOT NULL,

email VARCHAR(100) UNIQUE,

phone VARCHAR(15),

address VARCHAR(255)

);

-- Saving_Account table

CREATE TABLE Saving_Account (

account_id INT PRIMARY KEY,

customer_id INT,

balance DECIMAL(15, 2) DEFAULT 0.00,

interest_rate DECIMAL(4, 2) DEFAULT 3.50,

opened_date DATE,

FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)

ON DELETE CASCADE

ON UPDATE CASCADE

);

-- Loan_Account table

CREATE TABLE Loan_Account (


loan_id INT PRIMARY KEY,

customer_id INT,

loan_amount DECIMAL(15, 2),

interest_rate DECIMAL(4, 2),

start_date DATE,

due_date DATE,

FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)

ON DELETE CASCADE

ON UPDATE CASCADE

);

-- Insert customers

INSERT INTO Customer (customer_id, name, email, phone, address) VALUES

(1, 'Alice Johnson', '[email protected]', '9876543210', '123 Maple Street'),

(2, 'Bob Smith', '[email protected]', '9123456789', '456 Oak Avenue');

-- Insert saving accounts

INSERT INTO Saving_Account (account_id, customer_id, balance, interest_rate, opened_date)


VALUES

(101, 1, 5000.00, 3.75, '2023-01-15'),

(102, 2, 12000.50, 3.50, '2022-12-10');

-- Insert loan accounts

INSERT INTO Loan_Account (loan_id, customer_id, loan_amount, interest_rate, start_date,


due_date) VALUES

(201, 1, 150000.00, 7.50, '2023-03-01', '2028-03-01'),

(202, 2, 250000.00, 8.00, '2022-06-15', '2027-06-15');

SELECT c.customer_id, c.name, c.email, s.account_id, s.balance, s.interest_rate

FROM Customer c

LEFT JOIN Saving_Account s ON c.customer_id = s.customer_id;

SELECT c.customer_id, c.name, l.loan_id, l.loan_amount, l.interest_rate, l.start_date, l.due_date

FROM Customer c
JOIN Loan_Account l ON c.customer_id = l.customer_id;

Ex4.b:
DELIMITER //

CREATE PROCEDURE InsertDummyBankData()

BEGIN

DECLARE i INT DEFAULT 1;

-- Insert 50 Customers

WHILE i <= 50 DO

INSERT INTO Customer (customer_id, name, email, phone, address)

VALUES (

i,

CONCAT('Customer_', i),

CONCAT('customer', i, '@example.com'),

CONCAT('90000000', LPAD(i, 2, '0')),

CONCAT('Address_', i)

);

SET i = i + 1;

END WHILE;

SET i = 1;

-- Insert 50 Saving Accounts

WHILE i <= 50 DO

INSERT INTO Saving_Account (account_id, customer_id, balance, interest_rate, opened_date)

VALUES (

i,

i,

ROUND(RAND() * 100000, 2),


3.5 + RAND(), -- Random interest between 3.5–4.5

CURDATE()

);

SET i = i + 1;

END WHILE;

SET i = 1;

-- Insert 50 Loan Accounts

WHILE i <= 50 DO

INSERT INTO Loan_Account (loan_id, customer_id, loan_amount, interest_rate, start_date,


due_date)

VALUES (

i,

i,

ROUND(100000 + RAND() * 900000, 2),

7.0 + RAND(), -- Random interest between 7–8

CURDATE(),

DATE_ADD(CURDATE(), INTERVAL 5 YEAR)

);

SET i = i + 1;

END WHILE;

END;

DELIMITER ;

CALL InsertDummyBankData();

Ex 5.a:
-- Student Table

CREATE TABLE Student (


student_id INT PRIMARY KEY,

name VARCHAR(100) NOT NULL,

class VARCHAR(20)

);

-- Subject_Mark Table

CREATE TABLE Subject_Mark (

subject_id INT PRIMARY KEY,

subject_name VARCHAR(50) NOT NULL

);

-- Result Table (Many-to-Many between students and subjects)

CREATE TABLE Result (

result_id INT PRIMARY KEY AUTO_INCREMENT,

student_id INT,

subject_id INT,

marks INT,

FOREIGN KEY (student_id) REFERENCES Student(student_id)

ON DELETE CASCADE,

FOREIGN KEY (subject_id) REFERENCES Subject_Mark(subject_id)

ON DELETE CASCADE

);

-- Students

INSERT INTO Student (student_id, name, class) VALUES

(1, 'Alice', '10A'),

(2, 'Bob', '10A'),

(3, 'Charlie', '10B');

-- Subjects

INSERT INTO Subject_Mark (subject_id, subject_name) VALUES


(101, 'Math'),

(102, 'Science'),

(103, 'English');

-- Results (student_id, subject_id, marks)

INSERT INTO Result (student_id, subject_id, marks) VALUES

(1, 101, 85), (1, 102, 78), (1, 103, 90),

(2, 101, 65), (2, 102, 70), (2, 103, 72),

(3, 101, 95), (3, 102, 88), (3, 103, 91);

SELECT student_id, MIN(marks) AS min_marks

FROM Result

GROUP BY student_id;

SELECT student_id, MAX(marks) AS max_marks

FROM Result

GROUP BY student_id;

SELECT student_id, SUM(marks) AS total_marks

FROM Result

GROUP BY student_id;

SELECT student_id, AVG(marks) AS average_marks

FROM Result

GROUP BY student_id;

Ex 5.b: Refer exp 1.b

Ex 6.a:
-- Table: Train

CREATE TABLE Train (

train_id INT PRIMARY KEY,


train_name VARCHAR(100),

source_station VARCHAR(100),

destination_station VARCHAR(100),

departure_time TIME,

arrival_time TIME

);

-- Table: Passenger

CREATE TABLE Passenger (

passenger_id INT PRIMARY KEY,

name VARCHAR(100),

age INT,

gender VARCHAR(10)

);

-- Table: Reservation

CREATE TABLE Reservation (

reservation_id INT PRIMARY KEY AUTO_INCREMENT,

train_id INT,

passenger_id INT,

date_of_journey DATE,

seat_no VARCHAR(10),

class_type VARCHAR(20),

FOREIGN KEY (train_id) REFERENCES Train(train_id) ON DELETE CASCADE,

FOREIGN KEY (passenger_id) REFERENCES Passenger(passenger_id) ON DELETE CASCADE

);

-- Trains

INSERT INTO Train (train_id, train_name, source_station, destination_station, departure_time,


arrival_time) VALUES

(101, 'Express Line', 'Delhi', 'Mumbai', '08:00:00', '20:00:00'),

(102, 'Coastal Runner', 'Chennai', 'Kolkata', '06:00:00', '22:00:00'),


(103, 'Mountain Express', 'Delhi', 'Shimla', '09:30:00', '14:00:00');

-- Passengers

INSERT INTO Passenger (passenger_id, name, age, gender) VALUES

(1, 'Alice', 30, 'Female'),

(2, 'Bob', 40, 'Male'),

(3, 'Charlie', 25, 'Male');

-- Reservations

INSERT INTO Reservation (train_id, passenger_id, date_of_journey, seat_no, class_type) VALUES

(101, 1, '2025-06-10', 'A1-12', 'AC'),

(102, 2, '2025-06-11', 'B2-20', 'Sleeper'),

(101, 3, '2025-06-10', 'A1-13', 'AC');

SELECT * FROM Train

WHERE train_id IN (

SELECT train_id FROM Reservation

WHERE passenger_id IN (

SELECT passenger_id FROM Passenger WHERE age > 30

);

SELECT * FROM Train

WHERE train_id IN (

SELECT train_id FROM Reservation

WHERE passenger_id = (

SELECT passenger_id FROM Passenger WHERE name = 'Alice'

);

Ex 6.b:
DELIMITER //
CREATE PROCEDURE Find_Factorial(IN n INT)

BEGIN

DECLARE i INT DEFAULT 1;

DECLARE fact BIGINT DEFAULT 1;

IF n < 0 THEN

SELECT 'Factorial not defined for negative numbers' AS Message;

ELSE

WHILE i <= n DO

SET fact = fact * i;

SET i = i + 1;

END WHILE;

SELECT CONCAT('Factorial of ', n, ' is ', fact) AS Result;

END IF;

END;

//

DELIMITER ;

Ex 7.a:
-- Flights Table

CREATE TABLE Flights (

flight_id INT PRIMARY KEY,

flight_name VARCHAR(100),

source VARCHAR(100),

destination VARCHAR(100),

departure_time TIME,

arrival_time TIME
);

-- Passengers Table

CREATE TABLE Passengers (

passenger_id INT PRIMARY KEY,

name VARCHAR(100),

age INT,

gender VARCHAR(10)

);

-- Reservations Table

CREATE TABLE Reservations (

reservation_id INT PRIMARY KEY AUTO_INCREMENT,

passenger_id INT,

flight_id INT,

seat_no VARCHAR(10),

class_type VARCHAR(20), -- 'Business' or 'Economy'

FOREIGN KEY (passenger_id) REFERENCES Passengers(passenger_id) ON DELETE CASCADE,

FOREIGN KEY (flight_id) REFERENCES Flights(flight_id) ON DELETE CASCADE

);

-- Flights

INSERT INTO Flights (flight_id, flight_name, source, destination, departure_time, arrival_time)


VALUES

(1, 'SkyJet 101', 'Delhi', 'Mumbai', '08:00:00', '10:00:00'),

(2, 'AirFly 202', 'Chennai', 'Bangalore', '09:30:00', '11:00:00');

-- Passengers

INSERT INTO Passengers (passenger_id, name, age, gender) VALUES

(1, 'Alice', 30, 'Female'),

(2, 'Bob', 40, 'Male'),

(3, 'Charlie', 28, 'Male'),


(4, 'Daisy', 35, 'Female');

-- Reservations (Business and Economy)

INSERT INTO Reservations (passenger_id, flight_id, seat_no, class_type) VALUES

(1, 1, 'B1', 'Business'),

(2, 1, 'E5', 'Economy'),

(3, 2, 'B2', 'Business'),

(4, 2, 'E9', 'Economy');

SELECT

p.passenger_id,

p.name,

r.class_type,

f.flight_name,

f.source,

f.destination

FROM Reservations r

JOIN Passengers p ON r.passenger_id = p.passenger_id

JOIN Flights f ON r.flight_id = f.flight_id

WHERE r.class_type IN ('Business', 'Economy');

Ex 7.b:
ALTER TABLE Reservations

ADD COLUMN fare DECIMAL(10,2);

DELIMITER //

CREATE PROCEDURE Reserve_Ticket_With_Discount (

IN in_passenger_id INT,

IN in_flight_id INT,

IN in_seat_no VARCHAR(10),
IN in_class_type VARCHAR(20),

IN in_base_fare DECIMAL(10,2)

BEGIN

DECLARE passenger_age INT;

DECLARE final_fare DECIMAL(10,2);

-- Get passenger age

SELECT age INTO passenger_age FROM Passengers WHERE passenger_id = in_passenger_id;

-- Set base fare

SET final_fare = in_base_fare;

-- Apply 10% discount for seniors (age >= 60)

IF passenger_age >= 60 THEN

SET final_fare = final_fare * 0.9;

END IF;

-- Apply 5% discount for Business class

IF in_class_type = 'Business' THEN

SET final_fare = final_fare * 0.95;

END IF;

-- Insert reservation with discounted fare

INSERT INTO Reservations (passenger_id, flight_id, seat_no, class_type, fare)

VALUES (in_passenger_id, in_flight_id, in_seat_no, in_class_type, final_fare);

SELECT CONCAT('Ticket reserved. Final fare: ₹', final_fare) AS Message;

END;

//
DELIMITER ;

CALL Reserve_Ticket_With_Discount(1, 1, 'A2', 'Business', 5000.00);

Ex 8.a : Refer exp 3.a


Ex 8.b: Refer exp 3.b

Ex 9.a:
-- Student Table

CREATE TABLE Student (

student_id INT PRIMARY KEY,

name VARCHAR(100),

age INT

);

-- Course Table

CREATE TABLE Course (

course_id INT PRIMARY KEY,

course_name VARCHAR(100),

student_id INT, -- Foreign key to Student

FOREIGN KEY (student_id) REFERENCES Student(student_id) ON DELETE SET NULL

);

-- Students

INSERT INTO Student (student_id, name, age) VALUES

(1, 'Alice', 20),

(2, 'Bob', 21),

(3, 'Charlie', 22),

(4, 'Diana', 20);


-- Courses (note: student_id 3 is missing to test joins)

INSERT INTO Course (course_id, course_name, student_id) VALUES

(101, 'Maths', 1),

(102, 'Physics', 2),

(103, 'Chemistry', NULL),

(104, 'Biology', 4);

SELECT s.name, c.course_name

FROM Student s

INNER JOIN Course c ON s.student_id = c.student_id;

SELECT s.name, c.course_name

FROM Student s

LEFT JOIN Course c ON s.student_id = c.student_id;

SELECT c.course_name, s.name

FROM Course c

RIGHT JOIN Student s ON s.student_id = c.student_id;

-- Emulate FULL OUTER JOIN using UNION

SELECT s.name, c.course_name

FROM Student s

LEFT JOIN Course c ON s.student_id = c.student_id

UNION

SELECT s.name, c.course_name

FROM Student s

RIGHT JOIN Course c ON s.student_id = c.student_id;

Ex 9.b:
DELIMITER //

DELIMITER //

CREATE PROCEDURE GetMonthName(IN month_number INT)


BEGIN

DECLARE month_name VARCHAR(20);

-- Check for valid input

IF month_number < 1 OR month_number > 12 THEN

SET month_name = 'Invalid Month Number';

ELSE

-- Use DATE_FORMAT to convert number to month name

SET month_name = DATE_FORMAT(STR_TO_DATE(month_number, '%m'), '%M');

END IF;

SELECT CONCAT('Month ', month_number, ' is ', month_name) AS Result;

END;

//

DELIMITER ;

CALL GetMonthName(1);
10.a)DCL Commands to allow user

CREATE DATABASE IF NOT EXISTS my_company_db;

CREATE USER IF NOT EXISTS 'limited_user'@'localhost' IDENTIFIED BY 'SafePass@123';

GRANT CREATE, INSERT, UPDATE ON my_company_db.* TO 'limited_user'@'localhost';

REVOKE DELETE ON my_company_db.* FROM 'limited_user'@'localhost';

SHOW GRANTS FOR 'limited_user'@'localhost';

USE my_company_db;

CREATE TABLE IF NOT EXISTS sample_table (

id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(100) NOT NULL,

qty INT NOT NULL

);

-- This will work

INSERT INTO sample_table (name, qty) VALUES ('Toy', 50);

-- This will fail with permission denied

DELETE FROM sample_table WHERE name = 'Toy';

10.b)XML Database and validate using xml schema Refer DBMS Record

11.a) TCL COMMANDS

CREATE DATABASE IF NOT EXISTS bank_db;

USE bank_db;

CREATE TABLE accounts (

acc_id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(100),
balance DECIMAL(10,2)

);

INSERT INTO accounts (name, balance) VALUES

('Alice', 100.00),

('Bob', 10.00);

-- Start transaction

START TRANSACTION;

-- Step 1: Deduct 50 from Alice

SET SQL_SAFE_UPDATES = 0;

-- Now run your query

UPDATE accounts SET balance = balance - 50 WHERE name = 'Alice';

-- Step 2: Savepoint after deduction

SAVEPOINT after_alice_deduction;

-- Step 3: Add 50 to Bob

UPDATE accounts

SET balance = balance + 50

WHERE name = 'Bob';

-- Step 4: Check Bob's new balance

SELECT balance FROM accounts WHERE name = 'Bob';

-- Simulate logic: If Bob's new balance > 100, rollback

-- Let's assume for test: if balance > 100, rollback

-- (Bob had 10 + 50 = 60, so we commit)


-- COMMIT the transaction

COMMIT;

SELECT * FROM accounts;

OUTPUT:

Acc_id name balance

1 Alice 50

2 Bob 60

11.b)Natural Join,Equi Join,Outer Join

CREATE DATABASE IF NOT EXISTS join_example;

USE join_example;

-- Table: students

CREATE TABLE students (

student_id INT PRIMARY KEY,

name VARCHAR(100),

class_id INT

);

-- Table: classes

CREATE TABLE classes (

class_id INT PRIMARY KEY,

class_name VARCHAR(100)

);

-- Insert data
INSERT INTO students VALUES

(1, 'Alice', 101),

(2, 'Bob', 102),

(3, 'Charlie', NULL);

INSERT INTO classes VALUES

(101, 'Math'),

(102, 'Science'),

(103, 'History');

-- Natural join

SELECT *

FROM students

NATURAL JOIN classes;

-- Equi join

SELECT students.name, classes.class_name

FROM students

JOIN classes ON students.class_id = classes.class_id;

-- Outer join

-- Left outer join

SELECT students.name, classes.class_name

FROM students

LEFT JOIN classes ON students.class_id = classes.class_id;

-- Right outer join

SELECT students.name, classes.class_name

FROM students

RIGHT JOIN classes ON students.class_id = classes.class_id;


OUTPUT:

--Natural join

Class_id student_id name class_name

101 1 Alice Math

102 2 Bob Science

--Equi join

Name class_name

Alice Math

Bob Science

--left outer join

Name class_name

Alice Math

Bob Science

Charile Null

--right outer join

Name class_name

Alice Math

Bob Science

Null History

12.a)View and index

CREATE DATABASE IF NOT EXISTS big_school;

USE big_school;

-- Students table

CREATE TABLE students (

student_id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(100),
age INT,

class_id INT

);

-- Classes table

CREATE TABLE classes (

class_id INT PRIMARY KEY,

class_name VARCHAR(100)

);

-- Insert few for example

INSERT INTO classes VALUES (1, 'Math'), (2, 'Science'), (3, 'English');

INSERT INTO students (name, age, class_id) VALUES

('Alice', 14, 1),

('Bob', 15, 2),

('Charlie', 13, 1),

('David', 14, 3),

('Eva', 15, 2);

-- View

CREATE VIEW student_class_view AS

SELECT s.student_id, s.name, s.age, c.class_name

FROM students s

JOIN classes c ON s.class_id = c.class_id;

SELECT * FROM student_class_view WHERE age > 13;

-- index

CREATE INDEX idx_student_name ON students(name);

CREATE INDEX idx_class_age ON students(class_id, age);

SHOW INDEX FROM students;


12.b)Factorial of a Number

DELIMITER $

CREATE PROCEDURE factorial_proc(IN n INT)

BEGIN

DECLARE i INT DEFAULT 1;

DECLARE result BIGINT DEFAULT 1;

WHILE i <= n DO

SET result = result * i;

SET i = i + 1;

END WHILE;

SELECT CONCAT('Factorial of ', n, ' is ', result) AS output;

END $

DELIMITER ;

--To call the factorial function

CALL factorial_proc(5);

13.GUI application refer DBMS Record

14.a)Toy Manufacturing company

CREATE DATABASE IF NOT EXISTS toy_company;

USE toy_company;

-- Create Products table

CREATE TABLE products (

product_id INT AUTO_INCREMENT PRIMARY KEY,


name VARCHAR(100),

category VARCHAR(50),

cost DECIMAL(10,2)

);

INSERT INTO products (name, category, cost) VALUES

('Action Figure', 'Superhero', 150.00),

('Dollhouse', 'Pretend Play', 300.00),

('Puzzle Box', 'Educational', 120.00),

('Remote Car', 'Electronic', 450.00),

('Building Blocks', 'Educational', 200.00),

('Stuffed Bear', 'Soft Toy', 180.00);

SELECT category, AVG(cost) AS avg_cost

FROM products

GROUP BY category

HAVING AVG(cost) > 200;

SELECT name, cost

FROM products

GROUP BY name, cost

HAVING cost > 200;

SELECT category, SUM(cost) AS total_cost

FROM products

GROUP BY category

HAVING total_cost > 400;

14.b)Insert and Update records

USE toy_company;

DELIMITER $
CREATE PROCEDURE upsert_product (

IN p_name VARCHAR(100),

IN p_category VARCHAR(50),

IN p_cost DECIMAL(10,2)

BEGIN

DECLARE product_count INT;

-- Check if product already exists by name

SELECT COUNT(*) INTO product_count

FROM products

WHERE name = p_name;

-- If product exists, update

IF product_count > 0 THEN

UPDATE products

SET category = p_category, cost = p_cost

WHERE name = p_name;

ELSE

-- If not exists, insert

INSERT INTO products (name, category, cost)

VALUES (p_name, p_category, p_cost);

END IF;

END$

DELIMITER ;

-- Insert new products

CALL upsert_product('Toy Train', 'Electronic', 350.00);

-- Updating existing product

CALL upsert_product('Stuffed Bear', 'Soft Toy', 220.00);


SELECT * FROM products;

15.a)Employee Database

CREATE DATABASE IF NOT EXISTS company;

USE company;

CREATE TABLE employees (

emp_id INT PRIMARY KEY AUTO_INCREMENT, -- Primary key

emp_name VARCHAR(100) NOT NULL, -- Not null

email VARCHAR(100) UNIQUE NOT NULL, -- Unique + Not null

department VARCHAR(50),

salary DECIMAL(10,2) NOT NULL

);

INSERT INTO employees (emp_name, email, department, salary) VALUES

('Alice Johnson', '[email protected]', 'HR', 45000.00),

('Bob Smith', '[email protected]', 'IT', 60000.00),

('Carol White', '[email protected]', 'Finance', 55000.00);

-- Give Bob a raise

UPDATE employees

SET salary = 65000.00

WHERE emp_name = 'Bob Smith';

-- Change Carol's department

UPDATE employees

SET department = 'Accounting'

WHERE emp_name = 'Carol White';

-- Remove Alice from employees

DELETE FROM employees

WHERE emp_name = 'Alice Johnson';

SELECT * FROM employees;


15.b)Refer 1.b)

16)Refer DBMS Record

17.a)Student Database

CREATE DATABASE IF NOT EXISTS simple_student_db;

USE simple_student_db;

CREATE TABLE students (

student_id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(100) NOT NULL,

email VARCHAR(100) UNIQUE NOT NULL

);

CREATE TABLE marks (

mark_id INT PRIMARY KEY AUTO_INCREMENT,

student_id INT,

subject VARCHAR(50),

score INT CHECK (score BETWEEN 0 AND 100),

FOREIGN KEY (student_id) REFERENCES students(student_id)

ON DELETE CASCADE

ON UPDATE CASCADE

);

INSERT INTO students (name, email) VALUES

('Alice', '[email protected]'),

('Bob', '[email protected]');

INSERT INTO marks (student_id, subject, score) VALUES

(1, 'Math', 90),

(1, 'Science', 85),

(2, 'Math', 70);


SELECT s.name, s.email, m.subject, m.score

FROM students s

JOIN marks m ON s.student_id = m.student_id;

-- Deleting Alice will also delete her marks automatically due to ON DELETE CASCADE

DELETE FROM students WHERE name = 'Alice';

17.b)DCL and TCL

CREATE DATABASE IF NOT EXISTS banking;

USE banking;

CREATE TABLE accounts (

account_id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(100),

balance DECIMAL(10,2)

);

INSERT INTO accounts (name, balance) VALUES

('Alice', 1000.00),

('Bob', 500.00);

-- Start transaction

START TRANSACTION;

-- Step 1: Deduct from Alice

UPDATE accounts

SET balance = balance - 200

WHERE name = 'Alice';

-- Savepoint

SAVEPOINT after_alice;

-- Step 2: Add to Bob


UPDATE accounts

SET balance = balance + 200

WHERE name = 'Bob';

-- Optional condition: what if Bob's balance > 1000, roll back

-- Simulate error

SELECT balance FROM accounts WHERE name = 'Bob';

-- Let's assume condition is met and rollback to savepoint

ROLLBACK TO SAVEPOINT after_alice;

-- Finalize transaction

COMMIT;

SELECT * FROM accounts;

CREATE USER IF NOT EXISTS 'bankuser'@'localhost' IDENTIFIED BY 'securepass';

GRANT SELECT, INSERT, UPDATE ON banking.* TO 'bankuser'@'localhost';

REVOKE INSERT ON banking.* FROM 'bankuser'@'localhost';

18.a)Refer 11.a)

18.b)Refer 11.b)

19.a)Refer 1.b)

19.b)Refer 11.a)

20.Refer DBMS Record

You might also like