假设有三个表:
商场表: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`='北京市');