数据库读书笔记.docx
《数据库读书笔记.docx》由会员分享,可在线阅读,更多相关《数据库读书笔记.docx(11页珍藏版)》请在冰点文库上搜索。
数据库读书笔记
1.基本类型:
a)Char(n):
固定长度,指定长度n;
b)Varchar(n):
可变长度,指定最大长度n;
c)Int:
整数类型;
d)Smallint:
小整数类型;
e)Numeric(p,d):
定点数,p是位数(加上一个符号位),d是精度,小数点右边的位数;
f)Real,double,precision:
浮点数与双精度浮点数;
g)Float(n):
精度至少为n位的浮点数。
2.创建关系:
createtable
a)createtabledepartment
(dept_namevarchar(20),
Buildingvarchar(15),
Budgetnumeric(12,2),
Primarykey(dept_name));
3.primarykey(a1,a2,…….an):
primarykey声明表示属性a1,a2,….an构成关系的主码。
主码属性必须非空且唯一。
4.foreignkey(b1,b2,…….bn)referencestable1:
foreignkey声明表示关系中任意元组在属性(b1,b2,……bn)上的取值必须对应于(在…之中)关系table1中某元组在主码属性上的取。
5.数据加载:
insert
insertintotable1
values(a1,a2,….an);
6.删除元组:
delete
deletefromtable1删除student中符合谓词p1的
wherep1元组
7.更新:
update
updateinstructor
setsalary=salary*1.05
wheresalary<70000
(updateinstructor
setsalary=case
whensalary<=thensalary*1.05
elsesalary*1.03
end)
8.case语句的一般格式:
case
whenp1thenr1
whenp2thenr2
…..
whenpnthenrn
elser0
end
9.删除关系:
droptable
droptabletable1;删除table1的元组和模式
10.为已有关系增减属性:
altertable
加:
altertableraddAD;
其中r是现有关系的名字,A是待添加属性的名字,D是待添加属性的域。
关系中的所有元组在新属性上的取值将被设为null。
减:
altertablerdropAD;
11.强行删除重复:
distinct
Selectdistinctdept_name
Frominstructor
12.基本查询语句:
selecta1,a2,……an
fromtable1,table2,……tablen
wherep;
a为属性,table为关系,p为table间的谓词。
通过from子句定义了一个在该子句中所列出关系上的笛卡尔积
where子句中的谓词用来限制笛卡尔积所建立的组合。
允许使用逻辑连词and,or,not,逻辑连词的运算对象是包含比较运算符<,<=,>=,>,=,<>的表达式。
可以用比较运算符来比较字符串、算术表达式、特殊类型,如日期类型
输出select指定的属性
13.自然连接:
naturaljoin
Selectname,course_id
Frominstructornaturaljointeaches;
只考虑那些在两个关系模式中都出现的属性上取值相同的元组对,这样的属性只出现一次。
列出顺序为:
先是两个关系模式中的共同属性,然后是那些只出现在第一个关系模式中的属性,最后是那些只出现在第二个关系模式中的属性。
14.指定属性的自然连接:
table1jointable2using(a1,a2)
在有的情况,两个关系之间有两个以上的相同属性名称,但是意义不同,如course.id和student.id。
selectname,title
from(instructornaturejointeaches)joincourseusing(course_id)
15.selecta1,a2相同的属性列会出现两次
fromtable1jointable2onp1
16.更名运算:
as
as子句既可以出现在select子句中,又可以出现在from子句中。
主要用于:
把一个长的关系名替换成短的使用于需要比较同一个关系中的元组情况,自己跟自己进行笛卡尔积运算。
selectdistinctT.name
frominstructorasT,instructorasS
whereT.salary>S.salaryandS.dept_name=’biology’;
17.字符串运算:
●用单引号来标示字符串,例如‘computer’。
如果单引号是字符串的组成部分,那就用两个单引号字符来表示,如“it’’sright”
●SQL标准中字符串大小写敏感。
但是Mysql和SQLSever中不一定,可以设置。
●用like操作符实现模式匹配,大小写敏感。
使用两个特殊字符来描述模式:
百分号(%):
匹配任意子串
下划线(_):
匹配任意一个字符
●为使模式中能够包含特殊字符(%,_),使用escape关键字来定义转移字符
like‘ab\%cd%’escape‘\’匹配所有的以“ab%cd”开头的字符串
18.select子句中表示“所有的属性”:
星号“*”
select*
frominstructor
19.排列元组的显示顺序:
orderby
默认使用升序。
可以显示使用desc表示降序,asc表示升序,排序可在多个属性上进行。
select*
frominstructor
where
orderbysalarydesc,nameasc
20.where子句谓词
●wheresalarybetween9000and10000
等于wheresalary<=10000and>=9000
●还可以使用notbetween比较运算符
●允许用(v1,v2,….,vn)来表示n元组,在元组上可以运用比较运算符,按字典顺序进行比较运算。
如:
selectname,course_id
frominstructor,teaches
whereinstructor.id=teaches.id
anddept_id=’biology’;
等同于
selectname,course_id
frominstructor,teaches
where(instructor.id,dept_name)=(teaches.id,’biology’);
21.集合运算:
并union,交intersect,差except
union
●自动去除重复
●如果想保留所有重复,必须用unionall
(selectcourse_id
fromsection
wheresemester=’fall’andyear=2009)
unionall
(selectcourse_id
fromsection
wheresemester=’spring’andyear=2010)
intersect
●自动去除重复
●如果想保留所有重复,必须用intersectall,在结果中出现的重复元组数等于两个关系中重复次数最少的那个。
(selectcourse_id
fromsection
wheresemester=’fall’andyear=2009)
intersectall
(selectcourse_id
fromsection
wheresemester=’spring’andyear=2010)
except
●此运算在执行集差操作之前自动去除重复。
●如果想保留所有重复,必须用exceptall,在结果中出现的重复元组数等于table1中出现的重复元组数减去table2中重复出现的元组数(前提是此差为正)
(selectcourse_id
fromsection
wheresemester=’fall’andyear=2009)
exceptall
(selectcourse_id
fromsection
wheresemester=’spring’andyear=2010)
22.空值null
selectname
frominstructor
wheresalaryisnull
●如果算术表达式的任一输入为空,则该算术表达式(涉及+,-,*,/)结果为空。
例如,某个特定的元组table.a为空,则表达式table.a+5结果也为空。
●任意涉及null的比较运算的结果视为unknown。
unknown是true和false以外的第三个逻辑值。
●where子句的谓词对一个元组计算出false或unknown,那么该元组不能被加到结果集中。
●值非空:
isnotnull
●如果元组在所有属性上的取值相等,那么它们就被当作相同元组,即使某些值为空。
(’a’,null)和(’a’,null)被认为是同一元组。
23.五个聚集函数:
●平均值:
avg
●最小值:
min
●最大值:
max
●总和:
sum
●计数:
count
sum和avg的输入必须是数字,其他的可作用在非数字数据上,如字符串。
24.分组聚集:
groupby
●在groupby子句中的所有属性上取值相同的元组将被分在一个组中
●任何出现在select子句中的属性都必须出现在groupby中
selectavg(salary)asavg_salary
frominstructor
groupbydept_name
25.having子句:
相当于分组后的谓词where,对分组限定条件
26.where子句中的嵌套子查询
集合成员资格:
in,notin
selectCOUNT(distincttakes.ID)astotal_num
fromtakes
wherecourse_idin
(selectcourse_id
fromteaches
whereteaches.ID=10101)
集合的比较:
some,all(<,<=,>=,>,<>)
至少比某一个大:
>some
selectname
frominstructor
wheresalary>some(selectsalaryfrominstructorwheredept_name='拳脚学院')
比所有的都大:
>all
selectname
frominstructor
wheresalary>=all(selectsalaryfrominstructorwheredept_name='邪门学院')//找出最大的
空关系测试:
exists,notexists。
测试一个子查询的结果中是否存在元组。
exists结构在作为参数的子查询非空时返回true值。
可以将“关系A包含关系B”写成“notexists(BexceptA)”,若返回true,说明A包含B
selects.ID,s.name
fromstudentass
wherenotexists((selectcourse_idfromcoursewheredept_name='兵器学院')except(selectt.course_idfromtakesastwheres.ID=t.ID))
重复元组存在性测试:
“最多一次”用unique。
找出所有在2009年最多开设一次的课程
selectT.course_id
fromcourseasT
whereunique(selectR.course_idfromsectionasRwhereR.course_id=T.course_idandr.year=2009)
“至少两次”用notunique
找出所有在2009年至少开设两次的课程
selectT.course_id
fromcourseasT
wherenotunique(selectR.course_idfromsectionasRwhereR.course_id=T.course_idandr.year=2009)
27.使用了来自外层查询相关名称的子查询被称做相关子查询
28.from子句中的子查询,我们可以用as子句给from子查询结果关系起个名字,并对属性进行重命名。
selectdept_name,avg_salary
from(selectdept_name,AVG(salary)frominstructorgroupbydept_name)asdept_avg(dept_name,avg_salary)
whereavg_salary>42000
29.定义临时关系:
with,好处在于逻辑上更加清晰。
找出最大预算值的系
withmax_budget(value)as(selectMAX(budget)fromdepartment)
selectbudget
fromdepartment,max_budget
wheredepartment.budget=max_budget.value
30.标量子查询:
允许子查询出现在返回单个值的表达式能够出现的任何地方,只要该子查询只返回包含单个属性的单个元组。
结果类型任然是关系,尽管只包含单个元组,但是出现的位置是单个值出现的地方。
找出所有系以及他们拥有的教师数
selectdept_name,(selectCOUNT(*)frominstructorwheredepartment.dept_name=instructor.dept_name)asnum_instructor
fromdepartment
31.外连接:
假设要选出所有学生的信息和选课情况,可以用自然连接,但是如果某个同学一门课都没选,所以他有学生信息,但是没有选课信息。
最后在自然连接就没有这个学生的元组。
外连接可以保留现有的信息,没有的信息设为null
●左外连接(naturalleftouterjoin)只保留出现在左外连接运算之前(左边)的关系中的元组
●右外连接(naturalrightouterjoin)只保留出现在右外连接运算之后(右边)的关系中的元组
●全外连接(naturalfullouterjoin)保留出现在两个关系中的元组
32.超码:
是一个或多个属性的集合,这些属性的组合可以使我们在一个关系中唯一地标识一个元组。
33.候选码:
任意真子集都不能成为超码的最小超码
34.主码:
被数据库设计者选中的、主要用来在一个关系中区分不同元组的候选码。
35.外码:
一个关系模式r1可能在它的属性中包括另一个关系模式r2的主码。
这个属性在r1上称作参照r2的外码。
36.参照完整性约束:
参照完整性约束要求在参照关系r1中任意元组在特定属性上的取值必然等于被参照关系r2中某个元组在特定属性上的取值。
37.关系代数
基本运算:
选择δ、投影π、并∪、集合差—、笛卡尔积×、更名ρ。
附加运算:
集合交∩、自然连接
、赋值←、左外连接
、右外连接
、全外连接
扩展运算:
38.我们允许在选着谓词中进行比较,使用的是=、≠、<、≤、>、≥。
另外还可以用and(∧),or(∨),not(﹁)将多个谓词合并为一个较大的谓词。