SQL Exer1 2review
SQL Exer1 2review
1
CREATE TABLE student (
snum INT NOT NULL PRIMARY KEY,
name VARCHAR(30),
major VARCHAR(10),
level CHAR(3) CHECK IN(""UN"", ""MA"", ""PhD"")
age INT );
1.2
CREATE TABLE Student (
Snum INT NOT NULL PRIMARY KEY,
Name VARCHAR(30) NOT NULL,
Major VARCHAR(10) NOT NULL,
Level CHAR(3) NOT NULL,
Age INT,
CONSTRAINT student_level_check CHECK (Level IN ('UN', 'MA', 'PhD')),
CONSTRAINT student_age_check CHECK (Age BETWEEN 18 AND 45)
)
2.1
CREATE TABLE Faculty(
Fid INT,
Name CHAR(10),
Dept CHAR(10),
PRIMARY KEY (Fid)
)
2.2
CREATE TABLE Faculty(
Fid INT NOT NULL PRIMARY KEY,
Name CHAR(10),
Dept CHAR(10))
3.1
CREATE TABLE Class(
ClassName VARCHAR(10),
Time DATETIME,
Room CHAR(5),
Fid INT,
FOREIGN KEY(Fid) REFERENCES Faculty(Fid) ON DELETE SET NULL
)
3.2
create table Class (
ClassName varchar(10) not null,
Time datetime,
Room char(5),
Fid int,
constraint primary key(ClassName),
constraint foreign key(Fid) references faculty(Fid) ON DELETE RESTRICT ON UPDATE CASCADE
)
4.1
CREATE TABLE Enrolled(
Snum INT,
ClassName VARCHAR(10),
PRIMARY KEY(Snum),
FOREIGN KEY(Snum) REFERENCES Students(Snum) ON DELETE SET NULL
)
4.2
CREATE TABLE Enrolled(
Snum INT,
ClassName VARCHAR(10),
CONSTRAINT snum_classname_pk PRIMARY KEY (Snum, ClassName),
INDEX(Snum),
FOREIGN KEY (Snum) REFERENCES Student(Snum),
INDEX(ClassName),
FOREIGN KEY (ClassName) REFERENCES Class(ClassName)
6.1
SELECT Dept FROM Faculty
6.2
SELECT DISTINCT Dept
FROM Faculty
7.1
SELECT DISTINCT ClassName
7.2
SELECT ClassName FROM Class WHERE ClassName IN (SELECT ClassName FROM Enrolled);
8.1
select ClassName from class where Room like '%B%';
8.2
SELECT *
FROM Class
WHERE SUBSTRING(Room, 1, 1) = "B"
9.1
SELECT Name FROM Students WHERE Major = 'CS' AND Snum IN (SELECT Snum FROM Enrolled WHERE
ClassName = 'Math92');
9.2
select distinct Name from Students s, Enrolled e
where s.Major = ""CS"" and s.Snum = e.Snum and e.Classname = 'Math92'
9.3
SELECT DISTINCT Name
FROM Students
INNER JOIN Enrolled ON Students.Snum = Enrolled.Snum
WHERE Major = 'CS' AND ClassName = 'Math92'
10.1
SELECT DISTINCT name
FROM student s, class c, enrolled e
WHERE s.snum = e.snum
AND s.major = 'CS'
AND e.class_name = 'Math92'
AND s.level = 'UN'
AND s.age > 25
10.2
SELECT Student.Name
FROM Student
JOIN Enrolled ON Student.Snum = Enrolled.Snum
JOIN Class ON Enrolled.ClassName = Class.ClassName
WHERE Student.Major = 'CS'
AND Student.Level = 'UN'
AND Student.Age > 25
AND Class.ClassName = 'Math92'
10.3
SELECT DISTINCT Name FROM Student
WHERE (Snum IN (SELECT Snum FROM Enrolled WHERE ClassName = ""Math92""))
AND (Snum IN (SELECT Snum FROM Student WHERE Major = ""CS AND Age >= 25 AND Level = ""UN""))"
11.1
SELECT DISTINCT s.Name
FROM Students s
JOIN Enrolled e ON s.Snum = e.Snum
WHERE s.Major = 'CS' AND e.ClassName = 'Math92' AND s.Level = 'UN' AND s.Age > (SELECT MAX(Age)
FROM Students WHERE Level = 'PhD'
11.2
SELECT DISTINCT S.Name
FROM Student S
JOIN Enrolled E ON S.Snum = E.Snum
WHERE S.Major = 'CS' AND E.ClassName = 'Math92' AND S.Level = 'UN'
AND S.Age > (SELECT MIN(Age) FROM Student WHERE Level = 'PhD')
11.3
SELECT Name
FROM Student S1 JOIN Enrolled USING(Snum)
WHERE Level = 'UN' AND MAJOR = 'CS' AND classname = 'Math92' AND EXISTS (SELECT *
FROM Student S2
WHERE S1.Age > S2.Age AND S2.Level = 'PhD')
11.4
SELECT Name
FROM Student
WHERE Student.Major = 'CS'
AND Student.Level='UN'
AND Student.Snum IN (SELECT Snum FROM Enrolled WHERE ClassName = 'Math92')
AND Student.Age > ANY(SELECT Age FROM Student WHERE Level='PhD')
11.5
SELECT DISTINCT S.Name
FROM Student S
JOIN Enrolled E ON S.Snum = E.Snum
JOIN Class C ON E.ClassName = C.ClassName
JOIN Student S2 ON S2.Level = 'PhD' AND S.Age > S2.Age
WHERE S.Major = ""CS"" AND C.ClassName = "Math92"
12.1
SELECT DISTINCT c.ClassName
FROM Class c
LEFT JOIN Faculty f ON c.Fid = f.Fid
WHERE c.Room = 'R128' OR f.Name = 'H.Merlin'
12.2
SELECT ClassName FROM Class
WHERE Room = ""R128"" OR Fid IN (SELECT Fid FROM Faculty WHERE Name = ""H.Merlin"")
12.3
SELECT ClassName
FROM Class
WHERE Room = 'R128'
UNION
SELECT ClassName
FROM Class
WHERE Fid = (SELECT Fid FROM Faculty WHERE Name = 'H.Merlin')
13.1
SELECT DISTINCT(S.Name)
FROM Students S, Class C1, Class C2, Enrolled E1, Enrolled E2
WHERE S.Snum = E1.Snum AND S.Snum = E2.Snum
AND E1.Snum = E2.Snum
AND E1.ClassName <> E2.ClassName
AND E1.ClassName = C1.ClassName AND E2.ClassName = C2.ClassName
AND C1.Time = C2.Time;
13.2
SELECT Name FROM Students WHERE Snum IN (Select Snum FROM Enrolled GROUP BY Time, Snum
HAVING COUNT(*) >= 2);
13.3
select * from students where exists ( select * from Enrolled E1, Enrolled E2, Class S1, Class S2 where
E1.Snum = students.Snum and E2.Snum = students.Snum and S1.ClassName = E1.ClassName and
S2.ClassName = E2.ClassName and E1.ClassName != E2.ClassName and S1.Time = S2.Time );
14.1
SELECT *
FROM Students
WHERE Snum NOT IN (SELECT DISTINCT Snum FROM Enrolled)
14.2
SELECT * FROM Student
WHERE Snum NOT IN ( SELECT Snum FROM Enrolled WHERE EXISTS (SELECT c1,c2 FROM Enrolled
GROUP BY Snum WHERE c1 != c2 AND c1.time = c2.time) );"
14.3
SELECT DISTINCT S.Name
FROM Student S
LEFT JOIN Enrolled E ON S.Snum = E.Snum
WHERE E.Snum IS NULL
14.4
SELECT Name
FROM Student
WHERE NOT EXISTS (
SELECT 1
FROM Enrolled
WHERE Enrolled.Snum = Student.Snum
)
14.5
SELECT s1.name
FROM student s1
WHERE name NOT IN (SELECT DISTINCT s2.name FROM student s2 JOIN enrolled ON
enrolled.snum=s2.snum)
15.1
SELECT ClassName FROM Class WHERE ClassName IN (SELECT Class.ClassName FROM Class LEFT JOIN
Enrolled GROUP BY Class.ClassName HAVING COUNT (Class.ClassName) < 20)
15.2
select ClassName from class where ( select count(*) from enrolled,students where
class.ClassName=enrolled.ClassName and students.Snum=enrolled.Snum)<20
15.3