第三章 低级SQL
1.SQL语言的分类:
(1)数据库定义语言 定义关系模式删除关系以及修改关系模式的命令
(2)数据库操纵语言 增删查改
(3)完整性
(4)视图定义
(5)事务控制
(6)嵌入式SQL和动态SQL
(7) 授权
2.SQL数据定义
(1)数据库中的关系集合必须由数据库定义语言指定给系统。定义每个关系的信息包括
-1. 每个关系的模式
-2. 每个属性的取值类型
-3. 完整性约束
-4. 每个关系维护的索引集合
-5. 每个关系的安全性和权限信息
-6. 每个关系在磁盘上的存储方式
(2)基本数据类型:
*char 存放定长字符串,长度不同会在后面加空格使其长度一致
3.语法小知识点:
(1)select 子句可以含有+ - * /运算符
eg:
(2)在SQL标准中,字符串的相等运算是大小写敏感的,而某些数据库系统如MySQL和 SQL Server 在匹配字符串时并不区分大小写
(3)order by 默认使用升序。DESC表示降序
(4)集合运算
-1. union
eg.
如果想保留重复,需要用union all来代替union
-2. intersect
eg.
如果想保留重复,需要用intersect all来代替intersect
-3.except
eg.
如果想保留重复,用except all来代替except
(10)SQL将涉及空值的任何比较运算的结果视为unknown
当使用select distinct 对应属性值null是相等的。但在谓词中,null=null返回unknown。
4.聚集函数
(1)在计算平均值,保留重复元组是很重要的。
(2)SQL不允许在使用count(*)使用distinct关键字。
(3)group by子句中给出的一个或多个属性是用来区分构造分组的,属性值相同的分在一个组当中。
重点** 任何没有出现在group by 语句中的属性,出现在select语句中,只能出现在聚集函数内部。
eg.
–having子句 在group by分组之后才起作用
eg.
**除了count(*)之外,所有的聚集函数都忽略集合中的空值。
(4)in测试元组是否是集合中的成员 not in 测试元组是否不是集合中的成员
in 也可以用来枚举
(5)短语“至少比一个要大” 在SQL中用>some表示。此外SQL也允许<some,<=some,>=some,>some 和<>some
短语大于所有用>all表示,其余同上
(6)exists结构用在作为参数的子查询非空时返回true
(7)unique 判断是否有重复元组,无true 有false
(8)from子句的子查询使用关键词lateral作为前缀,以便访问from子句在他前面的表或者子查询的属性。
eg.
(9)with 可定义临时关系,这个定义只对包含with子句的查询有效
(10)标量子查询
SQL允许子查询出现在返回单个值表达式能够出现的任何地方。
(11)SQL提供case结构,可以利用它在一条update语句中执行前面的两种更新。