SQL概述:SQL是通用的,结构化查询语言,是关系数据库的标准语言
SQL特点:综合统一;高度非过程化;面向集合的操作方式;同一语法结构多种使用方式;简洁易学
删除语句后缀:
CASCADE:将数据库及其包含内容全部删除
RESTRICT:若数据库中含有下属对象(表,视图等),则删除命令不执行
表的增删改
修改基本表
索引的建立与删除
删除索引
数据字典:存有数据库中的全部定义信息。SQL数据定义语句的执行实际上就是更新数据字典中的相应信息
查询: distinct:消除重复 默认:all
举例数据库
Where:查询符合条件的元组
例
涉及空值的查询:is null 不能用 =null代替
通配符:%:任意长度的字符串
_:单个字符
查询结果排序 ASC(升序,默认) DESC(降序)
使用集函数
例:
Group by 分组:细化集函数的作用对象
- 未对查询结果分组,集函数将作用于整个查询结果
- 对查询结果分组后,集函数将分别作用于每个组
本例中,group by 将sno以cno为分组标准,分为了五组,分别count
Having + 条件:作用于组(having前必然有group by),对得到的结果在此筛选后输出
连接查询:同时涉及多个表的查询
等值连接
引用表1和表2中同名属性时,都必须加表名前缀。引用唯一属性名时可以加也可以省略表名前缀。
自然连接:把目标列中重复的属性列去掉
非等值连接:……
自身连接:一个表与自己进行连接
- 需要给表起别名以示区别
- 由于所有属性名都是同名属性,因此必须使用别名前缀
外连接:普通连接操作只输出满足连接条件的元组;外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
左外连接:列出左边关系(如本例Student)中所有的元组
右外连接: 列出右边关系中所有的元组
复合条件链接:where中包含and,or……
多表连接:
嵌套查询:将一个查询块放在另一个查询块中
子查询限制不能用order by字句
带有any或all的子查询, 使用集函数代替any/all可以提高效率
EXIST用法
查询所有选修了1号课程的学生姓名
数据更新:进行更新时,DBMS会检查操作是否破坏表上完整性规则
插入数据
插入单个元组: 插入子查询结果:
修改数据
删除数据:
视图:虚表,只存放视图的定义,不会出现数据冗余。基表数据变化,视图的数据也会变化
视图亦可根据视图创建
With check option:限定视图的更新操作满足子查询中的条件表达式,例中为:sdept=’IS’
建立视图时,尽量不要用select * 因为可拓展性差,易受基表变化影响
删除视图
视图查询:同表的查询
视图更新:类似表的更新,但有的视图不能更新
不能更新的情况:
视图由两个以上基本表导出;视图定义有group by、distinct;视图字段来自集函数……
视图的作用:简化用户操作;更清晰的表达查询;使用户以多种角度看同一数据;对重构数据库提供了一定程度的逻辑独立性;对机密数据提供安全保护