EXISTS sql中的语法?

时间:2015-04-28 20:11:53

标签: sql mysql-workbench exists

我有两张桌子:

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,我没有收到错误。但我不知道它是否应该做它应该做的事情。

如果不是,那我应该改变什么?我只是想知道它是否正确以及我将来是否可以使用这种语法。

请注意,所需结果为yesno10)。

我如何得到这个结果?

很抱歉,如果我的问题不清楚,如果您仍然不明白,我可以再次编辑。

3 个答案:

答案 0 :(得分:0)

你可以得到计数,然后你会知道是否存在 - 如果有,有多少......

SELECT COUNT(*) 
FROM students st, schools sch 
WHERE st.school_id=sch.id AND sch.name="Harvard"

EXISTS关键字通常用作前置条件...即“如果不存在,则添加此项...”

答案 1 :(得分:0)

这是一个简单SelectJoin

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'

附加说明:以下代码只会产生truefalse的结果。

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' )