关系数据库概论题目(急啊在线等)

关系数据库概论题目(急啊在线等),第1张

[标准答案]

1、

grant

select

on

职工

when

user()=

name

to

all;

这里假定系统的

grant语句支持when子句和user()的使用。用户将自己的名字作为id。

reovke

select

on

职工

when

user()=

name

from

all;

这里假定用户将自己的名字作为id,且系统的reovke语句支持when子句,系统也支持user()的使用。

2、

create

view

部门工资统计(最高工资,最低工资,平均工资)

as

select

max(工资),min(工资),avg(工资)

from

职工

group

by

部门号;

grant

select

on

部门工资统计

to

扬兰;

revoke

select

on

部门工资统计

from

扬兰;

研究研究吧

有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key)

国家(country)人口(population)

中国600

美国100

加拿大100

英国200

法国300

日本250

德国200

墨西哥50

印度250

根据这个国家人口数据,统计亚洲北美洲的人口数量。应该得到下面这个结果。

洲人口

亚洲1100

北美洲250

其他700

想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。

如果使用Case函数,SQL代码如下:

SELECT SUM(population),

CASE country

WHEN '中国' THEN '亚洲'

WHEN '印度' THEN '亚洲'

WHEN '日本' THEN '亚洲'

WHEN '美国' THEN '北美洲'

WHEN '加拿大' THEN '北美洲'

WHEN '墨西哥' THEN '北美洲'

ELSE '其他' END

FROMTable_A

GROUP BY CASE country

WHEN '中国' THEN '亚洲'

WHEN '印度' THEN '亚洲'

WHEN '日本' THEN '亚洲'

WHEN '美国' THEN '北美洲'

WHEN '加拿大' THEN '北美洲'

WHEN '墨西哥' THEN '北美洲'

ELSE '其他' END

同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数。SQL代码如下;

SELECT

CASE WHEN salary <= 500 THEN '1'

WHEN salary >500 AND salary <= 600 THEN '2'

WHEN salary >600 AND salary <= 800 THEN '3'

WHEN salary >800 AND salary <= 1000 THEN '4'

ELSE NULL END salary_class,

COUNT(*)

FROMTable_A

GROUP BY

CASE WHEN salary <= 500 THEN '1'

WHEN salary >500 AND salary <= 600 THEN '2'

WHEN salary >600 AND salary <= 800 THEN '3'

WHEN salary >800 AND salary <= 1000 THEN '4'

ELSE NULL END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9908048.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存