1.查找 10 号部门员工的所有信息
deptno
(10 emp
)
,
sal
ename
(
2.找出 10 号部门工资大于 3500 的员工的姓名和工资
3. union
dept
emp
deptno
10
3500
sal
(
(
)
(
dname
ename
emp
))
)
集合并是行的堆叠
4. 查询 10 号部门及 20 号部门的员工(两种方式)
10
deptno
emp
(20
deptno
)
5. 找到每个员工的姓名,所在部门的名称以及工作地点(使用自然连接和 theta
连接两种方式)
代表
join
代表外连接?
emp 有 13 行,dept 有 4 行
emp
deptno
deptno
dept
emp
.
.
emp
emp
.
emp
emp
deptno
dept
.
deptno
13 个属性
dept
dept
12 个属性(去掉了一个公共属性)
13 个属性
empXdept 52 个属性
6.找到每个员工的姓名和其领导的姓名
.
emp
ename
ename
.,
t
7.查找平均工资大于 2500 的部门名称
Aggregate 聚集函数
(
)
(
(
(
sal
))
avg
asal
G
asasal
dname
deptno
emp
2500
select deptno,avg(sal) sal
from emp
group by deptno
having avg(sal)>2500
二者等效,但前者效率高
连接操作是数据库中消耗最高的操作,所以要尽量缩减关系
emp
deptno
dname
asasal
G
2500
asal
avg
sal
(
(
(
)
(
dept
)
dept
)))
8. 查找在平均工资大于 2500 的部门工作的员工
(子查询实现的过滤目的变成用连接来实现相同的目的)
select
where deptno in ()
_ 右外连接
_
9.查询提供了平均工资高于 2500 的所有职位的部门
select
from
where not exist
()
except
()
jobG
emp
)
(
)
(
deptno
,
job
job
10. 查询所有部门的职工人数,平均工资,即使一个部门没有任何员工,也要在
结果中包含该部门的记录元组
dept
G
)
(
deptno
Gcount
,
deptno
avgsal
)
emp
(
select
*
emp
_
_
fromemp
(
没有分组属性
)
11. 删除在芝加哥工作的员工
(把一个不包含芝加哥员工的替换到原来的表)
))
emp
dept
emp
emp
zhijiage
(
(
12. 将 10 号部门的员工工资变为原来的 1.5 倍
emp
emp
(
))
(
...,
sal
,...5.1*
deptno
10
(
deptno
10
(
emp
))
...,
sal
,...
13. 不使用聚集计算的运算符,使用关系代数表达式,如何得到最低的工资?