Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
29 views6 pages

SQL

SQL Queries Project

Uploaded by

shivankdix
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)
29 views6 pages

SQL

SQL Queries Project

Uploaded by

shivankdix
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/ 6

CREATE TABLE Professor (

SSN VARCHAR(11) PRIMARY KEY, -- Unique identifier for a professor


Name VARCHAR(50) NOT NULL,
Age INTEGER,
Rank VARCHAR(10),
Research_Specialty VARCHAR(50)
);
CREATE TABLE Project (
Project_Number INTEGER PRIMARY KEY,
Sponsor_Name VARCHAR(50) NOT NULL,
Start_Date DATE,
End_Date DATE,
Budget DECIMAL(10,2),
PI_SSN VARCHAR(11) REFERENCES Professor(SSN) -- Foreign key to Professor
);
CREATE TABLE Graduate_Student (
SSN VARCHAR(11) PRIMARY KEY, -- Unique identifier for a student
Name VARCHAR(50) NOT NULL,
Age INTEGER,
Degree_Program VARCHAR(10)
);
CREATE TABLE Department (
Department_Number INTEGER PRIMARY KEY,
Dept_Name VARCHAR(50) NOT NULL,
Main_Office VARCHAR(50),
Chairman_SSN VARCHAR(11) REFERENCES Professor(SSN) -- Foreign key to
Professor
);
CREATE TABLE Works_On (
SSN VARCHAR(11) REFERENCES Professor(SSN),
Project_Number INTEGER REFERENCES Project(Project_Number),
PRIMARY KEY (SSN, Project_Number) -- Composite primary key
);
CREATE TABLE Works_On (
SSN VARCHAR(11) REFERENCES Graduate_Student(SSN),
Project_Number INTEGER REFERENCES Project(Project_Number),
PRIMARY KEY (SSN, Project_Number) -- Composite primary key
);
CREATE TABLE Supervised_By (
Student_SSN VARCHAR(11) REFERENCES Graduate_Student(SSN),
Supervisor_SSN VARCHAR(11) REFERENCES Professor(SSN),
PRIMARY KEY (Student_SSN, Supervisor_SSN) -- Composite primary key
);
CREATE TABLE Works_In (
SSN VARCHAR(11) REFERENCES Professor(SSN),
Department_Number INTEGER REFERENCES Department(Department_Number),
Time_Percentage DECIMAL(3,2), -- Percentage of time spent in the
department
PRIMARY KEY (SSN, Department_Number) -- Composite primary key
);
CREATE TABLE Major_Department (
SSN VARCHAR(11) REFERENCES Graduate_Student(SSN),
Department_Number INTEGER REFERENCES Department(Department_Number),
PRIMARY KEY (SSN) -- Foreign key is also the primary key
);

CREATE TABLE Student_Advisor (


Student_SSN VARCHAR(11) REFERENCES Graduate_Student(SSN),
Advisor_SSN VARCHAR(11) REFERENCES Graduate_Student(SSN),
PRIMARY KEY (Student_SSN), -- Foreign key is also the primary key
FOREIGN KEY (Advisor_SSN) REFERENCES Graduate_Student(SSN) -- Ensure
advisor exists
);

1. Display the list of Professors in the University:


SQL
SELECT * FROM Professor;

2. Display the details of the projects undertaken by the professors:


SQL
SELECT P.Project_Number, P.Sponsor_Name, P.Start_Date, P.End_Date,
P.Budget, Prof.Name AS Professor_Name
FROM Project P
INNER JOIN Works_On W ON P.Project_Number = W.Project_Number
INNER JOIN Professor Prof ON W.SSN = Prof.SSN;

3. Display the number of projects being undertaken by each Professor:


SQL
SELECT Prof.SSN, Prof.Name, COUNT(*) AS Number_Of_Projects
FROM Professor Prof
INNER JOIN Works_On W ON Prof.SSN = W.SSN
GROUP BY Prof.SSN, Prof.Name;

