551 lines
14 KiB
Markdown
551 lines
14 KiB
Markdown
## Writeup
|
|
|
|
### Table Creation
|
|
|
|
**Student Table Creation** - RegNo is the primary key as defined by the question.
|
|
```sql
|
|
SQL> create table STUDENT(regno varchar(20),name varchar(50),major varchar(20),bdate date,constraint pkeySTUDENT primary key(regno));
|
|
|
|
Table created.
|
|
```
|
|
**Course Table Creation**
|
|
```sql
|
|
SQL> create table COURSE(course# int,cname varchar(30),dept varchar(30));
|
|
|
|
Table created.
|
|
```
|
|
Verifying, we get
|
|
```sql
|
|
SQL> desc STUDENT;
|
|
Name Null? Type
|
|
----------------------------------------- -------- ----------------------------
|
|
REGNO NOT NULL VARCHAR2(20)
|
|
NAME VARCHAR2(50)
|
|
MAJOR VARCHAR2(20)
|
|
BDATE DATE
|
|
|
|
SQL> desc COURSE;
|
|
Name Null? Type
|
|
----------------------------------------- -------- ----------------------------
|
|
COURSE# NUMBER(38)
|
|
CNAME VARCHAR2(30)
|
|
DEPT VARCHAR2(30)
|
|
|
|
```
|
|
**Adding the textbook table:**
|
|
```SQL
|
|
SQL> create table text(book_isbn int primary key,booktitle varchar(20),publisher varchar(50),author varchar(50));
|
|
|
|
Table created.
|
|
|
|
SQL> desc TEXT;
|
|
Name Null? Type
|
|
----------------------------------------- -------- ----------------------------
|
|
BOOK_ISBN NOT NULL NUMBER(38)
|
|
BOOKTITLE VARCHAR2(20)
|
|
PUBLISHER VARCHAR2(50)
|
|
AUTHOR VARCHAR2(50)
|
|
|
|
```
|
|
|
|
For the ENROLL table, we'll have
|
|
|
|
```sql
|
|
SQL> ALTER TABLE COURSE
|
|
2 ADD CONSTRAINT pk_course PRIMARY KEY (course#);
|
|
|
|
Table altered.
|
|
|
|
SQL> CREATE TABLE ENROLL (
|
|
2 regno VARCHAR2(20),
|
|
3 course# NUMBER(38),
|
|
4 sem INT,
|
|
5 book_isbn NUMBER(38),
|
|
6 PRIMARY KEY (regno, course#),
|
|
7 CONSTRAINT fkey1course FOREIGN KEY (regno) REFERENCES STUDENT (regno),
|
|
8 CONSTRAINT fkey2course FOREIGN KEY (course#) REFERENCES COURSE (course#),
|
|
9 CONSTRAINT fkey3book FOREIGN KEY (book_isbn) REFERENCES TEXT (book_isbn)
|
|
10 );
|
|
|
|
Table created.
|
|
|
|
SQL>
|
|
SQL> create table BOOK_ADOPTION(course# int,sem int,book_isbn int,primary key(course#,book_isbn),constraint fkey1book_adoption foreign key(course#)references course(course#));
|
|
|
|
Table created.
|
|
|
|
SQL> desc ENROLL;
|
|
Name Null? Type
|
|
----------------------------------------- -------- ----------------------------
|
|
REGNO NOT NULL VARCHAR2(20)
|
|
COURSE# NOT NULL NUMBER(38)
|
|
SEM NUMBER(38)
|
|
BOOK_ISBN NUMBER(38)
|
|
|
|
SQL> desc BOOK_ADOPTION;
|
|
Name Null? Type
|
|
----------------------------------------- -------- ----------------------------
|
|
COURSE# NOT NULL NUMBER(38)
|
|
SEM NUMBER(38)
|
|
BOOK_ISBN NOT NULL NUMBER(38)
|
|
```
|
|
Now, defining the foreign key nature of BOOK_ISBN, we have:
|
|
|
|
```sql
|
|
SQL> alter table BOOK_ADOPTION add constraint fkey2book_adoption foreign key(book_isbn) references text(book_isbn);
|
|
|
|
Table altered.
|
|
|
|
SQL> alter table enroll add constraint fkey3enroll foreign key(book_isbn) references text(book_isbn);
|
|
|
|
Table altered.
|
|
```
|
|
|
|
Verifying status so far, we have
|
|
|
|
```sql
|
|
SQL> desc ENROLL;
|
|
Name Null? Type
|
|
----------------------------------------- -------- ----------------------------
|
|
REGNO NOT NULL VARCHAR2(20)
|
|
COURSE# NOT NULL NUMBER(38)
|
|
SEM NUMBER(38)
|
|
BOOK_ISBN NUMBER(38)
|
|
|
|
SQL> desc BOOK_ADOPTION;
|
|
Name Null? Type
|
|
----------------------------------------- -------- ----------------------------
|
|
COURSE# NOT NULL NUMBER(38)
|
|
SEM NUMBER(38)
|
|
BOOK_ISBN NOT NULL NUMBER(38)
|
|
|
|
SQL> descc TEXT;
|
|
SP2-0042: unknown command "descc TEXT" - rest of line ignored.
|
|
SQL> desc TEXT;
|
|
Name Null? Type
|
|
----------------------------------------- -------- ----------------------------
|
|
BOOK_ISBN NOT NULL NUMBER(38)
|
|
BOOKTITLE VARCHAR2(20)
|
|
PUBLISHER VARCHAR2(50)
|
|
AUTHOR VARCHAR2(50)
|
|
```
|
|
|
|
### POPULATING TUPPLES
|
|
|
|
**Insertion into student:**
|
|
|
|
```sql
|
|
SQL> insert into student values('123','Ashwin','CCE','17-oct-2003');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into student values('456','Aadit','CCE','03-feb-2005');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into student values('789','Shrikanth','Environment','01-jan-2023');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into student values('101','Aarav','Environment','23-sep-2004');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into student values('567','Amogh','CSE','03-mar-2004');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into student values('890','Saarthak','CSE','03-jul-2004');
|
|
|
|
1 row created.
|
|
```
|
|
|
|
Insertion into COURSE:
|
|
```sql
|
|
SQL> insert into COURSE values(1101,'DBMS','ICT');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into COURSE values(1102,'DAA','ICT');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into COURSE values(2201,'COA','CS');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into COURSE values(2202,'DSD','CS');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into COURSE values(3301,'MATH','EVS');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into COURSE values(3302,'POETRY','EVS');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into COURSE values(3303,'Random','EVS');
|
|
|
|
1 row created.
|
|
```
|
|
|
|
**Insertion in TEXT**:
|
|
```sql
|
|
SQL> insert into TEXT values(1234,'DBMS vol 1','Pearson','SS');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into TEXT values(4123,'DBMS vol 2','Pearson','SS');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into TEXT values(5678,'DAA vol 2','Pearson','Ramanujan');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into TEXT values(9012,'COA vol 666','Cengage','Satan');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into TEXT values(3456,'DSD vol 99','Penguin','Panda');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into TEXT values(7890,'Math vol 66','U-Like','R S Aggrwal');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into TEXT values(1123,'Poetry vol 0','OML','Yahya Bootwaala');
|
|
|
|
1 row created.
|
|
```
|
|
|
|
**Insertion into ENROLL**:
|
|
|
|
```sql
|
|
SQL> insert into enroll values('123',1101,1,1234);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into enroll values('123',1102,2,5678);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into enroll values('456',1101,3,4123);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into enroll values('456',2201,4,9012);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into enroll values('789',3301,5,7890);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into enroll values('789',3302,6,1123);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into enroll values('101',3302,7,7890);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into enroll values('567',2201,8,9012);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into enroll values('890',2202,1,3456);
|
|
|
|
1 row created.
|
|
```
|
|
|
|
**Insertion into BOOK_ADOPTION**:
|
|
```sql
|
|
SQL> insert into BOOK_ADOPTION values(1101,1,1234);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into BOOK_ADOPTION values(1102,2,4123);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into BOOK_ADOPTION values(1102,2,5678);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into BOOK_ADOPTION values(2201,3,9012);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into BOOK_ADOPTION values(2202,4,3456);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into BOOK_ADOPTION values(3301,5,7890);
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into BOOK_ADOPTION values(3302,6,1123);
|
|
|
|
1 row created.
|
|
```
|
|
|
|
We also create a book that has not been
|
|
```sql
|
|
SQL> insert into text values(8901,'Random vol 66','Classmate','R D Sharma');
|
|
|
|
1 row created.
|
|
|
|
SQL> insert into BOOK_ADOPTION values(3303,7,8901);
|
|
|
|
1 row created.
|
|
```
|
|
|
|
Resizing the tables to look good in preview...
|
|
|
|
```sql
|
|
SQL> alter table student modify name varchar(20);
|
|
|
|
Table altered.
|
|
|
|
SQL> alter table student modify regno varchar(10);
|
|
|
|
Table altered.
|
|
|
|
SQL> alter table text modify (booktitle varchar(20),publisher varchar(20),author varchar(20));
|
|
|
|
Table altered.
|
|
```
|
|
|
|
### ENTRY VALIDATION
|
|
|
|
```sql
|
|
|
|
SQL> select * from STUDENT;
|
|
|
|
REGNO NAME MAJOR BDATE
|
|
---------- -------------------- -------------------- ---------
|
|
123 Ashwin CCE 17-OCT-03
|
|
456 Aadit CCE 03-FEB-05
|
|
789 Shrikanth Environment 01-JAN-23
|
|
101 Aarav Environment 23-SEP-04
|
|
567 Amogh CSE 03-MAR-04
|
|
890 Saarthak CSE 03-JUL-04
|
|
|
|
6 rows selected.
|
|
|
|
SQL> select * from COURSE;
|
|
|
|
COURSE# CNAME DEPT
|
|
---------- ------------------------------ ------------------------------
|
|
1101 DBMS ICT
|
|
1102 DAA ICT
|
|
2201 COA CS
|
|
2202 DSD CS
|
|
3301 MATH EVS
|
|
3302 POETRY EVS
|
|
3303 Random EVS
|
|
|
|
7 rows selected.
|
|
|
|
SQL> select * from TEXT;
|
|
|
|
BOOK_ISBN BOOKTITLE PUBLISHER AUTHOR
|
|
---------- -------------------- -------------------- --------------------
|
|
1234 DBMS vol 1 Pearson SS
|
|
4123 DBMS vol 2 Pearson SS
|
|
5678 DAA vol 2 Pearson Ramanujan
|
|
9012 COA vol 666 Cengage Satan
|
|
3456 DSD vol 99 Penguin Panda
|
|
7890 Math vol 66 U-Like R S Aggrwal
|
|
1123 Poetry vol 0 OML Yahya Bootwaala
|
|
8901 Random vol 66 Classmate R D Sharma
|
|
|
|
8 rows selected.
|
|
|
|
SQL> select * from BOOK_ADOPTION;
|
|
|
|
COURSE# SEM BOOK_ISBN
|
|
---------- ---------- ----------
|
|
1101 1 1234
|
|
1102 2 4123
|
|
1102 2 5678
|
|
2201 3 9012
|
|
2202 4 3456
|
|
3301 5 7890
|
|
3302 6 1123
|
|
3303 7 8901
|
|
|
|
8 rows selected.
|
|
|
|
SQL> select * from ENROLL;
|
|
|
|
REGNO COURSE# SEM BOOK_ISBN
|
|
-------------------- ---------- ---------- ----------
|
|
123 1101 1 1234
|
|
123 1102 2 5678
|
|
456 1101 3 4123
|
|
456 2201 4 9012
|
|
789 3301 5 7890
|
|
789 3302 6 1123
|
|
101 3302 7 7890
|
|
567 2201 8 9012
|
|
890 2202 1 3456
|
|
|
|
9 rows selected.
|
|
```
|
|
|
|
### Listing courses with more than 1 TEXT BOX
|
|
```sql
|
|
SQL> select CNAME,count(COURSE#) as NUM_TB
|
|
2 from COURSE natural join BOOK_ADOPTION
|
|
3 group by CNAME
|
|
4 having count(COURSE#) > 1;
|
|
|
|
CNAME NUM_TB
|
|
------------------------------ ----------
|
|
DAA 2
|
|
```
|
|
### List the departments whose all course text books are published by a particular publisher.
|
|
|
|
```sql
|
|
SQL> select distinct dept
|
|
2 from course
|
|
3 where not exists(
|
|
4 select *
|
|
5 from text natural join book_adoption
|
|
6 where book_adoption.course# = course.course#
|
|
7 and publisher!='Pearson');
|
|
|
|
DEPT
|
|
------------------------------
|
|
ICT
|
|
```
|
|
|
|
|
|
### Find the students who have enrolled for course of more than one department
|
|
|
|
### Produce a list of students who are not enrolled.
|
|
|
|
### List the department which adopts all the books from the particular publisher
|
|
|
|
```sql
|
|
SQL> select distinct dept
|
|
2 from course natural join Book_Adoption
|
|
3 where book_isbn not in
|
|
4 (select book_isbn
|
|
5 from course natural join book_adoption join text using(book_isbn)
|
|
|
|
6 where publisher !='Pearson'
|
|
7 );
|
|
|
|
DEPT
|
|
------------------------------
|
|
ICT
|
|
|
|
SQL> select distinct dept
|
|
2 from course
|
|
3 where not exists
|
|
4 (
|
|
5 select *
|
|
6 from book_adoption natural join text
|
|
7 where publisher !='Cengage'
|
|
8 and course.course# =book_adoption.course#
|
|
9 );
|
|
|
|
DEPT
|
|
------------------------------
|
|
EVS
|
|
CS
|
|
```
|
|
|
|
### List the books which are adopted by the course as well as enrolled by the student
|
|
|
|
```sql
|
|
SQL> select booktitle
|
|
2 from text
|
|
3 where book_isbn in
|
|
4 (
|
|
5 select distinct book_isbn
|
|
6 from book_adoption join enroll using(book_isbn)
|
|
7 );
|
|
|
|
BOOKTITLE
|
|
--------------------
|
|
DBMS vol 1
|
|
DBMS vol 2
|
|
DAA vol 2
|
|
COA vol 666
|
|
DSD vol 99
|
|
Math vol 66
|
|
Poetry vol 0
|
|
|
|
7 rows selected.
|
|
```
|
|
|
|
### List the courses which has adapted at least two books from a specific publisher
|
|
|
|
```sql
|
|
SQL> select course#,cname
|
|
2 from text natural join book_adoption join course using(course#)
|
|
3 where publisher='Pearson'
|
|
4 group by (course#,cname)
|
|
5 having count(book_isbn)>=2;
|
|
|
|
COURSE# CNAME
|
|
---------- ------------------------------
|
|
1102 DAA
|
|
```
|
|
|
|
### Identify the students who are enrolled for maximum number of books.
|
|
|
|
```sql
|
|
SQL> select regno,name,count(book_isbn)
|
|
2 from enroll natural join student
|
|
3 group by regno,name having count(book_isbn)>= all
|
|
4 (select count(book_isbn)
|
|
5 from enroll natural join student
|
|
6 group by regno);
|
|
|
|
REGNO NAME COUNT(BOOK_ISBN)
|
|
---------- -------------------- ----------------
|
|
456 Aadit 2
|
|
123 Ashwin 2
|
|
789 Shrikanth 2
|
|
```
|
|
|
|
### List the publishers along with the number of books published by them.
|
|
|
|
```sql
|
|
SQL> select publisher,count(book_isbn)
|
|
2 from (select * from text)
|
|
3 group by publisher;
|
|
|
|
PUBLISHER COUNT(BOOK_ISBN)
|
|
-------------------- ----------------
|
|
Penguin 1
|
|
Cengage 2
|
|
OML 1
|
|
Pearson 3
|
|
Classmate 1
|
|
|
|
SQL>
|
|
SQL> select publisher,count(book_isbn)
|
|
2 from text
|
|
3 group by publisher;
|
|
|
|
PUBLISHER COUNT(BOOK_ISBN)
|
|
-------------------- ----------------
|
|
Penguin 1
|
|
Cengage 2
|
|
OML 1
|
|
Pearson 3
|
|
Classmate 1
|
|
```
|
|
|
|
### List the students who enrolled for all the books adopted by their course
|
|
|