【发布时间】:2021-06-13 22:33:40
【问题描述】:
在这个大学数据库中:
CREATE TABLE Stud(
[S#] INT PRIMARY KEY,
Sname NVARCHAR(50),
City NVARCHAR(50),
GPA FLOAT,
[Clg#] SMALLINT
);
CREATE TABLE Sec(
[Sec#] SMALLINT,
[C#] INT,
[S#] INT,
Semester SMALLINT,
Pname NVARCHAR(50),
Score NVARCHAR(30),
PRIMARY KEY([Sec#], [C#], Semester)
);
Stud
Sec#,C#,S#,Semester,Pname,Score
1724,10172,1133848,161,Sullivan,62%
1516,51516,4182532,152,Cooper,73%
1747,10174,1133848,152,Sullivan,75%
1747,10174,2130502,153,Sullivan,55%
1540,10156,2203305,161,Sullivan,60%
1540,10156,1133848,181,Sullivan,87%
1540,10156,2203305,182,Sullivan,40%
1802,10156,4182532,192,Sullivan,60%
Sec
S#,Sname,City,GPA,Clg#
1133848,Parker,NY,3.8,10
2130502,White,Chicago,2.8,10
2203305,Gardner,LA,3.5,1
3120504,West,Boston,3.85,4
3166801,Warren,Seattle,3.2,5
4182532,Rogers,NY,3.3,5
4209836,Allen,Austin,1.5,6
我有这个问题:
查找参加过所有沙利文老师教授的课程的学生的姓名和 ID。
我可以很容易地用关系代数找到答案:
Π ????#,????????????????????,????#(???????????????? ⋈ ????????????) ÷ Π c#(σ pname="Sullivan" (sec))
- 如何在 SQL 中实现除法运算符?
我们的老师给了我们这个 SQL SERVER 的答案:
???????????????????????? ????????????????.????#, ????????????????????
???????????????? ????????????????, ????????????
???????????????????? ????????????????.????# = ????????????.????#
???????????????????? ???????? ????????????????.????#, ????????????????????
???????????????????????? ????# ???????????????????????????????? (???????????????????????? DISTINCT ????#
???????????????? ????????????
WHERE pname ="Sullivan");
从我们在线课程的幻灯片中,这就是他们所说的CONTAINS:
- 但从我google的结果来看,
contains函数与集合无关,它似乎是一个全索引的测试搜索函数。如果我错了,请纠正我。
一段时间后,我想出了这个解决方案:
SELECT Stud.* FROM Stud WHERE S# IN
(SELECT S#/*,COUNT(DISTINCT C#) as c*/ FROM Sec WHERE Pname='Sullivan' GROUP BY S# HAVING COUNT(DISTINCT C#)=
(SELECT COUNT(DISTINCT [C#]) FROM Sec WHERE Pname='Sullivan'));
【问题讨论】:
-
你的老师真的应该学习明确的
JOIN语法。 -
这个查询是写在石碑上的吗?!
-
这个查询在很多方面都很奇怪。可以换别的班吗?
-
除法运算符在 SQL 中没有直接等价物。通常通过使用子查询和比较 COUNT() 来解决它。
-
contains function 与 sets 无关 正确 - 它基于全文索引。如果该解决方案应该在 SQL Server 中“正确”工作,那么您的老师就是在浪费您的时间和金钱。这是您第二次发布这样的问题 - 要么使用您老师使用的数据库引擎,要么找到其他课程。
标签: mysql sql sql-server relational-database relational-algebra