mysql中in嵌套select只能查询出一个结果

我从来没有见过这么松散的写法...好吧,每次执行WHEREidin(SELECTknowledge...)中的数据时,括号都要执行一次。
这可能是发生错误的原因。
详情未知。

mysqlin与like的嵌套?

在SQL查询中,使用“mysqlin”和“like”进行嵌套是常见的操作。
例如`selectnamefromworldwherenamein(namelike'%a%')`的逻辑如下:首先使用`namelike'%a%'`条件过滤掉包含字母“a”的名字。
您可以通过运行此查询来检查结果。
接下来,查询结果由“in”子句引用。
这意味着MySQL将进行比较,看看当前行的“name”是否在之前过滤的包含“a”的名称列表中。
这里的关键点是,当`namelike'%a%'`为true时,即名称包含“a”,`name`将被转换为逻辑值1(true)。
另一方面,如果“name”不包含“a”,则将其转换为逻辑值0(假)。
在“in”子句中,这些逻辑值用于判断是否满足某些条件。
第一个查询“wherenamein(namelike'%a%')”本质上搜索所有包含“a”的名称。
同时还涉及到一个逻辑判断,即如果`namelike'%a%'`的结果为假,那么`name`不会出现在`in`子句的列表中,所以返回的结果将是一个空集。
因此,第一个查询的逻辑可以简化为“所有包含'a'的名称”,其结果与后续查询互补。
后续查询直接根据`namelike'%a%'`的过滤结果,返回专门包含字母“a”的名称。
这种嵌套结构可以让您灵活地将查询应用于各种数据过滤场景。

mysql实验二、连接查询及嵌套查询

(1)查询软件学院学生的选课及考试成绩。
查询结果包括:学号、姓名、课程名称、成绩。
通过连接student表、course表和sc表,使用WHERE子句过滤出软件学院的学生信息,然后选择必填字段(学号、姓名、课程名称、成绩)。
(2)查询每个学生考试的平均成绩。
查询结果包括:学号、姓名、平均成绩。
通过连接student表和sc表,使用WHERE子句过滤出学生信息,然后使用GROUPBY子句按学号分组,计算平均分。
(3)查询所有选了2门及以上课程的男学生的学号、姓名、选课数。
通过连接sc表和student表,使用WHERE子句过滤掉男生信息,然后使用COUNT函数计算选课数。
GROUPBY子句按学号分组,HAVING子句过滤掉选课数大于2的记录。
(4)对于每个学生选择的课程,找出该学生选择的课程中的最高分。
查询结果包括:学号、姓名以及该学生最高分的成绩,并且只显示最高分大于等于90分的相关信息。
通过连接student表和sc表,使用GROUPBY子句按学生姓名分组,使用MAX函数查找最高分,使用HAVING子句过滤掉分数大于或等于90分的记录。
(5)查询同时选修“课程2”和“课程3”的学生的学号和姓名。
使用嵌套的IN子句,首先过滤掉选修“课程2”的学生,然后从这些学生中筛选出也选修“课程3”的学生。
(6)查询学生选课超过所选课程平均成绩的信息。
查询结果包括:学号、课程号。
使用相关子查询,首先计算每个学生的平均成绩,然后过滤掉课程成绩大于平均成绩的记录。
(7)查询学生选课超过所选课程平均分的信息。
查询结果包括:学号、姓名、课程号、课程名称、成绩。
使用连接查询和相关子查询,首先连接student、sc、course表,然后计算每个学生的平均分,过滤掉分数大于平均分的记录。
(8)查询“孟文”所修读的课程号和课程名称(需使用嵌套查询)。
使用嵌套查询先过滤出孟文的学生信息,然后再过滤出他们从这些学生中选修的课程号。
和课程名称。
(9)查询至少修读过学生201215121选择的全部课程的学生学号。
(如果没有查询结果,则调整对应数据表中的数据,使查询结果至少有1条)。
(可选)通过嵌套的NOTEXISTS子查询,首先过滤出学生201215121所修读的课程,然后从其他学生中过滤出至少修读过这些课程的学生的学号。
(10)查看至少修读过201215121号学生选择的所有课程的学生的学号和姓名。
(如果没有查询结果,则需要调整对应数据表中的数据,使得至少有1个)查询结果)。
(可选)使用嵌套的NOTEXISTS子查询过滤出学生201215121所修读的课程,然后从其他学生中过滤出至少修读过这些课程的学生的学号和姓名。