mysql 数据库重要例题(存在量词exists),必考

这里举两个例子,这两个例子适合考试的时候学霸和其他人拉开差距的题目,在这里和大家分享一下。(表的内容见附录,这里是操作语句和解释)

查询这样的学生,没有一门课是他不选的。 
select sname
from student
where not exists -----不存在 
(select *
from course----有这样一条记录(有这样一门课)
---这个学生没有选这门课(不存在这样一门课,这个学生选了的) 
where not exists----不存在   
 (select *
  from sc
where sno= student.sno---这个学生 
 and cno= course.cno---这门课 
  )
     );

这里的关键词(where,select,exists)大小写无所谓。这个语句很多同学都不是很理解。再从我的角度给大家分析一下

第一步   从student 表中选择出一个学生,依次对这个学生选择的课程进行遍历,如何课程都选择了,就输出学生姓名。语句是

where not exists----不存在   
 (select *
  from sc
where sno= student.sno---这个学生 
 and cno= course.cno---这门课 
  )
   );
第二步   对学生进行遍历,重复步骤一的操作,输出学生姓名  

效果图如下


例题二:查询至少选修了学生95002选修的全部课程的学生号码。

select distinct sno  从scx中选择学生号码
from sc scx  scx这里其实就是sc这张表,相当于一张子表,内容和sc一样,下面的scy也是这样
where not exists  不存在
(select*
from sc scy
where scy.sno='95002' and
not exists
(select *
from sc scz
where scz.sno=scx.sno
and scz,cno=scy.cno)     满足学号是95002并且和他选择的课程一样
);

结果可以见上图




CREATE TABLE Student
(Sno      varCHAR(5)  NOT NULL  UNIQUE,
Sname  varCHAR(20)  UNIQUE,          
Ssex      varCHAR(1) ,
Sage      INT,
Sdept    varCHAR(15)); 

create Table Course(Cno varCHAR(3)
not null UNIQUE,Cname varCHAR(60)
not null UNIQUE,Cpno varCHAR(3),
Ccredit integer not null,Primary
key(Cno));

create table SC(
Sno varCHAR(5),
Cno varCHAR(3),
Grade int,
Primary key(Sno,Cno));

1)向其中插入数据(保证里面有数据)

 insert into student values
     
     ('95001', '张三', 20, 'CS','男'),
     ('95002', '李四', 21, 'IS', '男'),
     ('95003','王五', 18, 'MA ','男'),
     ('95004', '马六', 19, 'CS', '女'),
     ('95005', '苏三', 19, 'IS', '女'),
     ('95006', '刘七', 18, 'CM', '女'),
     ('95007', '刘三姐', 22, 'PS', '女'),
     ('95008', '欧阳锋', 23, 'CS', '男'),
     ('95009', '欧阳大侠', 22, 'IS', '男');


 insert into course
    values
     ('1', 'MATH', null, 6),
     ('2','DB_DESIGN', '3', 2),
     ('3', 'P_DESIGN', '3', 3),
     ('4', 'OS', null, 2);


 insert into sc
     values
     ('95001', '1', 92),
     ('95001', '2', 94),
     ('95001', '3', 90),
     ('95001', '4', 97),
     ('95002', '2', 90),
     ('95002', '3', 80),
     ('95003', '2', null),
     ('95004', '3', null),
     ('95005', '1', 90),
     ('95005', '2', 98),
     ('95005', '3', 90),
     ('95005', '4', 89);





  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值