数据库原理习题课

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Πperson-name (employee) − Πperson-name (σcompany-name = “First Bank Corporation”(works))
Copyright: Xinying Wang
8. 修改数据库,使Jones现在居住在NewTown
←employee -person-name=“Jones”(employee) employee ←employee∪{(“Jones”, null, “Newtown”)}
Copyright: Xinying Wang
7.找出数据库中不在First Bank Corporation工作的所 有员工的姓名 每个人只能在一个公司工作(不允许兼职)
Πperson-name (company-name≠“First Bank (works))
Corporation”
每个人可以在不只一个公司工作(允许兼职)
Copyright: Xinying Wang

找出所有为First Bank Corporation工作的员工 的名字
select employee-name from works where company-name=‟First Bank Corporation‟

找出各个公司员工的平均工资,并按照公司名 称排序(逆序)
select SNO,avg(SCORE) from SC where SCORE >=60 group by SNO
Copyright: Xinying Wang

聚集函数
平均值:avg 最小值:min 最大值:max 总和:sum 记数:count
Copyright: Xinying Wang

语法成分
比较运算符
、 、、、=、 and,or,not 判断表达式的值是否在某范围内
逻辑运算符

between条件
Copyright: Xinying Wang

格式 old_name as new_name 为关系和属性重新命名,可出现在select和 from子句中

∏A
1
, A2 , … , An
(p(r1 r2 … rm))
Copyright: Xinying Wang

需注意的问题
目标列形式
通配符*、算数表达式、聚集函数 语法约束 all:保留重复元组 distinct或unique:去掉重复元组
Copyright: Xinying Wang
Copyright: Xinying Wang
1、数据定义 2、集合运算 3、聚集函数 4、空值 5、嵌套子查询 6、复杂查询 7、视图 8、数据库修改 9、完整性约束
Copyright: Xinying Wang
create table 表名(
列名 数据类型 [default 缺省值] [not null] [,列名 数据类型 [default 缺省值] [not null]] …… [,primary key(列名 [,列名] …)] [,foreign key (列名 [,列名] …) references 表名 (列名 [,列名] …)] [,check(条件)])
group by将表中的元组按指定列上值相等的原则分 组,然后在每一分组上使用聚集函数,得到单一 值 having则对分组进行选择,只将聚集函数作用到满 足条件的分组上
Copyright: Xinying Wang
select SNO,avg(SCORE) from SC group by SNO having avg(SCORE) >= 60
Copyright: Xinying Wang
create [unique/distinct] [cluster] index
索引名 on 表名
(列名 [asc/desc] [ , 列名asc/desc]]…)
Copyright: Xinying Wang
select
A1 , A2 , … , An from r1 , r2 , … , rm where P
吉林大学软件学院
主讲:王新颖 E-mail:xinying@jlu.edu.cn
Copyright: Xinying Wang
1、基本的关系代数运算 2、附加的关系代数运算 3、扩展的关系代数运算 4、数据库修改
Copyright: Xinying Wang
employee(person-name,street,city) works(person-name,company-name,salary) company(company-name,city) manages(person-name,manager-name)
Copyright: Xinying Wang

元组显示顺序 order by 列名 [asc | desc] 集合操作


集合并:union
集合交:intersect 集合差:except
Copyright: Xinying Wang

in 子查询
表达式 [not] in (子查询)

Copyright: Xinying Wang
5.
找出与其经理居住在同一城市同一街道的所有员 工的姓名
Πperson-name (
manager-name=employee2.person-name

∧manages.person-name=employee.person-name ∧ employee.street = employee2.street ∧ employee.city = employee2.city

找出所有居住地与工作的公司在同一城市的员工姓名
select a.employee-name from works a, employee b, company c where a.company_name= c.company_name and a.employee-name=b.employee-name and b.city=c.city
some/all子查询
表达式
比较运算符 some (子查询)
表达式的值至少与子查询结果中的一个值相比满足比较 运算符
表达式
比较运算符 all (子查询)
表达式的值与子查询结果中的所有的值相比都满足比较 运算符
Copyright: Xinying Wang

测试集合是否为空 表达式 [not] exists (子查询) 判断子查询的结果集合中是否有任何元组存在 测试集合是否存在重复元组 表达式 unique (子查询) 如果子查询结果中没有重复元组,则返回true
Select company-name, avg (salary) From works Group by company-name Order by company-name desc

找出First Bank Corporation的所有年收入在10,000美 元以上的员工的姓名和居住的街道、城市

Copyright: Xinying Wang

插入 insert into 表名 [(列名[,列名]…)] values (值 [,值]…) insert into 表名 [(列名[,列名]…)] (子查询)


删除
delete from 表名 [where 条件表达式]


修改
update 表名 set 列名 = 表达式 | 子查询 列名 = [,表达式 | 子查询]… [where 条件表达式]
employee
9. 为工资不高于100,000的经理提高工资10%,高于 100,000的提高工资3%
t1
←Π person-name, company-name, salary (person-name= manager-name(employee×works)) t2 ←Π person-name, company-name, salary *1.1 (salary ≤ 100000 (t1)) t3 ←Π person-name, company-name, salary*1.03 ( salary > 100000 (t1))
Copyright: Xinying Wang
1. 2.
3.


找出First Bank Corporation的所有员工的姓名 Πperson-name (company-name=“First Bank Corporation” (works)) 找出First Bank Corporation的所有员工的姓名和居住城市 Πperson-name, city (company-name=“First Bank Corporation” (employee works)) 找出First Bank Corporation的所有年收入在10,000美元一时 的员工的姓名和居住的街道、城市 Πperson-name, street,city (salary>10000 (company-name=“First Bank works))) Corporation” (employee 找出所有居住地与工作的公司在同一城市的员工姓名 Πperson-name (employee works company)
works
← (works - t1) ∪ t2 ∪ t3
Copyright: Xinying Wang
10. 删除works关系中Small Bank Corporation的 员工的所有元组 t1 ←Π person-name, company-name, salary ( company-name=“Small Bank Corporation” (works))
Copyright: Xinying Wang
create view 视图名称 as select 查询
Copyright: Xinying Wang

employee(employee-name, street, city) works(employee-name, company-name, salary) company(company-name, city)

空值测试

表达式 is [not] null
除is [not] null之外,空值不满足任何查找条件
如果null参与算术运算,则该算术表达式的值为null 如果null参与比较运算,则结果可视为false如果null参与 聚集运算,则除count(*)之外其它聚集函数都忽略null

注意事项


works
Baidu Nhomakorabea
← (works - t1)
11.找出员工最多的公司 r1 ← company-namegcount (person-name) as person-number (works) r2 ← gmax(person-number) (r1) Πcompany-name ( person-number=r2 (r1))
(employee ×(manages× (ρemployee2 (employee)))))
6. 找出比Small Bank Corporation所有员工收入都高 的所有的员工的姓名

Πperson-name (works) − (Πworks.person-name (works.salary ≤ works2.salary ∧ works2.company-name=“Small Bank Corporation” (works ×(ρworks2(works))))
Copyright: Xinying Wang
select a.employee-name, street, city from works as a, employee as b where company-name=„First Bank Corporation‟ and a.employee-name=b.employee-name and salary>10000
注:as可选
Copyright: Xinying Wang

命令格式
格式
列名 [not] like „字符串‟

匹配规则
“%”
匹配零个或多个字符 “_”匹配任意单个字符 转义字符 escape
Copyright: Xinying Wang

分组命令 group by 列名 [having 条件表达式]
相关文档
最新文档