实验五  select语句查询日期高级查询
姓名:
网络工程
学号:
专业:
班级:
同组人:
实验日期:
【实验目的与要求】
1、 熟练掌握IN子查询
2、 熟练掌握比较子查询(尤其要注意ANYALL谓词如何用集函数代替)
3、 熟练掌握EXISTS子查询(尤其是如何将全称量词和逻辑蕴含用EXISTS谓词代替)
4、 熟练掌握复杂查询的select语句
【实验准备】
1. 准备好测试数据
2. 熟悉多表查询与嵌套查询的用法。
【实验内容】
5.1. 准备工作
1.修改实验四的数据库中的表
本实验将采用实验四所建立的数据库SalesDB及其相应的表,并对Product表修改如下。若该数据库及表尚未创建,请先完成之。
5-1 Product
字段名称
 
 
允许空值
 
   
Pno
char
6
NOT NULL
产品编号
Pname
varchar
30
NOT NULL
产品名称
Price
float
NULL
价格
Stocks
Int
NULL
库存量
Area
varchar
10
NULL
产地
2.更新表中的数据
5-2 Product
Pno
Pname
Price
Stocks
Place
P00001
彩电视机
3000
10
南京
P00002
洗衣机
1200
20
上海
P00003
冰箱
1800
12
杭州
P00004
电热水器
2000
30
无锡
P00005
太阳能热水器
2200
8
杭州
P00006
1匹空调
1800
5
上海
P00007
1.5匹空调
2400
20
无锡
P00008
2匹空调
3800
6
南京
P00009
MP3
900
10
杭州
Customer表中插入数据:
5-3 Product_customer
Pno
Cno
Cdate
Count
Amount
P00001
C00004
2004-06-20
5
8000
P00002
C00002
2004-03-12
1
1200
P00003
C00005
2004-05-20
2
6000
P00001
C00001
2004-03-18
1
2000
P00001
C00004
2004-03-18
5
8000
P00002
C00001
2004-03-18
1
1200
P00002
C00002
2004-03-18
2
3000
P00005
C00003
2004-05-20
2
6000
P00006
C00001
2006-05-09
3
9000
为达到更好的测试效果,请自行向数据库表中添加其它数据,使关系中元组数超过10条,且最好使每个属性值呈现出多样性。
5.2. 复杂查询
1查询比洗衣机价格高的产品的信息。
SQL语句:Select distinct p1.* from product p1,product p2 where p1.price>p2.price and p2.pname='洗衣机';
2检索所有产品的销售信息。
SQL语句:Select product.pname, customerame, pc.cdate, pc.count, pc.amount from product, product_customer pc, customer where product.pno=pc.pno and pco=customero;
3查询已销售产品的编号、名称、客户名称、销售额。
连接查询T—SQL语句:Select product.pname,pc.pno, customerame, pc.amount from
product, product_customer pc, customer where product.pno=pc.pno and pco=customero;
4查询购买了洗衣机的客户的名称和地区。
SQL语句:Select distinct ion from product, product_customer pc, customer where product.pno=pc.pno and pco=customero and product.pname='洗衣机';
5查询与太阳能热水器同一产地的产品的编号、名称、价格。
(子查询)SQL语句:Select product.pno,product.pname,product.price from product where product.area in (select p2.area from product p2 where p2.pname='太阳能热水器');
连接查询SQL语句:Select p1.pno,p1.pname,p1.price from product p1, product p2 where p1.area=p2.area and p2.pname='太阳能热水器';
6查询其他产地中比南京的任一产品价格高的产品的编号和名称。
带有ANYALL谓词的子查询语句:
Select product.pno,product.pname from product where product.area<>'南京' and product.price> any (select p2.price from product p2 where p2.area='南京');
用聚合函数实现:
Select product.pno,product.pname from product where product.area<>'南京' and product.price> (select min(p2.price) from product p2 where p2.area='南京');
7查询购买了全部产品的客户姓名。
SQL语句:
Select cname from customer where not exists (select * from product where not exists (select * from product_customer where cno=customero and pno=product.pno));
8查询至少购买了客户“C00002”所购买的全部产品的客户的名称和地区。
SQL语句:
Select cname,region from customer where cno!='C00002' and cno in (select distinct cno from product_customer pc1 where not exists (select * from product_customer pc2 where pc2.cno='C00002' and not exists (select * from product_customer pc3 where pc3.cno=pc1.cno and pc3.pno=pc2.pno)));
9检索产品的编号、名称、购买的客户名称及购买的数量。
SQL语句:
Select distinct product.pno,product.pname,unt from product,product_customer pc,customer where product.pno=pc.pno and customero=pco);
10检索销售给广电公司且销售额至少高于销售给广电市场的产品的编号、客户号、销售额,并按销售额从高到低次序排列。
SQL语句:Select product.pno,product.pname,customero,pc.amount from product,product_customer pc,customer where product.pno=pc.pno and customero=pc.
cno and customerame='广电公司' and pc.amount> all (select pc1.amount from product_customer pc1,customer c1 where pc1o=c1o and c1ame='广电市场');
11检索销售给3个以上客户的产品的编号、总销售额,要求按总销售额的降序排列出来。
SQL语句:select pno,sum(amount) as sum_amount from product_customer pc group by pno desc having count(*)>3;
12检索出各类产品的编号、名称、未购买的客户名称。
SQL语句:select product.pno, product.pname, customerame from product p1, customer c1 where not exists (select * from product p2, product_customer pc, customer c2 where p2.pno=p1.pno and c2o=c1o and p2.pno=pc.pno and c2o=pco);
13检索购买了多于3类产品的且电话号码的尾数小于6的客户号及其平均销售额。
SQL语句:select pco,avg(amount) as avg_amount from product_customer pc,custom
er where pco=customero and l,1)>'6' group by pco having count(*)>3;
14检索最高销售额与最低销售额之差大于1000的产品的编号、名称、最高销售额、最低销售额。
SQL语句:select p.pno,p.pname,max(pc.amount) as max_amount,min(pc.amount) as min_amount from product p,product_customer pc where p.pno=pc.pno group by p.pno,p.pname having max(pc.amount)-min(pc.amount)>1000;
15查询销售给客户‘C00001’的产品集合与销售给客户‘C00002’的产品集合的交集
SQL语句:select product.* from product, product_customer pc where product.pno=pc.pno and pco='C00001' intersect select product.* from product, product_customer pc where product.pno=pc.pno and pco='C00002';
16查询销售给客户‘C00001’的产品集合与销售给客户‘C00002’的产品集合的差集
SQL语句:select product.* from product, product_customer pc where product.pno=pc.pno and pco='C00001' except select product.* from product, product_customer pc where product.pno=pc.pno and pco='C00002';

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。