You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

校验给定SQL查询的有效性并验证查询结果是否正确

SQL合法性判断与推导验证

给定关系与数据表

我们有两个关系:

  • Teacher(Name, Class, Age)
  • Student(Name, Class, Age)

对应的数据表如下:

Student表

NameClassAge
JohnA112
MikeA18
HarryA211

Teacher表

NameClassAge
Mr.SmithA130
Mr.NewmannA229

问题

  1. 请问以下SQL代码是否合法:
SELECT * FROM Student WHERE Age>10 AND Class IN(SELECT Class FROM Teacher WHERE 
Name='Mrs.Smith')
  1. 我尝试反向推导:
    子查询 (SELECT Class FROM Teacher WHERE Name='Mrs.Smith') 的返回结果为:
Class
A1

因此最终查询结果应为:

NameClassAge
JohnA112

请问我的推导是否正确?

回答

  1. SQL代码合法性:这段SQL完全合法,语法符合SQL标准,逻辑是从Student表中筛选年龄大于10且班级存在于指定子查询结果中的记录,没有语法错误。

  2. 推导正确性:你的推导是错误的。

    • 首先看子查询:Teacher表中只有Mr.Smith,不存在Mrs.Smith这条记录,所以SELECT Class FROM Teacher WHERE Name='Mrs.Smith'的返回结果是空集,不是A1。
    • 当IN子查询返回空集时,Class IN(空集)这个条件不成立,整个WHERE条件Age>10 AND 不成立的结果为假,最终查询结果是空表,不会返回John的记录。

内容的提问来源于stack exchange,提问作者Volpina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:33:15