SQL应用题的一般考点:
基本表的查询(单表、多表、嵌入、分组、排序)、向表中插入数据、更新数据、建立视图
关系代数替换sql,使用关系代数来进行查询
基本上就这几点
SQL基本表的插入、更新和建立视图都是死板的,只要记住语句就行
而SQL应用题难点也就在于基本表的查询和使用关系代数
这里分数拿到了,基本上这道大题的分就拿到了
下面我就从这两个方面来进行解题
关系代数:
1、出现“全部”字样需要用除运算
2、遇到数值一般是采用自连接
SQL中:
查询的整体结构如下:
查询分为 单表查询、多表查询、嵌套查询
这里我主要分析嵌入查询,以及何时使用GROUP BY,何时使用NOT IN的运算符,何时使用EXITS、NOT EXITS存在量词
我们步骤: ①分析何时使用GROUP BY ②分析何时使用NOT IN的运算符 ③分析何时使用EXITS、NOT EXITS存在量词 ④分析嵌套查询 ⑤做题的整体步骤
涉及到两表之间存在相同属性的查询一般是采用等值连接、非等值连接、嵌套查询
在使用in,not in 操作单表或多表的时候可以使用连接查询和嵌套查询互相转换
但是使用int
什么时候会使用到嵌套查询,一般出现时设及到多个表的查询,一般在where语句中进行某个属性的判别的时候会出现
子查询的操作结果是单个属性的时候,一般运算符就是>、>=、<、<=、!=
子查询的操作结果是集合时,一般运算符就是NOT IN、IN、EXITS、NOT EXITS
出现NOT IN、IN一般就是非相关子查询
出现EXITS、NOT EXITS就是一个相关子查询
- 何时使用GROUP BY
- 表的主键是多个属性组成,查询结果出现一个其中的某些属性(不是全部属性),再根据题目中出现的分组词汇“门门课程”,“每个学生”,“各个”.......,基本上就是使用分组
- 如果查询结果没有出现部分主键中的属性,而题目中却涉及到了分组词汇,那就可能是需要用到分组
- 题目中出现数量词,或者聚集函数词“平均”、“求和”,并且作为条件,并不是查询结果的话,一定是需要使用到分组的
- 何时使用NOT IN的运算符
出现“没有任何”、“不存在”时使用NOT IN 或NOT EXITS
NOT IN 后接的是不相关子查询,需要对子查询进行全表扫描后对父查询再次进行扫描
- 何时使用EXITS、NOT EXITS存在量词
NOT EXITS 后接的是相关子查询,需要用到索引查找
NOT EXITS的查询效率比NOT IN高
出现“存在”,“有”,“获得过”,再进行语义能翻译成存在,就需要用到EXITS
注意EXITS与NOT EXITS的返回值是布尔类型,true和false
EXITS与NOT EXITS后接的子查询都是相关子查询
出现“全部”,SQL中没有全部的语句,只能将它转化成为,没有一个、不存在,双重否定表肯定,
出现存在量词时,一般使用IN 或 EXITS
出现全称量词时,一般使用NOT IN 或NOT EXITS
- 嵌套查询
- 做题的整体步骤
①搭建查询主体结构SELECT.....FROM....WHERE
②读取题目,获取最终要查询的属性或称字段,将这些字段写入select子句
③在根据这几个属性找到涉及的表,一般多表要么是连接查询,要么是子查询
④如果为前者,一般是将这些表写到FROM子句当中,在将连接条件写在WHERE子句当中
⑤到此基本的SELECT的总体框架已经做好,再根据题目来进行增加新的条件
出现条件一般情况下,就在这几个地方:WHERE子句、HAVING子句、嵌套查询
根据语义判断出,需要对某个表中的某个特定的属性涉及到的集合进行讨论的时候,比如查询门门考试都及格的学生学号,根据语义,学生选择的课程有许多,这样在学习表中对于这个学生有多条记录,此时就需要用到组队,又出现门门及格的条件,就需要涉及到HAVING子句,将条件写进HAVING子句当中
注意做等值连接的时候需要写where的,看你好几次没写了,提醒一下!!!
遇到分组与查询表不是一个表时,需要将分组放在子查询中执行
文章来源:https://www.toymoban.com/news/detail-427950.html
文章来源地址https://www.toymoban.com/news/detail-427950.html
到了这里,关于SQL应用题分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!