sql语句关系代数练习

sql语句关系代数练习

对于表结构:

product(maker,model,type)

maker:表示生产厂商

model:生产的产品型号

type:产品类型,有pc laptop printer三种

pc(model,speed,ram,hd,price)

表示型号,速度,内存大小,硬盘大小,价格

laptop(model,speed,ram,hd,screen,price)

表示型号,速度,内存大小,硬盘大小,屏幕大小和价格

printer(model,color,type,price)

model:打印机型号;

color:是否彩色, T 彩色,F 黑白

type:类型,ink-jet 表示喷墨, laser 表示激光;

price:单价

这是一套难度大得不溜秋的题嘤嘤嘤,本人水平有限,对语句的理解还不够深,语句不一定都是最优解,有的题目有多种解,如有疑问错误欢迎指出~

查询生产pc也生产laptop的厂商

select product.maker
from product 
join laptop
on product.model = laptop.model
intersect
select product.maker
from product 
join pc
on product.model = pc.model

查询生产型号为2001的厂商信息及该型号所属产品的种类

select maker,type from product where model='2001'

查询厂商A 生产的PC中price大于900的产品型号

select product.model
from product
inner join pc
on product.model=pc.model
where pc.price>900 and product.maker='A'

查询厂商B生产的所有产品的型号和价格

select product.maker,printer.price
from product
inner join printer
on product.model = printer.model
where printer.type = 'ink-jet'

分类统计厂商(maker)A生产的各种产品的数量

select type,count(model) from product where maker='A' group by type

查询所有彩色激光打印机的生产商及型号

select a.maker,a.model
from product a
inner join printer b
on a.model = b.model
where b.color = 'T' and b.type = 'laser'

找出生产产品型号最多的厂商

select top 1 maker from product group by maker order by count(*) desc

查询出哪个生产厂商的笔记本电脑的硬盘容量至少100G

select a.maker
from product a
inner join laptop b
on a.model = b.model
group by a.maker
having min(b.hd)>=100

找出那些既出售笔记本电脑又出售PC的厂商

select product.maker
from product
inner join pc
on product.model = pc.model
group by product.maker
intersect
select product.maker
from product
inner join laptop
on product.model = laptop.model

查询具有同样处理速度和同样内存大小的PC对

显示满足条件的pc对的型号,同样的pc对只出现1次,如001 与 002 符合条件, 则仅出现001 002,不出现002 001

select a.model,b.model
from pc a,pc b
where a.speed=b.speed and a.ram=b.ram and a.model<>b.model and a.model<b.model

查询至少生产三种不同处理速度电脑(含pc和laptop)的厂商

select maker from
(
	select maker, product.model, speed from 
	product join pc on product.model = pc.model 
	union
	select maker, product.model, speed from 
	product join laptop on product.model = laptop.model
) as a
group by maker
having count(distinct speed) >= 3;

统计出pc,laptop,printer三种产品的不同型号数量,并按数量从大到小排序

select type, count(model) as c from
(
	select type, product.model as model from 
	product join pc on product.model = pc.model 
	union
	select type, product.model as model
	from product join laptop on product.model = laptop.model
	union 
	select product.type, product.model as model
	from product join printer on product.model = printer.model
) as a
group by type
order by c desc;

有客户有1500元钱,买laptop或pc,要求硬盘容量不小于80,请给出可能的产品型号,生产厂商

select product.maker,product.model from product
inner join laptop on product.model = laptop.model where laptop.hd >=80 and laptop.price <=1500
union
select product.maker,product.model from product
inner join pc on product.model = pc.model where pc.hd >=80 and pc.price <=1500

找出至少生产5种不同型号产品的厂商

select maker from product
group by maker
having count(*)>=5

完成功能使得:厂商A的产品升级,所有pc速度提高100,硬盘容量增加50,价格上调300

Update pc SET pc.speed = pc.speed +100,pc.hd=pc.hd+50,pc.price=pc.price+300
FROM product INNER JOIN pc ON product.model=pc.model
where product.maker='A'

完成功能:厂商E新增一种pc产品,型号1090,速度200,内存128,硬盘160,价格800

insert into pc values ("1090",200,128,160,800);

insert into product values ("E","1090","pc");

完成功能:厂商C生产的laptop,型号2013停产,需要从相关关系种去除

delete a
from product a
inner join laptop b
on a.model = b.model
where a.maker='C' and a.model = '2013'

完成功能:厂商A生产的产品1001型号变更为1091,其余信息不变

Update b SET b.model = '1091'
FROM product a INNER JOIN pc b
ON a.model=b.model
where a.maker='A' and b.model = '1001';

Update a SET a.model = '1091'
FROM product a 
where a.model = '1001';

厂商H破产,所有其生产的产品需移除

delete b from product a inner join pc b
on a.model = b.model
where a.maker = 'H';
delete b from product a inner join laptop b
on a.model = b.model
where a.maker = 'H';
delete b from product a inner join printer b
on a.model = b.model
where a.maker = 'H';

delete a from product a
where a.maker ='H';
原文地址:https://www.cnblogs.com/lightice/p/12713661.html