实验五 select语句查询日期高级查询
姓名: | 网络工程 | 学号: | ||
专业: | 班级: | |||
同组人: | 无 | 实验日期: | ||
【实验目的与要求】
1、 熟练掌握IN子查询
2、 熟练掌握比较子查询(尤其要注意ANY、ALL谓词如何用集函数代替)
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)查询其他产地中比“南京”的任一产品价格高的产品的编号和名称。
带有ANY或ALL谓词的子查询语句:
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小时内删除。
发表评论