问题:有关系S(SNO, SNAME, SDEPT,SAGE),C(CNO, CNAME),SC(SNO, CNO, GRADE)。其中SNO是学生号,SNAME是学生姓名,SDEPT是系别,SAGE是学生年龄, CNO是课程号,CNAME是课程名称,GRADE是成绩。要查询“计算机”系的没有不及格成绩的学生学号和姓名? A、SELECT Sno, Sname FROM SWHERE Sdept='计算机’INTERSECT SELECT Sno, Sname FROM SC WHERE GRADE>=60;B、SELECT Sno, Sname FROM S WHERE Sdept='计算机’and Sno not in (SELECT SNO FROM SC WHERE GRADE<60);C、SELECT Sno, Sname FROM S WHERE Sdept='计算机’ EXCEPTSELECT SNO FROM SC WHERE GRADE<60;D、SELECT Sno, Sname FROM S WHERE Sdept='计算机’and sno in(SELECT SNO FROM SC WHERE GRADE>=60);解析:正确答案为B,这是典型的多表连接问题,同时考察了关于in和not in的应用。知识点1:多表连接在MySQL中,多表连接是一种非常常见的操作,可以将多个表中的数据进行联合查询。本文将介绍MySQL多表连接的技巧,帮助你更加高效地进行数据查询。在MySQL中,常用的多表连接有三种:内连接、左连接和右连接。(1)内连接内连接是指只有在两个表中都存在匹配的数据时才会返回结果。内连接的语法如下:select 表名1.列名1,表名2.列名1…from 表名1 [inner] join 表名2 on 表名1.列名1 =表名2.列名1(2)左连接左连接是指返回左表中所有的数据,同时将右表中匹配的数据进行连接。左连接的语法如下:select 表名1.列名1,表名2.列名...1 from 表名1 left join 表名2on 表名1.列名1 =表名2.列名1(3)右连接右连接是指返回右表中所有的数据,同时将左表中匹配的数据进行连接。右连接的语法如下:select 表名1.列名1,表名2.列名1…from 表名1 right join 表名2on 表名1.列名1 =表名2.列名1知识点2:如何把握查询需求“没有不及格成绩的学生学号和姓名”?这里部分学员选择了D。该选项的where语句中使用“sno in(SELECT SNO FROM SC WHERE GRADE>=60);”存在漏判。这里只要有学员存在一门课程大于等于60,就会将其SNO筛选出来,即使他存在不及格的科目。注意B选项:Sno not in (SELECT SNO FROM SC WHERE GRADE<60);先找出存在不及格科目的学号,然后限定要查询的学生的学号不在此数据集内。这样满足查询需求:不存在不及格学生。添加老师微信,一起了解更多内容: