select zg.职工号,仓库号 from dg join zg on zg.职工号=dg.职工号 where 供应商号='S3'
检索出目前与S3供应商没有联系的职工信息。
1 2
select*from zg where 职工号 notin (select 职工号 from dg where 供应商号='S3')
检索出目前没有任何订购单的供应商信息
1 2
select*from gys where 供应商号 notin (selectdistinct 供应商号 from dg)
1 2
SELECT*FROM gys WHERENOTEXISTS ( SELECT*FROM dg WHERE 供应商号=gys.供应商号 )
检索出和职工E1、E3都有联系的北京的供应商的信息。
1 2 3 4 5
select*from gys where 地址='北京' and 供应商号 in (select 供应商号 from dg where 职工号='E1') and 供应商号 in (select 供应商号 from dg where 职工号='E3')
检索出目前和华通电子公司有业务联系的每个职工的工资。
1 2 3
select 职工号,工资 from zg where 职工号 in (select 职工号 from dg where 供应商号 in (select 供应商号 from gys where 供应商名='华通电子公司'))
检索出与工资在1220元以下的职工没有联系的供应商名称。
1 2 3 4 5
select 供应商名 from gys where 供应商号 notin (select 供应商号 from dg where 职工号 in (select 职工号 from zg where 工资<1220))
1 2 3 4
select 供应商名 from gys where 供应商号 notin (select 供应商号 from dg join zg on dg.职工号=zg.职工号 where 工资>2250)
检索出向S4供应商发出订购单的仓库所在的城市。
1 2 3
select 城市 from ck where 仓库号 in (select 仓库号 from zg where 职工号 in (select 职工号 from dg where 供应商号='S4'))
检索出在上海工作并且向S6供应商发出了订购单的职工号。
1 2 3
select 职工号 from zg where 仓库号 in (select 仓库号 from ck where 城市='上海'and 职工号 in (select 职工号 from dg where 供应商号='S6'))
1 2 3
select dg.职工号 from zg join ck on zg.仓库号=ck.仓库号 join dg on zg.职工号=dg.职工号 where 城市='上海'and 供应商号='S6'
检索出在广州工作并且只向S6供应商发出了订购单的职工号。
1 2 3 4 5 6
select 职工号 from zg where 仓库号 in (select 仓库号 from ck where 城市='广州' and 职工号 in (select 职工号 from dg where 供应商号='S6') and 职工号 notin (SELECT 职工号 FROM dg WHERE 供应商号!='S6'))
检索出由工资多于1230元的职工向北京的供应商发出的订购单号。
1 2 3
select 订购单号 from dg where 职工号 in (select 职工号 from zg where 工资>1230) and 供应商号 in (select 供应商号 from gys where 地址='北京')
1 2 3 4
select 订购单号 from dg where 职工号 in (select 职工号 from zg where 工资>2000) and 供应商号 in ( select 供应商号 from gys where 地址='北京')
检索出仓库的个数
1
selectcount(仓库号) from ck
检索出有最大面积的仓库信息。
1 2
select*from ck where ck.面积=( selectmax(面积) from ck )
检索出所有仓库的平均面积。
1
selectavg(面积) 平均面积 from ck
检索出向S4供应商发出订购单的那些仓库的平均面积。
1 2 3
selectavg(面积) as 平均面积 from ck where 仓库号 in (select 仓库号 from zg where 职工号 in (select 仓库号 from dg where 供应商号='S4'))
1 2 3 4
selectavg(面积) as 平均面积 from ck where 仓库号 in (select 仓库号 from zg join dg on zg.职工号=dg.职工号 where 供应商号='S4')
检索出每个城市的供应商个数。
1 2
select 地址,count(*) from gys groupby 地址
检索出每个仓库中工资多于1220元的职工个数。
1 2
select 仓库号,count(*) from zg where 工资>1220 groupby 仓库号
检索出和面积最小的仓库有联系的供应商的个数。
1 2 3 4 5
selectcount(供应商号) from gys where 供应商号 in (select 供应商号 from dg where 职工号 in (select 职工号 from zg where 仓库号 in (select 仓库号 from ck where 面积= (selectmin(面积) from ck))))
1 2 3
selectcount(供应商号) from dg where 职工号 in (select 职工号 from zg where 仓库号 in (select 仓库号 from ck where 面积=(selectmin(面积) from ck)))
检索出工资低于本仓库平均工资的职工信息。
1 2 3
SELECT*FROM 职工 outWHERE 工资< (SELECTAVG(工资) FROM 职工 inne WHERE 仓库号=out.仓库号)
存储过程
创建一个存储过程P1,输入某个仓库号,查询对应仓库的 信息。
1 2 3 4
create proc P1 @ckh nvarchar(225) as select*from ck where 仓库号=@ckh
1
exec P1 'WH8'
创建一个存储过程P2,输入某个仓库号,输出对应仓库的的职工人数。
1 2 3 4 5
create proc P2 @ckh nvarchar(20) as selectcount(职工号) 职工人数 from zg where 仓库号 =@ckh groupby 仓库号
1
exec P2 'WH1'
1 2 3 4 5 6 7 8 9 10 11 12 13
alterTRIGGER tri_salary ON zhg FORUPDATE AS SELECT*FROM INSERTED JOIN DELETED ON INSERTED.职工号 = DELETED.职工号 IF UPDATE(工资) IF EXISTS(SELECT*FROM INSERTED JOIN DELETED ON INSERTED.职工号 = DELETED.职工号 WHERE INSERTED.工资<DELETED.工资) begin print('新工资值低于原工资,拒绝修改') ROLLBACK end
1 2 3 4 5 6 7 8 9 10 11 12 13
CREATEPROCEDURE countzhigong @ckchar(20), @renshuint output AS SELECT@renshu=count(职工号) FROM ck leftouterJOIN zhg ON ck.仓库号= zhg.仓库号 WHERE ck.仓库号=@ck Declare@reint Execute countzhigong 'wh2', @re output Print @re SELECT* FROM ck leftouterJOIN zhg ON ck.仓库号= zhg.仓库号
createtrigger zhigong1 on zg forinsert,update as select*from inserted join deleted on inserted.职工号=deleted.职工号 if update(工资) if exists (select*from inserted join deleted on inserted.职工号=deleted.职工号 where inserted.工资<deleted.工资) rollback
altertrigger zhigong2 on zg forinsert as select*from inserted join deleted on inserted.职工号=deleted.职工号 if notexists ( select 仓库号 from inserted where 仓库号 in (select 仓库号 from ck )) rollback
1
insertinto zg values('E33','WH2','3000')
删除以上两个触发器。
1
droptrigger zhigong1,zhigong2
创建一个触发器dinggou1,在对订购表进行插入操作时,输出该职工的所经手的订购单数目。
1 2 3 4 5 6 7
createtrigger dinggou1 on dg forinsert as select dg.职工号,count(dg.订购单号) as 订购单数目 from dg join inserted on dg.职工号=inserted.职工号 where dg.职工号=inserted.职工号 groupby dg.职工号