问题:有关系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的应用。在MySQL中,多表连接是一种非常常见的操作,可以将多个表中的数据进行联合查询。本文将介绍MySQL多表连接的技巧,帮助你更加高效地进行数据查询。在MySQL中,常用的多表连接有三种:内连接、左连接和右连接。内连接是指只有在两个表中都存在匹配的数据时才会返回结果。内连接的语法如下:select 表名1.列名1,表名2.列名1…from 表名1 [inner] join 表名2 on 表名1.列名1 =表名2.列名1左连接是指返回左表中所有的数据,同时将右表中匹配的数据进行连接。左连接的语法如下:select 表名1.列名1,表名2.列名...1 from 表名1 left join 表名2右连接是指返回右表中所有的数据,同时将左表中匹配的数据进行连接。右连接的语法如下:select 表名1.列名1,表名2.列名1…from 表名1 right join 表名2知识点2:如何把握查询需求“没有不及格成绩的学生学号和姓名”?这里部分学员选择了D。该选项的where语句中使用“sno in(SELECT SNO FROM SC WHERE GRADE>=60);”存在漏判。这里只要有学员存在一门课程大于等于60,就会将其SNO筛选出来,即使他存在不及格的科目。Sno not in (SELECT SNO FROM SC WHERE GRADE<60);先找出存在不及格科目的学号,然后限定要查询的学生的学号不在此数据集内。这样满足查询需求:不存在不及格学生。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。