4. Display the students working on each project:


SQL
SELECT P.Project_Number, P.Sponsor_Name, GS.Name AS Student_Name
FROM Project P
INNER JOIN Works_On W ON P.Project_Number = W.Project_Number
INNER JOIN Graduate_Student GS ON W.SSN = GS.SSN;

5. Display the list of students and their project supervisors:


SQL
SELECT GS.Name AS Student_Name, Prof.Name AS Supervisor_Name
FROM Graduate_Student GS
INNER JOIN Works_On W ON GS.SSN = W.SSN
INNER JOIN Professor Prof ON W.Project_Number =
Prof.Manages_Project_Number;

6. Display details of students working on more than one project and their
supervisors:
SQL
SELECT GS.Name AS Student_Name, Prof.Name AS Supervisor_Name,
COUNT(DISTINCT P.Project_Number) AS Projects_Worked_On
FROM Graduate_Student GS
INNER JOIN Works_On W ON GS.SSN = W.SSN
INNER JOIN Professor Prof ON W.Project_Number =
Prof.Manages_Project_Number
GROUP BY GS.SSN, Prof.Name
HAVING COUNT(DISTINCT P.Project_Number) > 1;

7. Display the list of Professors who are chairman of some department:


SQL
SELECT Prof.Name, Dept.Dept_Name
FROM Professor Prof
INNER JOIN Department Dept ON Prof.SSN = Dept.Chairman_SSN;

8. Display the students and their major department:


SQL
SELECT GS.Name AS Student_Name, Dept.Dept_Name
FROM Graduate_Student GS
INNER JOIN Department Dept ON GS.SSN = Dept.Major_Department_SSN;

9. Display the list of students and their senior advisors:


SQL
SELECT GS1.Name AS Student_Name, GS2.Name AS Senior_Advisor_Name
FROM Graduate_Student GS1
INNER JOIN Graduate_Student GS2 ON GS1.Senior_Advisor_SSN = GS2.SSN;

10. Display the list of students who have the same senior advisor:
SQL
SELECT GS1.Name AS Student_Name, COUNT(*) AS Number_Of_Mentees
FROM Graduate_Student GS1
INNER JOIN Graduate_Student GS2 ON GS1.Senior_Advisor_SSN = GS2.SSN
GROUP BY GS1.Senior_Advisor_SSN, GS1.Name
HAVING COUNT(*) > 1;

11. Display the number of student mentees with each project showing the one
with maximum mentees on top:
SQL
SELECT P.Project_Number, P.Sponsor_Name, COUNT(DISTINCT GS.SSN) AS
Number_Of_Mentees
FROM Project P
INNER JOIN Works_On W ON P.Project_Number = W.Project_Number
INNER JOIN Graduate_Student GS ON W.SSN = GS.SSN
GROUP BY P.Project_Number, P.Sponsor_Name
ORDER BY Number_Of_Mentees DESC;

12. Display the list of students working on the same projects:


SQL
WITH StudentProjects AS (
SELECT SSN, Project_Number
FROM Works_On
)
SELECT SP1.SSN, SP1.Name AS Student_Name1, SP2.Name AS Student_Name2
FROM StudentProjects SP1
INNER JOIN StudentProjects SP2 ON SP1.Project_Number =
SP2.Project_Number
WHERE SP1.SSN <> SP2.SSN;

13. Display the list of students and professors in Marketing and Finance
departments:
SQL
SELECT GS.Name AS Student_Name, Prof.Name AS Professor

Here are the SQL queries for the additional questions you requested:

14. Display the projects that will be completed in 2021:


SQL
SELECT P.Project_Number, P.Sponsor_Name, P.Start_Date, P.End_Date,
P.Budget
FROM Project P
WHERE YEAR(P.End_Date) = 2021;

This query selects all projects where the End_Date year is 2021.
15. Display the most profitable project along with their sponsor and the
associated professor(s) and students:
SQL
WITH MostProfitableProject AS (
SELECT Project_Number, MAX(Budget) AS MaxBudget
FROM Project
)
SELECT P.Project_Number, P.Sponsor_Name, Prof.Name AS PI_Name, GS.Name
AS Student_Name
FROM Project P
INNER JOIN MostProfitableProject MP ON P.Project_Number =
MP.Project_Number
INNER JOIN Professor Prof ON P.PI_SSN = Prof.SSN
INNER JOIN Works_On WO ON P.Project_Number = WO.Project_Number
INNER JOIN Graduate_Student GS ON WO.SSN = GS.SSN
GROUP BY P.Project_Number, P.Sponsor_Name, Prof.Name, GS.Name;

16. Display the number of projects currently running, the most profitable and
the least profitable projects:
SQL
WITH CurrentProjects AS (
SELECT Project_Number
FROM Project
WHERE CURDATE() >= Start_Date AND CURDATE() <= End_Date
)
SELECT (SELECT COUNT(*) FROM CurrentProjects) AS
Current_Projects_Count,
P1.Project_Number AS Most_Profitable_Number, P1.Sponsor_Name AS
Most_Profitable_Sponsor,
P2.Project_Number AS Least_Profitable_Number, P2.Sponsor_Name AS
Least_Profitable_Sponsor
FROM Project P1
INNER JOIN (
SELECT Project_Number, MAX(Budget) AS MaxBudget
FROM Project
GROUP BY Project_Number
) AS MostProfitable ON P1.Project_Number =
MostProfitable.Project_Number
INNER JOIN (
SELECT Project_Number, MIN(Budget) AS MinBudget
FROM Project
GROUP BY Project_Number
) AS LeastProfitable ON P2.Project_Number =
LeastProfitable.Project_Number
INNER JOIN Project P2 ON P2.Project_Number =
LeastProfitable.Project_Number;

17. List the projects whose budget is more than the average project budget:
SQL
WITH AvgBudget AS (
SELECT AVG(Budget) AS AverageBudget
FROM Project
)
SELECT P.Project_Number, P.Sponsor_Name, P.Budget
FROM Project P
INNER JOIN AvgBudget AB ON P.Budget > AB.AverageBudget;

18. Display the details of department whose professors have the maximum
projects:
SQL
WITH ProfessorProjects AS (
SELECT Prof.SSN, Dept.Dept_Name, COUNT(*) AS Project_Count
FROM Professor Prof
INNER JOIN Works_On WO ON Prof.SSN = WO.SSN
INNER JOIN Department Dept ON Prof.SSN = Dept.Chairman_SSN
GROUP BY Prof.SSN, Dept.Dept_Name
)
SELECT *
FROM ProfessorProjects
WHERE Project_Count = (
SELECT MAX(Project_Count)
FROM ProfessorProjects
);

19. Display the details of Marketing and Finance Projects (Assuming no


subject area field):
SQL
SELECT P.Project_Number, P.Sponsor_Name, P.Start_Date, P.End_Date,
P.Budget
FROM Project P
WHERE P.Project_Number IN (
SELECT Project_Number
FROM Project
WHERE P.Title LIKE '%Marketing%' OR P.Description LIKE '%Marketing%'
UNION ALL
SELECT Project_Number
FROM Project
WHERE P.Title LIKE '%Finance%' OR P.Description LIKE '%Finance%'
);

20. Display the list of students who are not assigned any projects or working
on 2 projects:
SQL
WITH StudentProjects AS (
SELECT SSN, COUNT(*) AS Project_Count
FROM Works_On
GROUP BY SSN
)
SELECT GS.SSN, GS.Name
FROM Graduate_Student GS
LEFT JOIN StudentProjects SP ON GS.SSN = SP.SSN
WHERE SP.Project_Count IS NULL OR SP.Project_Count = 2;

You might also like