No1概览:
1、Data-Definition-Language:数据定义语言:定义relation 模式,以及删除、修改
2、Data-Manipulation-language:数据操作语言:查询、修改tuple
3、完整性(integrity)、视图定义、事务控制(transaction control)定义事务的开始和结束
No2关于类型的备注(可以直接猜出的不记录)
numeric(p,d):p位数字,其中d位在小数点右边
real:浮点数,double precision双精度浮点数
No3模式定义
1、creat table命令(我觉得类似stata等软件的命令):创造一个表,显式表达,类似定义函数的过程,类型+变量名,最后还有主码是谁,完整性约束:主码、外码、非空
2、insert:
insert into xxx(插入的table的名字)
values()对应元组的格式
3、delete 删除tuple保留table,drop删除table
4、alter table xxx add/drop A(属性名字) D(属性的域)
No4基本查询结构
1、select xxx from xxx
加distinct去除重复
加逗号分隔开属性,属性可以加减乘除
加where 整出限制条件where的表达式的逻辑运算是and、or、not
加多relation也可以,记得共有属性要加一个xxx.xxx
最后,没法加蛋(
select
from
where
注意顺序
2、自然连接
from xxx natural join xxx
匹配各个属性的值相同的元组
xxx join xxx using (xxxx)利用using里面的属性来做判别的条件
No5附加运算
1、as:select xxx as xxx,from xxx as xxx
2、xxx%,匹配以xxx打头的字符串,%xxx%匹配含有xxx的字符串, _ _ 匹配只含三个字符的字符串, _%匹配至少3个字符的字符串
用where xxx like 'xxxxx’来表达模式
\仍然是转义字符
3、显示次序,order by xxx(desc/asc,默认使用升序)
4、between xxx and xxx可以替换表达范围的句子
5、union、intersect、except:交并差运算(差运算是上减去下)
(select xxxx
)
union
(select xxxx
)
6、unknown
这个运算法则有点神奇,我们如果理解为trueRunknown,unknownRfalse
No6聚集函数
avg 、count、 min等数据处理函数
select avg(xxx)
等格式
在count等时候注意使用distinct来处理,以防止重复计数
增加分组:group by
在group by 后面跟上一句having 可以给分组之后的结果一个限定条件,来进行筛选
(注意属性啥的都要是有的,不然操作会出错)
尽量避免空指,anyway也有some、every俩来处理布尔值的函数
No7嵌套
如;
select distinct coursr_id
from section
where semester = 'Fall' and year=2021 and
course_id not in (select course_id
from section
where semster = 'Spring' and year = 2010);
至少比一个大用:
where xxx>some(select xxx
from xxx
where xxx)
这个算是集合的比较,感觉类似数理逻辑里的东西
另外补充一下,还有all(xxx
xxx
xxx
)
的写法,all和之前的every又区别开了
实际上<>all也是可以的,相当于not in
空关系测试exists(xxx
xxx
xxx
)
这个返回值,顾名思义也是布尔值
另外,之前讨论的子查询中,子查询只能使用该子查询中定义的名称,正如c里面的作用域
unique查询我们的查询结果是否有重复,与前文的类似
返回的是布尔值
思考——select - from - where返回的都是table,所以我们可以把这个插入到from中做到子查询
总结:在xxx的xxx中查询xxx的xxx,表明实际上我们这两个xxx不一定要是最初始的table中查询的,因此我们可以在这个地方也就是where、from中嵌套新的查询,而我们要查询怎样的信息也可以替代在xxx的xxx中查询xxx的xxx,怎样则由一系列条件的限定来决定
临时关系也是需要的,用with,实际上就是把嵌套里面会用到的内容提出来,就是为了简化过程
delete from xxx
where xxx用于选择条件的删除,删除前最好检验一下是否存在
insert into xxx
xxx
向xxx中插入元组
No8更新
update - set- where
update instructer
ser salary=salary*1.05
where salary <70000
if结构,case
when xxx then xxx
when xxx then xxx
else xxx
else应该是必须要的,为了保证不出bug