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

来源:互联网 发布:windows消息机制 编辑:程序博客网 时间:2024/05/28 09:33

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

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

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

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

where not exists----不存在    (select *  from scwhere 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 scywhere scy.sno='95002' andnot exists(select *from sc sczwhere scz.sno=scx.snoand 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,Primarykey(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);