我有两张桌子:
students(id, name, school_id)
schools(id, name)
我正在尝试使用EXISTS
来了解是否有任何学生去特定的学校,比如说“哈佛”。我知道在EXISTS
之后使用WHERE
,但我想知道我是否可以这样做:
SELECT EXISTS
(SELECT *
FROM students st, schools sch
WHERE st.school_id=sch.id AND sch.name="Harvard");
此查询是否正确?我正在研究MySQL Workbench,我没有收到错误。但我不知道它是否应该做它应该做的事情。
如果不是,那我应该改变什么?我只是想知道它是否正确以及我将来是否可以使用这种语法。
请注意,所需结果为yes
或no
(1
或0
)。
我如何得到这个结果?
很抱歉,如果我的问题不清楚,如果您仍然不明白,我可以再次编辑。
答案 0 :(得分:0)
你可以得到计数,然后你会知道是否存在 - 如果有,有多少......
SELECT COUNT(*)
FROM students st, schools sch
WHERE st.school_id=sch.id AND sch.name="Harvard"
EXISTS
关键字通常用作前置条件...即“如果不存在,则添加此项...”
答案 1 :(得分:0)
这是一个简单Select
,Join
。
SELECT *
FROM Students S
JOIN Schools SC
ON S.School_id = SC.id
Where SC.Name = 'Harvard'
这将为您提供前往哈佛的学生的所有行(如果有的话)。如果您想进行计数,可以改为SELECT COUNT(*)
或通过指示SELECT
语句中的特定列来限制返回哪些列
答案 2 :(得分:0)
这将为您提供前往哈佛大学的学生姓名。如果您希望了解哈佛大学有多少学生用st.name
替换count(*)
。
请注意,您在SELECT
语句中的EXISTS
列表中放置的内容无关紧要,因此选择常量值可提供比选择列更好的性能。
SELECT
st.name
FROM
students st
WHERE
EXISTS(
SELECT 1 FROM schools s WHERE s.name= 'Harvard' AND s.id = st.school_id)
OR
SELECT
st.name
FROM
students st
INNER JOIN schools s ON
st.school_id = s.id
WHERE
s.name = 'Harvard'
附加说明:以下代码只会产生true
或false
的结果。
SELECT EXISTS ( <query> )
这意味着如果有任何学生在哈佛学习,下面的查询将返回true。
SELECT EXISTS (
SELECT 1
FROM students st
INNER JOIN schools s ON st.school_id = s.id
WHERE s.name = 'Harvard' )