diff --git a/Practical/Assignment-A3/Queries-A3.md b/Practical/Assignment-A3/Queries-A3.md new file mode 100755 index 0000000..d72e92e --- /dev/null +++ b/Practical/Assignment-A3/Queries-A3.md @@ -0,0 +1,270 @@ +## Creating database + +```sql +CREATE DATABASE Database_A3; +USE Database_A3; + +``` + +## Creating tables and specify primary keys: + +```sql +CREATE TABLE Account(acc_no INT, branch_name VARCHAR(50), balance INT, PRIMARY KEY (acc_no)); +CREATE TABLE Branch(branch_name VARCHAR(50), branch_city VARCHAR(50), assets INT, PRIMARY KEY (branch_name)); +CREATE TABLE Customer (cust_name VARCHAR(50), cust_street VARCHAR(50), cust_city VARCHAR(50), PRIMARY KEY (cust_name)); +CREATE TABLE Depositor (cust_name VARCHAR(50), acc_no INT); +CREATE TABLE Loan (loan_no INT, branch_name VARCHAR(50), amount INT, PRIMARY KEY (loan_no)); +CREATE TABLE Borrower (cust_name VARCHAR(50), loan_no INT); + +``` + +## Altering tables to specify foreign keys + +```sql +ALTER TABLE Account ADD FOREIGN KEY (branch_name) REFERENCES Branch(branch_name); +ALTER TABLE Depositor ADD FOREIGN KEY (cust_name) REFERENCES Customer (cust_name); +ALTER TABLE Depositor ADD FOREIGN KEY (acc_no) REFERENCES Account (acc_no); +ALTER TABLE Loan ADD FOREIGN KEY (branch_name) REFERENCES Branch (branch_name); +ALTER TABLE Borrower ADD FOREIGN KEY (cust_name) REFERENCES Customer (cust_name); +ALTER TABLE Borrower ADD FOREIGN KEY (loan_no) REFERENCES Loan (loan_no); + +``` + +## Adding data + +```sql +INSERT INTO Branch (branch_name, branch_city, assets) VALUES +("Pune_Station", "Pune", 5000), +("Hadapsar", "Pune", 20000), +("Dhole_Patil", "Mumbai", 7500), +("Nagarwala", "Nandurbar", 3200); + +INSERT INTO Customer (cust_name, cust_street, cust_city) VALUES +("Kalas", "Airport Road", "Pune"), +("Mehul", "Shahdha", "Nandurbar"), +("Tanmay", "Porwal Road", "Pune"), +("Kshitij", "Hadapasar", "Pune"), +("Aditya", "Mira RD", "Mumbai"), +("Himanshu", "Smart City", "Nandurbar"); + +INSERT INTO Account (acc_no, branch_name, balance) VALUES +(2501, "Dhole_Patil", 5000), +(2511, "Pune_Station", 1500), +(2521, "Hadapsar", 2000), +(2512, "Nagarwala", 5000), +(2531, "Pune_Station", 1000); + +INSERT INTO Loan (loan_no, branch_name, amount) VALUES +(155, "Dhole_Patil", 500), +(156, "Pune_Station", 250), +(157, "Hadapsar", 600), +(158, "Nagarwala", 1400), +(159, "Pune_Station", 25000); + +INSERT INTO Borrower VALUES +("Kalas", 156), +("Mehul", 158), +("Tanmay", 155), +("Kshitij", 157), +("Aditya", 159), +("Himanshu", 158); + +INSERT INTO Depositor VALUES +("Kalas", 2511), +("Mehul", 2512), +("Tanmay", 2501), +("Kshitij", 2521), +("Aditya", 2531), +("Himanshu", 2512); + +``` + +## Queries + +### Part 1 (Borrower): + +1. Create a View1 to display List all customers in alphabetical order who have loan from +Pune_Station branch +```sql +CREATE VIEW View1 AS +SELECT cust_name +FROM Borrower +INNER JOIN Loan ON Borrower.loan_no = Loan.loan_no +WHERE branch_name = "Pune_Station" +ORDER BY cust_name; +SELECT * FROM View1; + +``` + +2. Create View2 on branch table by selecting any two columns and perform insert +update delete operations. +```sql +CREATE VIEW View2 AS +SELECT branch_name, branch_city +FROM Branch; +SELECT * FROM View2; + +-- Insert operation +INSERT INTO View2 (branch_name, branch_city) VALUES ('Yerwada', 'Pune'); +SELECT * FROM View2; + +-- Update operation +UPDATE View2 SET branch_name = 'Peachtree' WHERE branch_name = 'Yerwada'; +SELECT * FROM View2; + +-- Delete operation +DELETE FROM View2 WHERE branch_name = 'Peachtree'; +SELECT * FROM View2; + +``` + +3. Create View3 on borrower and depositor table by selecting any one column from each +table perform insert update delete operations. +```sql +CREATE VIEW View3 AS +SELECT Borrower.cust_name, Depositor.acc_no +FROM Borrower JOIN Depositor ON Borrower.cust_name = Depositor.cust_name; +SELECT * FROM View3; + +-- Insert operation +// NEED TO FIX THIS +INSERT INTO Customer (cust_name, cust_street, cust_city) VALUES ("Sandy", "Pedgaon", "Ahemadnagar"); +INSERT INTO Borrower (cust_name, loan_no) VALUES ("Sandy", 160); +INSERT INTO Depositor(cust_name, Acc_no) VALUES("Sandy", 2502); +SELECT * FROM View3; + +-- Update operation +UPDATE View3 SET acc_no = 102 WHERE cust_name = 'John_Doe'; +SELECT * FROM View3; + +-- Delete operation +DELETE FROM View3 WHERE cust_name = 'John_Doe'; +SELECT * FROM View3; +// +``` + +4. Create Union of left and right joint for all customers who have an account or loan or both at bank +```sql +SELECT DISTINCT Customer.cust_name +FROM Customer +LEFT JOIN Depositor ON Customer.cust_name = Depositor.cust_name +LEFT JOIN Borrower ON Customer.cust_name = Borrower.cust_name +WHERE Depositor.acc_no IS NOT NULL OR Borrower.loan_no IS NOT NULL; + +``` + +5. Display content of View1, View2, View3 +```sql +SELECT * FROM View1; +SELECT * FROM View2; +SELECT * FROM View3; + +``` + +6. Create Simple and Unique index +```sql +-- Simple Index +CREATE INDEX cust_ind ON Customer (cust_city); + +-- Unique Index +CREATE UNIQUE INDEX branch_ind ON Branch (branch_name); + +``` + +7. Display index Information +```sql +SHOW INDEX FROM Customer; +SHOW INDEX FROM Branch; + +``` + +8. Truncate table Customer +```sql +DROP TABLE Depositor; +DROP TABLE Borrower; +TRUNCATE TABLE Customer; + +``` + +### Part 2: + +#### Create tables +```sql +CREATE TABLE Companies(comp_id varchar(50), name varchar(50), cost int, year int); +CREATE TABLE Orders(comp_id varchar(50), domain varchar(50), quantity int); + +``` + +#### Insert values +```sql +INSERT INTO Companies (comp_id, name, cost, year) VALUES +("C001", "ONGC", 2000, 2010), +("C002", "HPCL", 2500, 2012), +("C005", "IOCL", 1000, 2014), +("C006", "BHEL", 3000, 2015); + +INSERT INTO Orders (comp_id, domain, quantity) VALUES +("C001", "Oil", 109), +("C002", "Gas", 121), +("C005", "Telecom", 115); + +``` + +#### Queries +1. Find names, costs, domains and quantities for companies using inner join. +```sql +SELECT name, cost, domain, quantity FROM Companies INNER JOIN Orders on Companies.comp_id = Orders.comp_id; + +``` + +2. Find names, costs, domains and quantities for companies using left outer join. +```sql +SELECT name, cost, domain, quantity FROM Companies lEFT OUTER JOIN Orders ON Companies.comp_id = Orders.comp_id; + +``` + +3. Find names, costs, domains and quantities for companies using right outer join. +```sql +SELECT name, cost, domain, quantity FROM Companies RIGHT OUTER JOIN Orders ON Companies.comp_id = Orders.comp_id; + +``` + +4. Find names, costs, domains and quantities for companies using Union operator. +```sql +SELECT name, cost FROM Companies UNION SELECT domain, quantity FROM Orders; + +``` + +5. Create View View1 by selecting both tables to show company name and quantities. +```sql +CREATE VIEW view1 AS SELECT name, quantity FROM Companies JOIN Orders ON Companies.comp_id = Orders.comp_id; + +``` + +6. Create View2 on branch table by selecting any two columns and perform insert update delete operations. +```sql +CREATE VIEW view2 AS SELECT name, cost FROM Companies; +SELECT * FROM view2; + +-- Insert operation +INSERT INTO view2 (name, cost) VALUES ("BCCC", 3100); +SELECT * FROM view2; + +-- Update operation +UPDATE view2 SET cost = 3500 WHERE name = "BCCC"; +SELECT * FROM view2; + +-- Delete operation +DELETE FROM view2 WHERE name = "BCCC"; +SELECT * FROM view2; + +``` + +7. Display content of View1, View2. +```sql +SELECT * from view1; +SELECT * FROM view2; + +``` + +---