zoukankan      html  css  js  c++  java
  • 现有一个商店的数据库,记录顾客及其购物情况,根据要求解答问题

    题目: 现有一个商店的数据库,记录顾客及其购物情况,由下面三个表组成:
    商品product(商品号productid,商品名productname,单价unitprice,商品类别category,供应商provider);
    顾客customer(顾客号customerid,姓名name,住址location);
    购买purcase(顾客号customerid,商品号productid,购买数量quantity);
    每个顾客可以购买多件商品,每件商品可以被多个顾客购买,属于多对多的关系。
    试用SQL语言完成下列功能:
    1 建表,在定义中要求声明如下约束:
    (1)每个表的主外键;
    (2)顾客的姓名和商品名不能为空值;
    (3)单价必须大于0,购买数量必须再0到20之间;
    2 往表中插入数据:
    商品(M01,佳洁士,8.00,牙膏,宝洁;
          M02,高露洁,6.50,牙膏,高露洁;
          M03,洁诺,5.00,牙膏,联合利华;
          M04,舒肤佳,3.00,香皂,宝洁;
          M05,夏士莲,5.00,香皂,联合利华;
          M06,雕牌,2.50,洗衣粉,纳爱斯
          M07,中华,3.50,牙膏,联合利华;
          M08,汰渍,3.00,洗衣粉,宝洁;
          M09,碧浪,4.00,洗衣粉,宝洁;)
    顾客(C01,Dennis,海淀;
          C02,John,朝阳;
          C03,Tom,东城;
          C04,Jenny,东城;
          C05,Rick,西城;) 
    购买(C01,M01,3;     
         C01,M05,2;
         C01,M08,2;    
         C02,M02,5;
         C02,M06,4;     
         C03,M01,1;
         C03,M05,1;     
         C03,M06,3; 
         C03,M08,1;    
         C04,M03,7;
         C04,M04,3;       
         C05,M06,2; 
         C05,M07,8;)
    商品有9 条,顾客有5条,购买有13条
    3 用PL/SQL块编程完成下列查询要求:
    (1)求购买了供应商"宝洁"产品的所有顾客;
    (2)求购买的商品包含了顾客"Dennis"所购买的所有商品的顾客(姓名);
    (3)求牙膏卖出数量最多的供应商。
    4 将所有的牙膏商品单价增加10%。(SQL语句)
    5 删除从未被购买的商品记录。(SQL语句)
     
     
     
    解题思路分析:
    第一步:创建表,确定数据类型,建立约束
    --删除数据表
    drop table purcase;
    drop table product;
    drop table customer;
     
    ---创建数据表
    ---解题思路分析:
    ---第一步:创建表,确定数据类型,建立约束
    ----创建商品表product
     
    create table product (
        productid  varchar2(10) ,
        productname varchar2(20) NOT NULL,
        unitprice number,
        category varchar2(20),
        provider varchar2(20),
        CONSTRAINT pk_productid primary key (productid),
        CONSTRAINT CK_unitprice CHECK (unitprice>0)    
    );
     
    --创建顾客表customer:
    create table customer(
        customerid varchar2(10),
        name varchar2(20) NOT NULL,
        location varchar2(20),
        CONSTRAINT pk_customerid primary key(customerid)
    );
     
    --创建购买记录表 purcase:
    create table purcase(
        customerid varchar2(10),
        productid varchar2(10),
        quantity number,
        CONSTRAINT FK_customerid FOREIGN KEY(customerid) REFERENCES customer(customerid) on delete cascade,
        CONSTRAINT FK_productid FOREIGN KEY(productid) REFERENCES product(productid) on delete cascade,
        CONSTRAINT CK_quantity CHECK(quantity BETWEEN 0 AND 20)
    );
     
     
    ---测试数据的编写:
    insert into product (productid,productname,unitprice,category,provider)
    values('M01','佳洁士',8.00,'牙膏','宝洁');
     
    insert into product (productid,productname,unitprice,category,provider)
    values('M02','高露洁',6.50,'牙膏','高露洁');
     
    insert into product (productid,productname,unitprice,category,provider)
    values('M03','洁诺',5.00,'牙膏','联合利华');
     
    insert into product (productid,productname,unitprice,category,provider)
    values('M04','舒肤佳',3.00,'香皂','宝洁');
     
    insert into product (productid,productname,unitprice,category,provider)
    values('M05','夏士莲',5.00,'香皂','联合利华');
     
    insert into product (productid,productname,unitprice,category,provider)
    values('M06','雕牌',8.00,'洗衣粉','纳爱斯');
     
    insert into product (productid,productname,unitprice,category,provider)
    values('M07','中华',3.50,'牙膏','联合利华');
     
    insert into product (productid,productname,unitprice,category,provider)
    values('M08','汰渍',3.00,'洗衣粉','宝洁');
     
    insert into product (productid,productname,unitprice,category,provider)
    values('M09','碧浪',4.00,'洗衣粉','宝洁');
     
     
    insert into customer (customerid, name ,location)
    values('C01','Dennis','海淀');
     
     
    insert into customer (customerid, name ,location)
    values('C02','John','朝阳');
     
     
    insert into customer (customerid, name ,location)
    values('C03','Tom','东城');
     
     
    insert into customer (customerid, name ,location)
    values('C04','Jenny','东城');
     
     
    insert into customer (customerid, name ,location)
    values('C05','Rick','西城');
     
     
    insert into purcase(customerid,productid,quantity)
    values('C01','M01',3);
     
    insert into purcase(customerid,productid,quantity)
    values('C01','M05',2);
     
    insert into purcase(customerid,productid,quantity)
    values('C01','M08',2);
     
    insert into purcase(customerid,productid,quantity)
    values('C02','M02',5);
     
    insert into purcase(customerid,productid,quantity)
    values('C02','M06',4);
     
    insert into purcase(customerid,productid,quantity)
    values('C03','M01',1);
     
    insert into purcase(customerid,productid,quantity)
    values('C03','M05',1);
     
    insert into purcase(customerid,productid,quantity)
    values('C03','M06',3);
     
    insert into purcase(customerid,productid,quantity)
    values('C03','M08',1);
     
     
    insert into purcase(customerid,productid,quantity)
    values('C04','M03',7);
     
    insert into purcase(customerid,productid,quantity)
    values('C04','M04',3);
     
    insert into purcase(customerid,productid,quantity)
    values('C05','M06',2);
     
    insert into purcase(customerid,productid,quantity)
    values('C05','M07',8);
     
    ---提交事务
    commit;
     
    ---问题分析
    --(1)求购买了供应商"宝洁"产品的所有顾客;
     
    1、确定要使用的表
        product 表:供应商信息
        customer表:顾客信息
        purcase表:顾客的购买记录
    2、确定关联关系
         purcase.customerid=customer.customerid;
         purcase.productid=customer.productid;
     
    第一步:先确定供应商为‘宝洁’的所有产品的产品id
      select productid from product where provider='宝洁';
     
    第二步:在购买记录表中找出购买了‘宝洁’商品的客户id
     
    select customerid from purcase where productid in(select productid from product where provider='宝洁');
    第三步:在顾客表中,找出对应的顾客信息
     
    select * from customer where customerid in (select customerid from purcase where productid in(select productid from product where provider='宝洁'));
     
     
     
    ---(2)求购买的商品包含了顾客"Dennis"所购买的所有商品的顾客(姓名);
            买了Dennis所购买的商品的所有的顾客信息
     
    1、确定需要使用的表
       customer表:顾客id,顾客name
       purcase表:顾客的购买记录,查找所购买的物品id
       
    2、确定关联的关系
         purcase.customerid=customer.customerid;
         purcase.productid=product.productid;
     
     
    1、确定Dennis所购买的商品id
    select customerid from customer where name='Dennis';
     
    select productid from purcase where customerid =(
    select customerid from customer where name='Dennis'
    );
     
     
    2、找出购买了Dennis的商品的顾客信息,这样的做法只能找到与Dennis买的东西有一样的就可以了
    select distinct customerid from purcase where productid in ('M01','M05','M08');
     
     
    select name from customer where customerid in (select distinct customerid from purcase where productid in (select productid from purcase where customerid =(
    select customerid from customer where name='Dennis'
    )));
     
    update purcase set productid='M06' where customerid='C05' and quantity=2;
     
     
    2、题目的意思是说,找出买了Dennis所有买的东西的客户,采用数学的求差的运算,求差且不再这里面的数据
    select * from customer ca
    where not exists(
        select productid from purcase where customerid=(
            select customerid from customer where name='Dennis'
    )
        MINUS
        SELECT PRODUCTID FROM PURCASE WHERE CUSTOMERID=CA.CUSTOMERID
        AND CA.NAME<>'Dennis'
    );
     
     
    ---(3)求牙膏卖出数量最多的供应商。
    1、确定需要使用的表
       purcase表:顾客的购买记录,根据产品id查找卖出数量最多的产品
       product 表:找到牙膏的产品id,供应商
       
    2、确定关联的关系
    purcase.productid=product.productid;
     
    1、先找出牙膏的id
    select productid,provider from product where category='牙膏';
     
    2、然后关联两张表,根据供应商分组后求出数量最大的值
     
    select  temp.provider ,sum(quantity) he
    from purcase p,(
    select productid,provider from product where category='牙膏'
    ) temp
    where p.productid in (select productid from product where category='牙膏')
    and  p.productid=temp.productid
    group by temp.provider;
     
    update purcase set productid='M07' where customerid='C05' and quantity=8;
     
     
    select max(he)
    from (
    select  temp.provider pro  ,sum(quantity) he
    from purcase p,(
    select productid,provider from product where category='牙膏'
    ) temp
    where p.productid in (select productid from product where category='牙膏')
    and  p.productid=temp.productid
    group by temp.provider
    ) ;
     
     
     
     
    select provider
    from product
    where productid=(
        select productid
        from purcase
        where productid in (
            select productid from product where category='牙膏'    
    )
        group by productid
        having sum(quantity)=(
            select max(sum(quantity))
            from purcase
            where productid in (
            select productid from product where category='牙膏'    
    )
        group by productid
    )
    );
     
     
     
     
     
     
  • 相关阅读:
    Minimum Depth of Binary Tree leetcode java
    Maximum Depth of Binary Tree leetcode java
    Symmetric Tree leetcode java
    Same Tree leetcode java
    Binary Tree Postorder Traversal leetcode java
    Binary Tree Preorder Traversal leetcode java
    Binary Tree Inorder Traversal leetcode java
    Combinations leetcode java
    一键清除Centos iptables 防火墙所有规则
    阿里云centos7.7x64安装open,并配置ip转发和nat伪装
  • 原文地址:https://www.cnblogs.com/Etude/p/9279795.html
Copyright © 2011-2022 走看看