怎样在access表中查找无成绩的学生?
2个回答
展开全部
回答这个问题前,我们需要先明确数据结构,否则只能泛泛而谈。假设数据库有如下两张表。
学生表(学号,姓名)
成绩表(学号,科目,分数)
如果一个学生他没有成绩,那么他的学号就不会出现在成绩表里面。我们只要选择出学生表里学号与成绩表里的学号存在非交集的那些记录就可以了。据此我们可以编写并运行以下几种SQL选择查询语句:
1) 使用not in关键字
select * from 学生表 where 学号 not in (select 学号 from 成绩表);
2) 使用非存在not exists关键字
select * from 学生表 where not exists (select 1 from 成绩表 where 学生表.学号=成绩表.学号);
3) 使用左连接和is null关键字
select a.* from 学生表 a left join 成绩表 b on a.学号 = b.学号 where b.学号 is null;
说明:
第1)种写法逻辑上非常容易理解,但是请注意在碰到大数据表时应避免使用,因为此时它运行效率会很低,数据库可能需要几个钟头甚至更长时间才能返回结果集。
第2)种写法逻辑上不太容易理解,它在[学号]字段有可利用的索引的情况下,运行效率非常高,可列为首选,但是碰到大数据表时,如果没有可被利用的索引其运行效率将会非常的差,此时也必须避免使用它。
第3)种写法利用外连接时系统会对没有相关数据表字段的记录值赋空值(注意空值null不等于0长度字符串"",这里不做展开)这一特性选出两表之间的非交集。注意使连接时,可能会返回大量的重复记录行,如果这种情况发生,我们需要对结果集做去重复处理。
学生表(学号,姓名)
成绩表(学号,科目,分数)
如果一个学生他没有成绩,那么他的学号就不会出现在成绩表里面。我们只要选择出学生表里学号与成绩表里的学号存在非交集的那些记录就可以了。据此我们可以编写并运行以下几种SQL选择查询语句:
1) 使用not in关键字
select * from 学生表 where 学号 not in (select 学号 from 成绩表);
2) 使用非存在not exists关键字
select * from 学生表 where not exists (select 1 from 成绩表 where 学生表.学号=成绩表.学号);
3) 使用左连接和is null关键字
select a.* from 学生表 a left join 成绩表 b on a.学号 = b.学号 where b.学号 is null;
说明:
第1)种写法逻辑上非常容易理解,但是请注意在碰到大数据表时应避免使用,因为此时它运行效率会很低,数据库可能需要几个钟头甚至更长时间才能返回结果集。
第2)种写法逻辑上不太容易理解,它在[学号]字段有可利用的索引的情况下,运行效率非常高,可列为首选,但是碰到大数据表时,如果没有可被利用的索引其运行效率将会非常的差,此时也必须避免使用它。
第3)种写法利用外连接时系统会对没有相关数据表字段的记录值赋空值(注意空值null不等于0长度字符串"",这里不做展开)这一特性选出两表之间的非交集。注意使连接时,可能会返回大量的重复记录行,如果这种情况发生,我们需要对结果集做去重复处理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询