本文共 2337 字,大约阅读时间需要 7 分钟。
SQL有以下七部分:
数据中的关系集合必须由数据定义语言(DDL)指定给系统。SQL的DDL不仅能够定义一组关系,还能定义每个关系(关系即表)的信息,包括:
如果想要从SQL数据库中去掉一个关系,我们可以使用命令drop table,drop table命令从数据库中删除关于被去掉关系的所有信息,相比较delete from r,后者保留关系r,但删除r中的所有元组,前者不仅删除r的所有元组,还删除r的模式
自然连接运算作用于两个关系,并产生一个关系作为结果。不同于两个关系上的笛卡儿乘积,它将第一个关系的每个元组域第二关系的所有元组都进行连接;自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元组对
观察下面的语句:->select name,cource_id->from instructor,teachers->where instructor.ID=teachers.ID;
->select name,cource_id->from instructor natural join teaches;
以上两个查询产生相同的结果
自然连接运算的结果是关系。从概念上来将,from子句中的“instructor natural join teachers”表达式可以替换成该自然连接后所得到的关系。
自然连接需要输入的元组既要在属性上取值相同,还要在相同属性的取值相同
SQL使用一对单引号来标示字符串,如果单引号是字符串的组成部分,那就用两个单引号字符串来表示
在字符串中可以使用like操作符来实现模式的匹配:
在模式匹配中是大小写敏感的,也就是说大写字符和小写字符不匹配
SQL作用在关系上的union,intersect和except运算对应于数学集合论中的U,∩,—运算,即:
聚集函数是以值的一个集合为输入,返回单个值的函数。SQL提供了五个固有聚集函数:
sum和avg的输入必须是数字集,但其他运算(max,min,count)还可以作用在非数字数据类型的集合上
有时候我们不仅希望聚集函数作用在单个元组集上,而且也希望将其作用到一组元组集上;在SQL中可用group by子句来实现这个愿望。在group by子句中的所有属性上取值都相同的元组将被分到一个组
当使用SQL查询使用分组时,一个很重要的事情就是保证出现在select语句中但没有被聚集的属性只能是出现在group by子句中的那些属性,换句话说,任何没有出现在group by子句中的属性如果出现在select子句中的话,它只能出现在聚集函数内部,否则这样的查询就是错误的。因为一个分组就是一组在属性取值上都相同的集合,每个分组只输出一个元组(即输出属性取值相同的元组)
有时候,对分组限定条件比对元组限定条件更有用。为表达这样的查询,我们使用SQL的having子句。having子句中的谓词在形成分组后才起作用
与select子句的情况类似,任何出现在having子句中,但没有被聚集的属性必须出现在group by子句中
对于select和having,出现的属性要么是group by中的属性,要么就是在聚集函数中的属性
包含聚集,group by或having子句的查询的含义可通过下述操作序列来定义:
转载地址:http://dljmb.baihongyu.com/