1.什么是单个数据点?
数据点就是数据表中的每一个空格内的数据,都可以简称为数据点。
例如: select Name from TA where Id=1
2.什么是一列数据?
一列数据就是一个列名下的一列数据;
例如:select Id from TA where Type=‘酒类’//type在数据库里可以理解为列名
3.where子查询
#例题:查询出学生”张耀仁”的同班同学
通过子查询,子查询查询到张耀仁的班级编号,在通过这个班级编号来从父查询进行查询
select studentname from studentinfo where classid=(select classid from studentinfo where studentname=‘张耀仁’);
4.inner join on 和子查询的区别
例题:考试刚好等于55分的学生名单学习课程是java
第一种方法 自连接 通过inner join 来对三个表进行连接,通过外键来进行交接,然后进行条件判断来输入即可
select * from studentinfo s inner join exam e on s.studentid=e.studentid inner join subjectinfo sub on e.subjectid=sub.subjectid where e.exam=55 and sub.subjectname=‘java’;
第二种方法 子查询 首先获取到父查询里的studentid 从exam表中获取,那么子查询里面就首先要查询exam表中的studentid我们才能知道考55分的学生名单,接着在exam表中可以看到还连接着课程表 那么我们直接在里面继续嵌套子查询来获取subjectid 最后通过子查询获取到成绩55分,并且学习的课程是java了我们在通过父查询进行汇总;
#切记 子查询跟比较运算符使用的时候 最好要确保数据只有一条,如果大于一条了 会提示子查询返回多行
select studentname from studentinfo where studentid=(select studentid from exam where exam=55 and subjectid=(select subjectid from subjectinfo where subjectname=‘java’));
特别注意:子查询内如果有运算比较符的话 那么要确保他要查询的内容只是一条如果子查询返回多条数据的话 就会报错。
5.in 和 not in;
例题:考试刚好等于55分的学生名单学习课程是java 通过in来演示
如果说我们的考试成绩里面有很多人了 这时候如果使用= < > 这些比较运算符来进行子查询的话 会报错,那么我们通过in就可以来避免这些错误,使用in就可以输出多行数据了;
select studentname from studentinfo where studentid in(select studentid from exam where exam=55 and subjectid in(select subjectid from subjectinfo where subjectname=‘java’));
not in 和in想要的效果相反.
6.EXISTS
例题:查询成绩表中科目编号为2的考试成绩中是否存在不及格的学生,如果存在不及格的学生就将参加科目编号2考试的学生编号和成绩全部查询显示出来。
通过 exists来进行判断 判断里面代码是否返回行,如果有一条返回行了那么则为true 然后此时父查询开始进行查询
select * from exam where subjectid=2 and exists(select studentid from exam where exam=<60)
not exists 跟exists效果相反
7.ALL、ANY/SOME的子查询
ALL用在子查询前,通过比较运算符将一个表达式的值或列值与子查询返回的一列值中的每一行进行比较,只要有一次比较的结果为 FALSE,则 ALL测试返回FALSE。ALL要求子查询必须返回而且只能返回一个字段。
语法:表达式或字段 比较运算符 ALL(子查询);
简单来说 all是干嘛的,>ALL 表示大于每一个值。换句话说,它表示大于最大值。例如,>ALL (1, 2, 3) 表示大于 3。
ANY与子查询在一起使用时,按照比较运算符、表达式或字段对子查询的结果的每一行进行一次计算和比较。只要有一次满足条件,那么ANY的结果就是真。当子查询每行的结果与ANY前面的表达式或字段比较结果全为假时,则结果为假。
语法:表达式或字段 比较运算符 ANY/SOME(子查询)