数据库管理问题求答案

假设有三个表:

商场表:M (MNO,MNAME,CITY)

          各属性含义依次为商场号、商场名和商场所在城市;

商品表:P (PNO,PNAME,CITY,COLOR)

          各属性含义依次为商品号、商品名、产地和商品颜色;

销售表:S (MNO,PNO,QTY)

          各属性含义依次为商场号、商品号和销售数量

基于以上表请回答:

请用SQL语句创建销售表S,要求包含主、外码的定义,同时要保证QTY属性取值不能为空。

试用SQL语句写出下列查询:检索上海市各种商品的销售总数量。

试用SQL语句实现下列查询:检索不销售北京生产的商品的商场名。

-- 创建S表
create table S(id int identity primary key
    ,MNO int not null
    ,PNO int not null
    ,QTY int not null
)
-- 增加外键
alter table S with chek add constraint fk_mno foreign key(MNO) references M(MNO)

-- 上海产品销售统计
select p.PNAME,sum(S.QTY) as cnt 
from M
inner join S on M.MNO=S.MNO
inner join P on P.PNO=S.PNO
where M.CITY='上海'
group by P.PNAME

-- 销售记录中没有销售过北京产品的商场
select * 
from M
where not exists(
    select top 1 1
    from S
    where M.MNO=S.MNO
    and S.PNO in (
        select PNO
        from P
        where CITY='北京'
    )
)

 

create table S (MNO int not null primary key,

PNO int,

QTY varchar(30) not null,

CONSTRAINT `fPNO` FOREIGN KEY (`PNO`) REFERENCES `p` (`PNO`)

);

CREATE TABLE `S` (
  `ID` bigint NOT NULL AUTO_INCREMENT COMMENT '销售ID',
  `MNO` bigint DEFAULT NULL COMMENT '商场号',
  `PNO` bigint DEFAULT NULL COMMENT '商品号',
  `QTY` bigint NOT NULL COMMENT '销售数量',
  PRIMARY KEY (`ID`),
  KEY `F_S_MNO` (`MNO`),
  KEY `F_S_PNO` (`PNO`),
  CONSTRAINT `F_S_MNO` FOREIGN KEY (`MNO`) REFERENCES `m` (`MNO`),
  CONSTRAINT `F_S_PNO` FOREIGN KEY (`PNO`) REFERENCES `p` (`PNO`)
);

SELECT count(S.`QTY`) AS '总数量' FROM S , M WHERE S.`MNO` = M.`MNO` AND M.`CITY`='上海市';

SELECT M.`MNAME` FROM M WHERE M.`CITY` NOT IN(
SELECT DISTINCT M.`CITY`
FROM S,M,P WHERE S.`MNO` = M.`MNO` AND S.`PNO` = P.`PNO` AND P.`CITY`='北京市');