PostgreSQL Ubuntu Terminal Initialization
postgres@ubuntu:~
$ sudo -i -u postgres
$ psql
postgres=# \c dvdrsh
You are now connected to database "dvdrsh"
PROJECT 1 – CUSTOMER TABLE
psql - dvdrsh
-- 1. Create Table CUSTOMER
dvdrsh=# CREATE TABLE customer( cus_no varchar(5), cus_name varchar(15), age int, phone varchar(10) );
CREATE TABLE
-- a) Insert 5 Records
dvdrsh=# INSERT INTO customer VALUES('101','nila',23,'98023452');
INSERT 0 1
dvdrsh=# INSERT INTO customer VALUES('102','arun',21,'98452211');
INSERT 0 1
dvdrsh=# INSERT INTO customer VALUES('103','maya',24,'97452211');
INSERT 0 1
dvdrsh=# INSERT INTO customer VALUES('104','ravi',22,'96452211');
INSERT 0 1
dvdrsh=# INSERT INTO customer VALUES('105','asha',23,'95452211');
INSERT 0 1
-- Display Records
dvdrsh=# SELECT * FROM customer;
cus_no | cus_name | age | phone
--------+----------+-----+-----------
101 | nila | 23 | 98023452
102 | arun | 21 | 98452211
103 | maya | 24 | 97452211
104 | ravi | 22 | 96452211
105 | asha | 23 | 95452211
(5 rows)
-- b) Add new field d_birth
dvdrsh=# ALTER TABLE customer ADD COLUMN d_birth DATE;
ALTER TABLE
-- c) Create Table cust_phone from customer
dvdrsh=# CREATE TABLE cust_phone AS SELECT cus_name,phone FROM customer;
SELECT 5
dvdrsh=# SELECT * FROM cust_phone;
cus_name | phone
----------+-----------
nila | 98023452
arun | 98452211
maya | 97452211
ravi | 96452211
asha | 95452211
(5 rows)
-- d) Remove column age
dvdrsh=# ALTER TABLE customer DROP COLUMN age;
ALTER TABLE
-- e) Change size of cus_name
dvdrsh=# ALTER TABLE customer ALTER COLUMN cus_name TYPE varchar(25);
ALTER TABLE
-- f) Delete all records
dvdrsh=# DELETE FROM customer;
DELETE 5
-- g) Rename table customer to cust
dvdrsh=# ALTER TABLE customer RENAME TO cust;
ALTER TABLE
-- h) Drop table
dvdrsh=# DROP TABLE cust;
DROP TABLE
PROJECT 2 – HOSPITAL TABLE
psql - dvdrsh
dvdrsh=# CREATE TABLE hospital( doctor_id varchar(15), doctor_name varchar(20), department varchar(15), qualification varchar(10), experience int );
CREATE TABLE
-- a) Insert 5 Records
dvdrsh=# INSERT INTO hospital VALUES('D001','rakesh','Skin','MD',6);
INSERT 0 1
dvdrsh=# INSERT INTO hospital VALUES('D002','shiya','Cardiology','MBBS',4);
INSERT 0 1
dvdrsh=# INSERT INTO hospital VALUES('D003','rahul','Emergency','MBBS',3);
INSERT 0 1
dvdrsh=# INSERT INTO hospital VALUES('D004','meera','Skin','MD',8);
INSERT 0 1
dvdrsh=# INSERT INTO hospital VALUES('D005','akhil','Ortho','MBBS',7);
INSERT 0 1
-- b) Display all Doctors
dvdrsh=# SELECT * FROM hospital;
doctor_id | doctor_name | department | qualification | experience
-----------+-------------+------------+---------------+-----------
D001 | rakesh | Skin | MD | 6
D002 | shiya | Cardiology | MBBS | 4
D003 | rahul | Emergency | MBBS | 3
D004 | meera | Skin | MD | 8
D005 | akhil | Ortho | MBBS | 7
(5 rows)
-- c) Doctors with qualification MD
dvdrsh=# SELECT * FROM hospital WHERE qualification='MD';
doctor_id | doctor_name | department | qualification | experience
-----------+-------------+------------+---------------+-----------
D001 | rakesh | Skin | MD | 6
D004 | meera | Skin | MD | 8
(2 rows)
-- d) Doctors with experience >5 and not MD
dvdrsh=# SELECT * FROM hospital WHERE experience>5 AND qualification!='MD';
doctor_id | doctor_name | department | qualification | experience
-----------+-------------+------------+---------------+-----------
D005 | akhil | Ortho | MBBS | 7
(1 row)
-- e) Doctors in Skin department
dvdrsh=# SELECT * FROM hospital WHERE department='Skin';
doctor_id | doctor_name | department | qualification | experience
-----------+-------------+------------+---------------+-----------
D001 | rakesh | Skin | MD | 6
D004 | meera | Skin | MD | 8
(2 rows)
-- f) Update experience of doctor D003 to 5
dvdrsh=# UPDATE hospital SET experience=5 WHERE doctor_id='D003';
UPDATE 1
dvdrsh=# SELECT * FROM hospital WHERE doctor_id='D003';
doctor_id | doctor_name | department | qualification | experience
-----------+-------------+------------+---------------+-----------
D003 | rahul | Emergency | MBBS | 5
(1 row)
-- g) Delete doctor with ID D005
dvdrsh=# DELETE FROM hospital WHERE doctor_id='D005';
DELETE 1
dvdrsh=# SELECT * FROM hospital;
doctor_id | doctor_name | department | qualification | experience
-----------+-------------+------------+---------------+-----------
D001 | rakesh | Skin | MD | 6
D002 | shiya | Cardiology | MBBS | 4
D003 | rahul | Emergency | MBBS | 5
D004 | meera | Skin | MD | 8
(4 rows)
PROJECT 3 – BANK CUSTOMER / DEPOSIT / LOAN
psql - dvdrsh
dvdrsh=# CREATE TABLE bank_customer( accno int PRIMARY KEY, cust_name varchar(20), place varchar(20) );
CREATE TABLE
dvdrsh=# CREATE TABLE deposit( accno int REFERENCES bank_customer(accno), deposit_no int, damount int );
CREATE TABLE
dvdrsh=# CREATE TABLE loan( accno int REFERENCES bank_customer(accno), loan_no int, lamount int );
CREATE TABLE
-- Insert Records
dvdrsh=# INSERT INTO bank_customer VALUES(2001,'roy','calicut');
INSERT 0 1
dvdrsh=# INSERT INTO bank_customer VALUES(2002,'anu','kochi');
INSERT 0 1
dvdrsh=# INSERT INTO bank_customer VALUES(2003,'hari','trissur');
INSERT 0 1
dvdrsh=# INSERT INTO bank_customer VALUES(2004,'megha','kannur');
INSERT 0 1
dvdrsh=# INSERT INTO bank_customer VALUES(2005,'siva','palakkad');
INSERT 0 1
dvdrsh=# INSERT INTO deposit VALUES(2001,101,20000);
INSERT 0 1
dvdrsh=# INSERT INTO deposit VALUES(2002,102,15000);
INSERT 0 1
dvdrsh=# INSERT INTO loan VALUES(2003,201,200000);
INSERT 0 1
dvdrsh=# INSERT INTO loan VALUES(2001,202,50000);
INSERT 0 1
-- a) Display customer details
dvdrsh=# SELECT * FROM bank_customer;
accno | cust_name | place
-------+-----------+-----------
2001 | roy | calicut
2002 | anu | kochi
2003 | hari | trissur
2004 | megha | kannur
2005 | siva | palakkad
(5 rows)
-- b) Customers with deposit
dvdrsh=# SELECT bank_customer.cust_name,deposit.damount FROM bank_customer INNER JOIN deposit ON bank_customer.accno=deposit.accno;
cust_name | damount
-----------+---------
roy | 20000
anu | 15000
(2 rows)
-- c) Customers with loan
dvdrsh=# SELECT bank_customer.cust_name,loan.lamount FROM bank_customer INNER JOIN loan ON bank_customer.accno=loan.accno;
cust_name | lamount
-----------+---------
hari | 200000
roy | 50000
(2 rows)
-- d) Customers having both loan and deposit
dvdrsh=# SELECT bank_customer.cust_name FROM bank_customer INNER JOIN deposit ON bank_customer.accno=deposit.accno INTERSECT SELECT bank_customer.cust_name FROM bank_customer INNER JOIN loan ON bank_customer.accno=loan.accno;
cust_name
-----------
roy
(1 row)
-- e) Customers with neither loan nor deposit
dvdrsh=# SELECT cust_name FROM bank_customer WHERE accno NOT IN (SELECT accno FROM deposit) AND accno NOT IN (SELECT accno FROM loan);
cust_name
-----------
megha
siva
(2 rows)
PROJECT 4 – PRODUCT TABLE
psql - dvdrsh
dvdrsh=# CREATE TABLE product( product_code int PRIMARY KEY, product_name varchar(20), category varchar(20), quantity int, price int );
CREATE TABLE
-- Insert Records
dvdrsh=# INSERT INTO product VALUES(101,'soap','bath soap',300,25);
INSERT 0 1
dvdrsh=# INSERT INTO product VALUES(102,'sunsilk','shampoo',80,45);
INSERT 0 1
dvdrsh=# INSERT INTO product VALUES(103,'surf','washing powder',600,55);
INSERT 0 1
dvdrsh=# INSERT INTO product VALUES(104,'paste','paste',120,30);
INSERT 0 1
dvdrsh=# INSERT INTO product VALUES(105,'salt','food',50,20);
INSERT 0 1
-- a) Records in descending order of Product_Name
dvdrsh=# SELECT * FROM product ORDER BY product_name DESC;
product_code | product_name | category | quantity | price
--------------+--------------+----------------+----------+------
102 | sunsilk | shampoo | 80 | 45
103 | surf | washing powder | 600 | 55
101 | soap | bath soap | 300 | 25
105 | salt | food | 50 | 20
104 | paste | paste | 120 | 30
(5 rows)
-- b) Product_Code and Product_Name with price between 20 and 50
dvdrsh=# SELECT product_code,product_name FROM product WHERE price BETWEEN 20 AND 50;
product_code | product_name
--------------+--------------
101 | soap
102 | sunsilk
104 | paste
105 | salt
(4 rows)
-- c) Products belonging to bath soap, paste, or washing powder
dvdrsh=# SELECT * FROM product WHERE category IN ('bath soap','paste','washing powder');
product_code | product_name | category | quantity | price
--------------+--------------+----------------+----------+------
101 | soap | bath soap | 300 | 25
103 | surf | washing powder | 600 | 55
104 | paste | paste | 120 | 30
(3 rows)
-- d) Products with quantity <100 or >500
dvdrsh=# SELECT * FROM product WHERE quantity<100 OR quantity>500;
product_code | product_name | category | quantity | price
--------------+--------------+----------------+----------+------
102 | sunsilk | shampoo | 80 | 45
103 | surf | washing powder | 600 | 55
105 | salt | food | 50 | 20
(3 rows)
-- e) Products whose name starts with 's'
dvdrsh=# SELECT product_name FROM product WHERE product_name LIKE 's%';
product_name
--------------
soap
sunsilk
surf
salt
(4 rows)
-- f) Products not belonging to category 'paste'
dvdrsh=# SELECT * FROM product WHERE category!='paste';
product_code | product_name | category | quantity | price
--------------+--------------+----------------+----------+------
101 | soap | bath soap | 300 | 25
102 | sunsilk | shampoo | 80 | 45
103 | surf | washing powder | 600 | 55
105 | salt | food | 50 | 20
(4 rows)
-- g) Products whose second letter is 'u' and category is washing powder
dvdrsh=# SELECT product_name FROM product WHERE product_name LIKE '_u%' AND category='washing powder';
product_name
--------------
surf
(1 row)
PROJECT 5 – EMPLOYEE / COMPANY DATABASE
psql - dvdrsh
dvdrsh=# CREATE TABLE employee( employee_name varchar(20), city varchar(20) );
CREATE TABLE
dvdrsh=# CREATE TABLE works( employee_name varchar(20), company_name varchar(20), salary int );
CREATE TABLE
dvdrsh=# CREATE TABLE company( company_name varchar(20), city varchar(20) );
CREATE TABLE
dvdrsh=# CREATE TABLE manages( employee_name varchar(20), manager_name varchar(20) );
CREATE TABLE
-- Insert Records
dvdrsh=# INSERT INTO employee VALUES('akash','chennai');
INSERT 0 1
dvdrsh=# INSERT INTO employee VALUES('rahul','bangalore');
INSERT 0 1
dvdrsh=# INSERT INTO employee VALUES('meera','kochi');
INSERT 0 1
dvdrsh=# INSERT INTO employee VALUES('anil','bangalore');
INSERT 0 1
dvdrsh=# INSERT INTO employee VALUES('sita','chennai');
INSERT 0 1
dvdrsh=# INSERT INTO works VALUES('akash','Infosys',20000);
INSERT 0 1
dvdrsh=# INSERT INTO works VALUES('rahul','Wipro',15000);
INSERT 0 1
dvdrsh=# INSERT INTO works VALUES('meera','Infosys',12000);
INSERT 0 1
dvdrsh=# INSERT INTO works VALUES('anil','TCS',9000);
INSERT 0 1
dvdrsh=# INSERT INTO works VALUES('sita','Wipro',18000);
INSERT 0 1
dvdrsh=# INSERT INTO company VALUES('Infosys','bangalore');
INSERT 0 1
dvdrsh=# INSERT INTO company VALUES('Wipro','bangalore');
INSERT 0 1
dvdrsh=# INSERT INTO company VALUES('TCS','chennai');
INSERT 0 1
-- A) Employees who work in Infosys
dvdrsh=# SELECT employee_name FROM works WHERE company_name='Infosys';
employee_name
---------------
akash
meera
(2 rows)
-- B) Names and cities of employees who work in Wipro
dvdrsh=# SELECT works.employee_name,employee.city FROM works JOIN employee ON works.employee_name=employee.employee_name WHERE company_name='Wipro';
employee_name | city
---------------+-----------
rahul | bangalore
sita | chennai
(2 rows)
-- C) Employees working in Infosys with salary > 10000
dvdrsh=# SELECT works.employee_name,employee.city FROM works JOIN employee ON works.employee_name=employee.employee_name WHERE company_name='Infosys' AND salary>10000;
employee_name | city
---------------+-----------
akash | chennai
meera | kochi
(2 rows)
-- D) Employees living in same city as their company
dvdrsh=# SELECT DISTINCT employee.employee_name FROM employee JOIN works ON employee.employee_name=works.employee_name JOIN company ON works.company_name=company.company_name WHERE employee.city=company.city;
employee_name
---------------
rahul
(1 row)
-- E) Employees not working in Wipro
dvdrsh=# SELECT employee_name FROM works WHERE company_name!='Wipro';
employee_name
---------------
akash
meera
anil
(3 rows)
-- F) Company with most employees
dvdrsh=# SELECT company_name,COUNT(*) FROM works GROUP BY company_name ORDER BY COUNT(*) DESC LIMIT 1;
company_name | count
--------------+-------
Infosys | 2
(1 row)
PROJECT 6 – AGGREGATE FUNCTIONS AND GROUP BY
psql - dvdrsh
dvdrsh=# CREATE TABLE employee2( empid varchar(5), ename varchar(20), salary int, department varchar(15), age int );
CREATE TABLE
-- Insert Records
dvdrsh=# INSERT INTO employee2 VALUES('E01','arun',25000,'sales',30);
INSERT 0 1
dvdrsh=# INSERT INTO employee2 VALUES('E02','meera',30000,'sales',35);
INSERT 0 1
dvdrsh=# INSERT INTO employee2 VALUES('E03','rahul',20000,'purchase',28);
INSERT 0 1
dvdrsh=# INSERT INTO employee2 VALUES('E04','sita',22000,'purchase',32);
INSERT 0 1
dvdrsh=# INSERT INTO employee2 VALUES('E05','anil',40000,'accounts',45);
INSERT 0 1
-- B) Total number of employees
dvdrsh=# SELECT COUNT(*) FROM employee2;
count
-------
5
(1 row)
-- C) Oldest employee of each department
dvdrsh=# SELECT department,MAX(age) FROM employee2 GROUP BY department;
department | max
------------+-----
sales | 35
purchase | 32
accounts | 45
(3 rows)
-- D) Average age of employees in each department
dvdrsh=# SELECT department,AVG(age) FROM employee2 GROUP BY department;
department | avg
------------+----------------
sales | 32.5
purchase | 30
accounts | 45
(3 rows)
-- E) Department and average salary
dvdrsh=# SELECT department,AVG(salary) FROM employee2 GROUP BY department;
department | avg
------------+-------
sales | 27500
purchase | 21000
accounts | 40000
(3 rows)
-- F) Lowest salary
dvdrsh=# SELECT MIN(salary) FROM employee2;
min
------
20000
(1 row)
-- G) Employees in purchase department
dvdrsh=# SELECT COUNT(*) FROM employee2 WHERE department='purchase';
count
-------
2
(1 row)
-- H) Highest salary in sales department
dvdrsh=# SELECT MAX(salary) FROM employee2 WHERE department='sales';
max
------
30000
(1 row)
-- I) Difference between highest and lowest salary
dvdrsh=# SELECT MAX(salary)-MIN(salary) AS salary_difference FROM employee2;
salary_difference
------------------
20000
(1 row)
PROJECT 7 – AREA OF CIRCLE (PL/pgSQL)
psql - dvdrsh
dvdrsh=# CREATE TABLE areas(radius numeric, area numeric);
CREATE TABLE
dvdrsh=# DO $$ DECLARE r int; BEGIN FOR r IN 3..7 LOOP INSERT INTO areas VALUES(r,3.14*r*r); END LOOP; END $$;
DO
dvdrsh=# SELECT * FROM areas;
radius | area
--------+---------
3 | 28.26
4 | 50.24
5 | 78.50
6 | 113.04
7 | 153.86
(5 rows)
PROJECT 8 – PRIME NUMBER FUNCTION
psql - dvdrsh
dvdrsh=# CREATE OR REPLACE FUNCTION is_prime(n int) RETURNS text AS $$ DECLARE i int := 2; BEGIN IF n <= 1 THEN RETURN 'not prime'; END IF; WHILE i <= n/2 LOOP IF n % i = 0 THEN RETURN 'not prime'; END IF; i := i + 1; END LOOP; RETURN 'prime'; END; $$ LANGUAGE plpgsql;
CREATE FUNCTION
dvdrsh=# SELECT is_prime(7);
is_prime
----------
prime
(1 row)
dvdrsh=# SELECT is_prime(8);
is_prime
----------
not prime
(1 row)
PROJECT 9 – ELECTRICITY BILL CALCULATION
psql - dvdrsh
dvdrsh=# DO $$ DECLARE cust_no int := 101; unit int := 350; charge numeric; BEGIN IF unit >= 600 THEN charge := unit * 3.5; ELSIF unit >= 400 THEN charge := unit * 3.0; ELSIF unit >= 200 THEN charge := unit * 2.5; ELSIF unit >= 100 THEN charge := unit * 2.0; ELSE charge := unit * 1.5; END IF; RAISE NOTICE 'Consumer Number: %', cust_no; RAISE NOTICE 'Unit Consumed: %', unit; RAISE NOTICE 'Bill Amount: %', charge; END $$;
NOTICE: Consumer Number: 101
NOTICE: Unit Consumed: 350
NOTICE: Bill Amount: 875.0
DO
PROJECT 10 – EXAM RESULT GRADING
psql - dvdrsh
dvdrsh=# CREATE TABLE exam_result( rollno int, avg_score int, grade varchar(5) );
CREATE TABLE
dvdrsh=# INSERT INTO exam_result VALUES (1,95,NULL), (2,82,NULL), (3,70,NULL), (4,55,NULL), (5,40,NULL), (6,91,NULL), (7,76,NULL), (8,62,NULL), (9,58,NULL), (10,30,NULL);
INSERT 0 10
dvdrsh=# UPDATE exam_result SET grade='A' WHERE avg_score BETWEEN 90 AND 100;
UPDATE 2
dvdrsh=# UPDATE exam_result SET grade='B' WHERE avg_score BETWEEN 75 AND 89;
UPDATE 2
dvdrsh=# UPDATE exam_result SET grade='C' WHERE avg_score BETWEEN 60 AND 74;
UPDATE 2
dvdrsh=# UPDATE exam_result SET grade='D' WHERE avg_score BETWEEN 50 AND 59;
UPDATE 2
dvdrsh=# UPDATE exam_result SET grade='E' WHERE avg_score < 50;
UPDATE 2
dvdrsh=# SELECT * FROM exam_result;
rollno | avg_score | grade
--------+-----------+------
1 | 95 | A
2 | 82 | B
3 | 70 | C
4 | 55 | D
5 | 40 | E
6 | 91 | A
7 | 76 | B
8 | 62 | C
9 | 58 | D
10 | 30 | E
(10 rows)
PROJECT 12 – FIBONACCI SERIES PROCEDURE
psql - dvdrsh
dvdrsh=# CREATE OR REPLACE PROCEDURE fibonacci(n int) LANGUAGE plpgsql AS $$ DECLARE first int := 0; second int := 1; third int; i int; BEGIN RAISE NOTICE 'Fibonacci series:'; RAISE NOTICE '%', first; RAISE NOTICE '%', second; FOR i IN 2..n LOOP third := first + second; first := second; second := third; RAISE NOTICE '%', third; END LOOP; END; $$;
CREATE PROCEDURE
dvdrsh=# CALL fibonacci(7);
NOTICE: Fibonacci series:
NOTICE: 0
NOTICE: 1
NOTICE: 1
NOTICE: 2
NOTICE: 3
NOTICE: 5
NOTICE: 8
NOTICE: 13
CALL