{"id":15157919,"url":"https://github.com/saikiran-erukonda/library_management_system_sql","last_synced_at":"2026-02-08T17:31:12.430Z","repository":{"id":256240556,"uuid":"853741383","full_name":"Saikiran-Erukonda/Library_management_system_sql","owner":"Saikiran-Erukonda","description":"The implementation of a Library Management System using SQL. It includes creating and managing tables, performing CRUD operations, and executing advanced SQL queries. The goal is to showcase skills in database design, manipulation, and querying.","archived":false,"fork":false,"pushed_at":"2024-09-09T16:23:50.000Z","size":481,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-22T17:52:12.889Z","etag":null,"topics":["postgresql","sql","sql-query"],"latest_commit_sha":null,"homepage":"","language":"PLpgSQL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Saikiran-Erukonda.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-07T12:07:15.000Z","updated_at":"2024-09-09T16:23:53.000Z","dependencies_parsed_at":"2024-09-09T20:12:40.761Z","dependency_job_id":"d2bb74c4-42fb-4c61-ae42-ce0bd5d2cb93","html_url":"https://github.com/Saikiran-Erukonda/Library_management_system_sql","commit_stats":null,"previous_names":["saikiran-erukonda/library_management_system_sql"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Saikiran-Erukonda/Library_management_system_sql","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saikiran-Erukonda%2FLibrary_management_system_sql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saikiran-Erukonda%2FLibrary_management_system_sql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saikiran-Erukonda%2FLibrary_management_system_sql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saikiran-Erukonda%2FLibrary_management_system_sql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Saikiran-Erukonda","download_url":"https://codeload.github.com/Saikiran-Erukonda/Library_management_system_sql/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Saikiran-Erukonda%2FLibrary_management_system_sql/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266404946,"owners_count":23923498,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-21T11:47:31.412Z","response_time":64,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["postgresql","sql","sql-query"],"created_at":"2024-09-26T20:20:34.942Z","updated_at":"2026-02-08T17:31:12.140Z","avatar_url":"https://github.com/Saikiran-Erukonda.png","language":"PLpgSQL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Library Management System using SQL Project --P2\n\n## Project Overview\n**Project Name : Library Management System Using SQL**\n\n**Project level**: Intermediate \n\n**Author** : Erukonda saikiran\n-- In order to improve SQL skills and it is part of portfolio projects\n\n**Database**: `Library_db`\n\nThis project demonstrates the implementation of a Library Management System using SQL. It includes creating and managing tables, performing CRUD operations, and executing advanced SQL queries. The goal is to showcase skills in database design, manipulation, and querying.\n\n![Library_project](https://github.com/najirh/Library-System-Management---P2/blob/main/library.jpg)\n\n## Objectives\n\n1. **Set up the Library Management System Database**: Create and populate the database with tables for branches, employees, members, books, issued status, and return status.\n2. **CRUD Operations**: Perform Create, Read, Update, and Delete operations on the data.\n3. **CTAS (Create Table As Select)**: Utilize CTAS to create new tables based on query results.\n4. **Advanced SQL Queries**: Develop complex queries to analyze and retrieve specific data.\n\n## Project Structure\n\n### 1. Database Setup\n![Screenshot 2024-09-07 183952](https://github.com/user-attachments/assets/215c62d6-42b9-4ed4-9b79-45ae13303874)\n\n\n- **Database Creation**: Created a database named `library_db`.[library_schema](https://github.com/Saikiran-Erukonda/Library_management_system_sql/blob/main/Library%20management%20project.sql)\n- **Table Creation**: Created tables for branches, employees, members, books, issued_status, and return_status. Each table includes relevant columns and relationships.\n\n```sql\nCREATE DATABASE Library_db;\n-- create tables branches, employees, members, books, issued_status, and return_status.and import values into them\n\ncreate table books(isbn varchar(20),\n                        book_title varchar(55),\n                        category varchar(20),\n                        rental_price float,\n                        status varchar(5),\n                        author varchar(25),\n                        publisher varchar(30)\n\t\t\t\t\t);\n\ncreate table branch(branch_id varchar(5), manager_id varchar(5),\n                                    branch_address varchar(15),\n                                    contact_no varchar(15));\n\ncreate table employees( emp_id varchar(5),emp_name varchar(30), position varchar(15), salary varchar(10),branch_id varchar(5));\n\ncreate table issued_status(issued_id varchar(5), issued_member_id varchar(5),\n                                     issued_book_name varchar(55),\n                                     issued_date date, issued_book_isbn varchar(20), issued_emp_id varchar(5));\n\ncreate table members(member_id varchar(5),member_name varchar(30),member_address varchar(15), reg_date date);\n\ncreate table return_status(return_id varchar(5), issued_id varchar(5),  return_book_name varchar(55), return_date date, return_book_isbn varchar(20));\n```\n-- forgot to add primary key,let we add it\n```sql\n\nalter table books add primary key(isbn);\nselect * from books;\nalter table branch add primary key(branch_id);\nalter table employees add primary key(emp_id);\nalter table issued_status add primary key(issued_id);\nalter table members add primary key(member_id);\nalter table return_status add primary key(return_id);\n\n\n-- LOAD the data into tables by \"Insert INTO\" command or  by Postgresql's \"table - import Option\".\n-- INSERT INTO method\ninsert into books(isbn ,book_title ,category,rental_price ,status, author,publisher )\nvalues('978-0-553-29698-2', 'The Catcher in the Rye','Classic',7.00,'yes','J.D. Salinger','Little, Brown and Company'),\n('978-0-330-25864-8','Animal Farm','Classic',5.50,'yes','George Orwell','Penguin Books');\nselect * from books;\n\n-- using Table import method , use postgre SQL interface tools. for that we need to delete above inserted data.\n-- use TRUNCATE to delete the data. So that the table structure remains same,only data will be deleted. \ntruncate table books;\nselect * from books;\n\n-- Schemas \u003e tables \u003e right click on books \u003e Import/Export data.. \u003e browse the location \u003eselect file \u003e enable header \u003e click on OK\n-- Check the data imported or not\nselect * from books\nselect * from branch;\nselect * from employees;\nselect * from issued_status;\nselect * from members;\nselect * from return_status;\n```\n\n### 2. CRUD Operations \n[library_management_sql](https://github.com/Saikiran-Erukonda/Library_management_system_sql/blob/main/Library%20management%20project.sql)\n\n- **Create**: Inserted sample records into the `books` table.\n- **Read**: Retrieved and displayed data from various tables.\n- **Update**: Updated records in the `employees` table.\n- **Delete**: Removed records from the `members` table as needed.\n\n**Task 1. Create a New Book Record**\n-- '978-8-173-71146-6','Wings Of Fire An Autobiography','Autobiography',5.0,'Yes', 'APJ Abdul Kalam','Universities Press'\n\n```sql\n/*==========================================================================================\n|| +----------------+\t \tLet we make some queries based on the questions.       ||\t\t\t\t\t||\n|| | CRUD operations| \t\tCreate, Read, Update, Delete.\t\t       ||\t\t\t\t\t\t\t||\n== +----------------+ ======================================================================*/\n/* 1.Create a new book record \n    '978-8-173-71146-6','Wings Of Fire An Autobiography','Autobiography',5.0,'Yes', 'APJ Abdul Kalam','Universities Press'\n*/\nselect * from books;\ninsert into books\nvalues ('978-8-173-71146-6',\t\t\t\t-- isbn\n\t\t'Wings Of Fire An Autobiography', \t-- book_title\n\t\t'Autobiography',\t\t\t\t\t-- category\n\t\t5.0,\t\t\t\t\t\t\t\t-- rental_price\n\t\t'Yes',\t\t\t\t\t\t\t\t-- status\n\t\t'APJ Abdul Kalam',\t\t\t\t\t-- author\n\t\t'Universities Press');\t\t\t\t-- publisher\nselect * from books;\n\n```\n**Task 2: Update an Existing Member's Address**\n\n```sql\nupdate members \nset member_address = 'Banjara Hills' where member_name ='Sam';\nselect * from issued_status;\n```\n\n**Task 3: Delete a Record from the Issued Status Table**\n-- Objective: Delete the record with issued_id = 'IS140' from the issued_status table.\n\n```sql\n-- 3.delete a record  from table  issued\ndelete from issued_status where issued_id  = 'IS140';\n```\n![Screenshot 2024-09-06 131048](https://github.com/user-attachments/assets/93cf1896-840b-41e1-9811-ad8800b9ecb9)\n\n![Screenshot 2024-09-06 131225](https://github.com/user-attachments/assets/143558ea-1265-4aed-88a9-74d6afdc14c2)\n\n**Task 4: Retrieve All Books Issued by a Specific Employee**\n-- Objective: Select all books issued by the employee with emp_id = 'E101'.\n```sql\n--4. Return all books issued by employee E101\nselect issued_emp_id,issued_id,issued_book_name from issued_status where issued_emp_id ='E101';\n```\n\n\n**Task 5: List Members Who Have Issued More Than One Book**\n-- Objective: Use GROUP BY to find members who have issued more than one book.\n\n```sql\nselect issued_member_id\n--,count(issued_id) as no_of_book \nfrom issued_status \ngroup by issued_member_id having count(issued_id)\u003e1 order by count(issued_id) desc;\n```\n## Create Foreign keys to link the tables  using Queries.\n\n```sql\n/*=========================================================================================================\n|\tCreate Foreign keys to link the tables  using Queries.\t\t\t          |\n=========================================================================================================*/\n\n-- foreign key member_id connecting issued_status and members\nALTER TABLE issued_status add constraint fk_members \t\t\t--//members\nforeign key (issued_member_id)\nreferences members(member_id);\n\n-- foreign key book_isbn connecting issued_status and books\nalter table issued_status add constraint fk_book_isbn \t\t\t--//isbn\nforeign key (issued_book_isbn)\nreferences books(isbn);\n\n-- foreign key emp_id connecting issued_status and employees\nalter table issued_status add constraint fk_emp_id\t\t\t\t--//employees\nforeign key(issued_emp_id) references employees(emp_id);\n\n-- foreign key branch_id connecting employees and branch\nalter table employees add constraint fk_branch\nforeign key(branch_id) references branch(branch_id);\t\t\t--//branch_id\n\n--foreign key issue_id connnecting issued-status and return_status \nalter table return_status add constraint fk_issued_id\t\t\t--//issued_id\nforeign key(issued_id) references issued_status(issued_id);\n/*1. ERROR:  Key (issued_id)=(IS101) is not present in table \"issued_status\".insert or update on table \"return_status\" violates foreign key constraint \"fk_issued_id\" \n\nERROR:  insert or update on table \"return_status\" violates foreign key constraint \"fk_issued_id\"\nSQL state: 23503\nDetail: Key (issued_id)=(IS101) is not present in table \"issued_status\".*/\ndelete from return_status where issued_id = 'IS101';\n--------------------------------------------------------------------------------------------------\n/*2. ERROR:  Key (issued_id)=(IS105) is not present in table \"issued_status\".insert or update on table \"return_status\" violates foreign key constraint \"fk_issued_id\" \n\nERROR:  insert or update on table \"return_status\" violates foreign key constraint \"fk_issued_id\"\nSQL state: 23503\nDetail: Key (issued_id)=(IS105) is not present in table \"issued_status\".*/\n\n-- to know the what are the IDs are not exists issued_status but exists in returned status \nselect * from return_status where issued_id not in (select issued_id from issued_status);\n\n-- delete them from return table\ndelete from return_status where issued_id not in (select issued_id from issued_status);\n\n--foreign key issue_id connnecting issued-status and return_status \nalter table return_status add constraint fk_issued_id\t\t\t--//issued_id\nforeign key(issued_id) references issued_status(issued_id);\n```\n\n\n### 3. CTAS (Create Table As Select) \n[library_management_part2](https://github.com/Saikiran-Erukonda/Library_management_system_sql/blob/main/Library%20management%20project_part_2.sql)\n\n- **Task 6: Create Summary Tables**: Used CTAS to generate new tables based on query results - each book_id,book name,total issued count**\n\n```sql\n-- 6.Create a table each book_id,book name,total issued count\n-- =================================================================== trial of inner join\nselect books.isbn,books.book_title,count(issued_status.issued_id) as IST from books inner join issued_status on books.isbn = issued_status.issued_book_isbn group by books.isbn,books.book_title;\n--  ---------------------------------------------------------------------\nselect * from books as b \t\t\t\t\t-- join statement syntax\n\t\t\t  join \n\t\t\t  issued_status as i_s\n\t\t\t  on i_s.issued_book_isbn = b.isbn;\n\t\t\t  \n-- selecting only \"isbn\",\"title\", \"count of number of issues\" and CREATE it as a table book_issues \ncreate table book_issues\nas\nselect b.isbn,b.book_title,count(i_s.issued_id) as no_of_issues from books as b \n\t\t\t  join \n\t\t\t  issued_status as i_s\n\t\t\t  on i_s.issued_book_isbn = b.isbn \n\t\t\t  group by b.isbn,b.book_title;\n\t\t\t  \nselect * from book_issues;\n```\n\n\n### 4. Data Analysis \u0026 Findings\n\nThe following SQL queries were used to address specific questions:\n\nTask 7. **Retrieve All Books in a Specific Category - Children**:\n\n```sql\n-- 7. Retrieve all the books in specific category that is Children\nselect book_title,category from books where category = 'Children';\n```\n\n8. **Task 8: Find Total Rental Income by Category**:\n\n```sql\n-- 8. Find total rental_income by category \nselect b.category,sum(b.rental_price) as rental_income from books as b inner join issued_status as i_s\n                                                            on i_s.issued_book_isbn = b.isbn \n                                                           where isbn in(select issued_book_isbn from issued_status) group by b.category;\n```\n\n9. **List Members Who Registered in the Last 180 Days**:\n```sql\n-- 9. List the members who registered in last 180 days\n\nselect * from members;\n\ninsert into members(member_id,member_name,member_address,reg_date)\nvalues('C220','Saikiran','hyderabad','2024-08-20');\n\nselect member_id,member_name,reg_date from members where reg_date \u003e= current_date - interval '180 days';\n```\n\n10. **List Employees with Their Branch Manager's Name and their branch details**:\n\n```sql\n\n-- 10.list employees with their branch manager's name  and their branch details\n\nselect br.manager_id,emp2.emp_name,emp1.emp_name,br.branch_id,br.branch_address,br.contact_no\nfrom employees as emp1 join \t\t\t\t\nbranch as br on br.branch_id = emp1.branch_id\t\t\njoin \t\t\t\t\t\t\t\t\t\t\t\t\nemployees as emp2 on br.manager_id = emp2.emp_id\norder by emp2.emp_name asc;\n\n--  performed two joins    emp join  branch based on branch id\n--  (emp and branch) join emp based on manager_id \n```\n\nTask 11. **Create a Table of Books with Rental Price Above a Certain Threshold**:\n-- Table of books with rental price above a certain value(\u003e5) [Name the table as expensive_books]\n```sql\n-- 11. Table of books with rental price above a certain value(\u003e5) [Name the table as expensive_books]\ncreate table expensive_book as \nselect * from books where rental_price \u003e 5 ;\n```\n\nTask 12: **Retrieve the List of Books Not Yet Returned**\n```sql\n-- 12. Retrieve the list of books not yet returned.\n  \nselect * from issued_status; -- 35 entries\nselect * from return_status; -- 16 entries\n-- use left outer Join gives matched rows which matches to 1st table\n-- we need to return 35-16 = 19 rows \u003cgives rows which matches to 1st table\u003e\n -- We used 'not' to perform exact opposite to left outer join. \nselect I_S.issued_book_name as book\t\t\t\t\t\t\t\t\t-- the list of books not Yet returned\n\t\t,I_S.issued_id\n\t\t,I_S.issued_member_id as member_id\n\t\t,I_S.issued_date,\n\t\t(current_date - issued_date) as days\n\t\tfrom issued_status\nas I_S left outer join return_status as R_S on I_S.issued_id = R_S.issued_id \nwhere I_S.issued_id not in (select issued_id from return_status) order by (current_date - issued_date) desc; \n```\n\n## Advanced SQL Operations\n[library_management_part3](https://github.com/Saikiran-Erukonda/Library_management_system_sql/blob/main/Library%20management%20project%20part%203.sql)\n**Task 13: Identify Members with Overdue Books**  \nWrite a query to identify members who have overdue books (assume a 30-day return period). Display the member's_id, member's name, book title, issue date, and days overdue.\n\n```sql\n-- 13.Identify the members with overdue.WQ to identify members who have overdue books(assume a 30 day return period)\n--     display members name ,book title ,issued date , days overdue\nselect issued_member_id as member_name,\n\t   issued_book_name as book_title,issued_date,\n\t   (current_date-issued_date) as days_overdue from issued_status\n\t   where issued_id not in(select issued_id from return_status) and\n\t\t\t issued_date \u003c (current_date -interval '30 days');\n\nalter table books alter column status type varchar (15);\n```\n\n\n**Task 14: Update Book Status on Return**  \nWrite a query to update the status of books in the books table to \"Yes\" when they are returned (based on entries in the return_status table).\n\n\n```sql\n-- 14.WQ to update the status of books in the books table to  'available' when they are returned (based on entries in the return table)\nupdate books\nset status = 'Available'\nwhere isbn in (select ib.issued_book_isbn as isbn from return_status as Rs inner join issued_status as ib on rs.issued_id =ib.issued_id );\n\t\t\t\t\nselect * from books where status = 'Available' ;\nselect * from return_status;\n\n```\n\n\n\n\n**Task 15: Branch Performance Report**  \nCreate a query that generates a performance report for each branch, showing the number of books issued, the number of books returned, and the total revenue generated from book rentals.\n\n```sql\n\nselect br.branch_id,br.branch_address,count(ib.issued_id) as no_of_books_issued,\n\t\tcount(rs.return_id) as no_of_books_returned \n\t\t--// LOJ branch \u003c==\u003e emp\n\t\tfrom branch as br left outer join employees as emp on br.branch_id = emp.branch_id\n\t\t--// LOJ [branch \u003c==\u003e emp] \u003c==\u003e issued_status\n\t\tleft outer join issued_status as ib on emp.emp_id = ib.issued_emp_id \n\t\t--// LOJ [[branch \u003c==\u003e emp] \u003c==\u003e issued_status] \u003c==\u003e return status\n\t\tleft outer join return_status as rs on rs.issued_id = ib.issued_id group by br.branch_id; \n```\n\n**Task 16: CTAS: Create a Table of Active Members**  \nUse the CREATE TABLE AS (CTAS) statement to create a new table active_members containing members who have issued at least one book in the last 1 month.\n\n```sql\n\n-- 16.WQ CTAS create table \"active_members\"members who have issued  at least one Book in last 30days\n------------------------------------------------------- main query\ncreate table active_members as\nselect m.member_id,m.member_name, m.member_address as address, ib.issued_book_name as book_title, issued_date\n\tfrom issued_status as ib left outer join members as m  \n\ton m.member_id = ib.issued_member_id \n\twhere issued_date \u003e= current_date - interval '30 days' ;\n-------------------------------------------------------------------\nselect * from active_members;\n\n```\n\n\n**Task 17: Find Employees with the Most Book Issues Processed**  \nWrite a query to find the top 3 employees who have processed the most book issues. Display the employee name, number of books processed, and their branch.\n\n```sql\n-- 17.Find employees with most_book_issues  processed. WQ to find the top 3 employees who  have processed the most book issues. employee name,no of books, their branch,branch address\n\nselect emp.emp_name,count(ib.issued_id) as no_of_book_issues,emp.branch_id,br.branch_address\n\t\tfrom issued_status as ib left outer join employees as emp on ib.issued_emp_id = emp.emp_id \n\t\tleft outer join branch as br on br.branch_id = emp.branch_id group by 1,3,4 \t\t\t\t\t--// 1,3,4 are column index\n\t\torder by count(ib.issued_id) desc limit 3;\n```\n\n**Task 18: Identify Members Issuing High-Risk Books**  \nWrite a query to identify members who have issued books more than twice with the status \"damaged\" in the books table. Display the member name, book title, and the number of times they've issued damaged books.    \n```sql\nselect * from books;\nselect * from books where status = 'damaged'; \n\n-- book name and no_of_issues\nselect issued_book_name,count(issued_id) as issues from issued_status group by 1 order by count(issued_id) desc;\n\n-- member_id and no_of_issues\nselect issued_member_id, count(issued_id) as issues from issued_status group by 1 order by count(issued_id) desc; \n\nselect ib.issued_member_id,b.book_title,b.status\nfrom issued_status as ib inner join books as b on ib.issued_book_isbn  = b.isbn;\n\n\nselect ib.issued_member_id,m.member_name,ib.issued_book_name,count(b.status) as damaged from issued_status as ib left outer join members as m on ib.issued_member_id = m.member_id \n\t\t\t  left outer join books as b on ib.issued_book_isbn = b.isbn\n\t\t\t  where ib.issued_member_id in (select member_id from (select ib.issued_member_id as member_id,count(b.status) as no_of_issues\n\t\t\t from issued_status as ib inner join books as b on ib.issued_book_isbn  = b.isbn where b.status = 'damaged' group by 1) where no_of_issues\u003e2) and status ='damaged' group by 1,2,3 ;\n\n```\n\n**Task 19: Stored Procedure**\nObjective:\nCreate a stored procedure to manage the status of books in a library system.\nDescription:\nWrite a stored procedure that updates the status of a book in the library based on its issuance. The procedure should function as follows:\nThe stored procedure should take the book_id as an input parameter.\nThe procedure should first check if the book is available (status = 'yes').\nIf the book is available, it should be issued, and the status in the books table should be updated to 'no'.\nIf the book is not available (status = 'no'), the procedure should return an error message indicating that the book is currently not available.\n\n```sql\n\ncreate or replace procedure issue_book(p_issued_id varchar(10),p_issued_member_id varchar(6),p_issued_book_isbn varchar(20),p_issued_emp_id varchar(10))\nlanguage plpgsql\nas $$\n\ndeclare \n--all the variables\nv_status varchar(20);\n\nbegin \n-- begin the code\n  -- checking if book is available 'yes'\n  select\n   status into v_status\n   from books\n   where isbn = p_issued_book_isbn;\n\n   if v_status = 'yes' or v_status = 'Available' then\n   \t\t\n\t\t insert  into issued_status(issued_id,issued_member_id,issued_book_name,issued_date,issued_book_isbn,issued_emp_id)\n\t\t values \n\t\t (p_issued_id,p_issued_member_id,(select book_title from books where isbn = p_issued_book_isbn)\n\t\t \t,current_date,p_issued_book_isbn,p_issued_emp_id);\n\n\t\t update books\n\t\t     set status = 'no'\n\t\t\t where isbn = p_issued_book_isbn;\n\n\t\t  RAISE NOTICE 'Book records added successfully for book isbn : %',p_issued_book_isbn;\n\telse \n\t RAISE NOTICE 'sorry to inform you the book you have requested is unavailable : % ', p_issued_book_isbn;\n\tend if;\nend ;\n$$\n\nselect * from books;\n-- '978-0-553-57340-1' 1984 \t\t\t\t\t\t\t\t\t\t//yes\n-- '978-8-173-71146-6' \"Wings Of Fire An Autobiography\" \t\t\t// Available\n-- '978-0-307-58837-1' \"Sapiens: A Brief History of Humankind\" \t// no\nupdate books \nset status  = 'Available' where isbn ='978-8-173-71146-6';\n\nselect * from issued_status;\n-- call issue_book(p_issued_id ,p_issued_member_id ,p_issued_book_isbn,p_issued_emp_id)\ncall issue_book('IS141','C220','978-0-553-57340-1','E105');\ncall issue_book('IS142','C220','978-8-173-71146-6','E105');\n\ncall issue_book('IS143','C220','978-0-307-58837-1','E105');\n\n-- to check the status changed to 'no' for issued_books\nselect * from books ;\n```\n\n\n\n**Task 20: Create Table As Select (CTAS)**\nObjective: Create a CTAS (Create Table As Select) query to identify overdue books and calculate fines.\n\nDescription: Write a CTAS query to create a new table that lists each member and the books they have issued but not returned within 30 days. The table should include:\n    The number of overdue books.\n    The total fines, with each day's fine calculated at $0.50.\n    The number of books issued by each member.\n    The resulting table should show:\n    Member ID\n    Number of overdue books\n    Total fines\n```sql\n/*   20. CTAS query to identify overdue books and calculate fines\n   \t\teach member,books issued,but not returned within 60 days\n\t\tthe table should include: the no of overdue books. The total fines , with each day's fine calculated at $0.50.\n\t\tThe number of books issued by each member. The resulting table should show\n\t\tmember ID , no of over due books, TOTal fines.*/\ncreate table temp_table as\nselect ib.issued_id,ib.issued_member_id,ib.issued_date,rs.return_date,(return_date-issued_date) as duration \n\t\tfrom issued_status as ib left outer join return_status as rs \n\t\ton ib.issued_id = rs.issued_id where (return_date-issued_date)\u003e60 or (return_date-issued_date) is null;\n\nselect * from temp_table;\n------------------------------\nupdate temp_table\nset duration = current_date - issued_date\nwhere duration is null;\n--------------------------------------------------------------------------------------main_query\ncreate table Overdues as\nselect tt.issued_member_id,\n\t\tmem.member_name,\n\t\tcount(tt.issued_id) as no_of_overdue_books,\n\t\t(sum(tt.duration)*0.50) as Total_fines\n from temp_table as tt join members as mem on tt.issued_member_id = mem.member_id \n where duration \u003e 30 \n group by tt.issued_member_id,mem.member_name\n order by (sum(duration)*0.50) desc;\n--------------------------------------------------------------------------------------main query\n```\n\n\n## Reports\n\n- **Database Schema**: Detailed table structures and relationships.\n- **Data Analysis**: Insights into book categories, employee salaries, member registration trends, and issued books,expensive_books.\n- **Summary Reports**: Aggregated data on high-demand books and employee performance.\n\n## Conclusion\n\nThis project demonstrates the application of SQL skills in creating and managing a library management system. It includes database setup, data manipulation, and advanced querying, providing a solid foundation for data management and analysis.\n\n## How to Use\n\n1. **Clone the Repository**: Clone this repository to your local machine.\n   ```sh\n   git clone https://github.com/Saikiran-Erukonda/Library_management_system_sql/tree/main \n   ```\n\n2. **Set Up the Database**: Execute the SQL scripts in the `Library management project.sql` file to create and populate the database.\n3. **Run the Queries**: Use the SQL queries in the `Library management project_part_2.sql`,`Library management project part 3.sql` file to perform the analysis.\n4. **Explore and Modify**: Customize the queries as needed to explore different aspects of the data or answer additional questions.\n\n## Author - Erukonda Saikiran\n\nThis project showcases SQL skills essential for database management and analysis. For more content on SQL and data analysis, connect with me through LinkedIn\n\n- **LinkedIn**: [Connect with me on Linked In](https://www.linkedin.com/in/erukonda-saikiran-4379911a3/)\n\n\nThank you for your interest in this project!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaikiran-erukonda%2Flibrary_management_system_sql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaikiran-erukonda%2Flibrary_management_system_sql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaikiran-erukonda%2Flibrary_management_system_sql/lists"}