不同的班有重名的人,同一个班没有重名的,班级和姓名是联合主键租借表
姓名 班级 性别 借书数量(int类型)
张三 一班 男 10
李四 二班 女 7
张三 二班 女 5
李四 一班 男 3
张三 一班 男 5
归还表
姓名 班级 性别 还书数量(int类型)
张三 一班 男 9
李四 二班 女 5
张三 二班 女 2
李四 一班 男 1
张三 一班 男 3
查找现在所有人欠书本数为1-3本的且性别为女的查询结果显示结果为:
姓名 班级 性别 仍欠数量
......
解决方案 »
- 请问一下如何在ADO对象中判断table的rowlock
- 那本书上对SQL语句的查询机制讲的比较好,能从根本上讲清楚SQL语句到底是如何在内部执行的(如像内外循环查询)
- 求方法从excel导入数据到页面上
- oracle数据如何导入sql数据库
- sql server2000中怎么实现一个字段的自增长?
- sql server 2008无法安装成功
- 请问如何实现这样的排序???(在线等待)
- 紧急:由于系统故障,服务器重启后出现SQL server2005状态变成可疑
- 求助:为什么在判断条件无法执行存储过程?
- 数据库设计有什么规范?
- 数据库异地备份
- SQLServer 2008企业版报密码验证失败,出现基础结构错误
FROM [租借表] T1
LEFT JOIN [归还表] T2 ON T1.[姓名]=T2.[姓名] AND T1.[班级]=T2.[班级]
AND T1.[借书数量]-ISNULL(T2.[还书数量],0) BETWEEN 1 AND 3
SELECT T1.[姓名],T1.[班级],T1.[性别],T1.[借书数量]-ISNULL(T2.[还书数量],0) AS 仍欠数量
FROM [租借表] T1
LEFT JOIN [归还表] T2 ON T1.[姓名]=T2.[姓名] AND T1.[班级]=T2.[班级]
WHERE T1.[借书数量]-ISNULL(T2.[还书数量],0) BETWEEN 1 AND 3
a.*,a.借书数量-ISNULL(b.还书数量,0) as 仍欠数量
from (select 姓名,班级,性别,SUM(借书数量) as 借书数量 from 租借表 where 性别='女' group by 姓名,班级,性别) as a
left join (select 姓名,班级,SUM(还书数量) as 还书数量 from 归还表 where 性别='女' group by 姓名,班级) as b on a.姓名=b.姓名 and a.班级=b.班级
where a.借书数量-ISNULL(b.还书数量,0) between 1 and 3
a.*,a.借书数量-ISNULL(b.还书数量,0) as 仍欠数量
from (select 姓名,班级,性别,SUM(借书数量) as 借书数量 from 租借表 where 性别='女' group by 姓名,班级,性别) as a
left join (select 姓名,班级,SUM(还书数量) as 还书数量 from 归还表 where 性别='女' group by 姓名,班级) as b on a.姓名=b.姓名 and a.班级=b.班级
where a.借书数量-ISNULL(b.还书数量,0) between 1 and 3
if object_id('租借表') is not null
drop table 租借表
go
create table 租借表
(
姓名 varchar(10),
班级 varchar(10),
性别 varchar(10),
借书数量 int
)
go
insert into 租借表
select '张三','一班','男',10 union all
select '李四','二班','女',7 union all
select '张三','二班','女',5 union all
select '李四','一班','男',3 union all
select '张三','一班','男',5
go
if object_id('归还表') is not null
drop table 归还表
go
create table 归还表
(
姓名 varchar(10),
班级 varchar(10),
性别 varchar(10),
还书数量 int
)
go
insert into 归还表
select '张三','一班','男',9 union all
select '李四','二班','女',5 union all
select '张三','二班','女',2 union all
select '李四','一班','男',1 union all
select '张三','一班','男',3
go
select * from
(
select 姓名,班级,欠书本数=sum(借书数量)-(select sum(还书数量) from 归还表 where 班级=a.班级 and 姓名=a.姓名) from 租借表 a where 性别='女' group by 班级,姓名
) t where 欠书本数<=3
go
/*
姓名 班级 欠书本数
---------- ---------- -----------
李四 二班 2
张三 二班 3(2 行受影响)
*/
+ and t1.[性别]='女'
FROM [租借表] T1
LEFT JOIN [归还表] T2 ON T1.[姓名]=T2.[姓名] AND T1.[班级]=T2.[班级]and T2 .[性别] ='女'
WHERE T1.[借书数量]-ISNULL(T2.[还书数量],0) BETWEEN 1 AND 3
and T1.[性别] ='女'
select m.姓名,
m.班级,
m.性别,
m.借书数量 - n.还书数量 仍欠数量
from 租借表 m , 归还表 n
where m.姓名 = n.姓名 and m.班级 = n.班级 and m.性别 = '女' and m.借书数量 - n.还书数量 between 1 and 3
(
姓名 varchar(10),
班级 varchar(10),
性别 varchar(10),
借书数量 int
)
go
insert into 租借表
select '张三','一班','男',10 union all
select '李四','二班','女',7 union all
select '张三','二班','女',5 union all
select '李四','一班','男',3 union all
select '张三','一班','男',5
create table 归还表
(
姓名 varchar(10),
班级 varchar(10),
性别 varchar(10),
还书数量 int
)
insert into 归还表
select '张三','一班','男',9 union all
select '李四','二班','女',5 union all
select '张三','二班','女',2 union all
select '李四','一班','男',1 union all
select '张三','一班','男',3select m.姓名,
m.班级,
m.性别,
m.借书数量 - n.还书数量 仍欠数量
from 租借表 m , 归还表 n
where m.姓名 = n.姓名 and m.班级 = n.班级 and m.性别 = '女' and m.借书数量 - n.还书数量 between 1 and 3drop table 租借表 ,归还表/*
姓名 班级 性别 仍欠数量
---------- ---------- ---------- -----------
李四 二班 女 2
张三 二班 女 3(所影响的行数为 2 行)
*/
姓名 班级 性别 借书数量(int类型)
张三 一班 男 10
李四 二班 女 7
张三 二班 女 5
李四 一班 男 3
张三 一班 男 5
归还表
姓名 班级 性别 还书数量(int类型)
张三 一班 男 9
李四 二班 女 5
张三 二班 女 2
李四 一班 男 1
张三 一班 男 3
go
if object_id('租借表') is not null
drop table 租借表
go
create table 租借表(
姓名 varchar(20) not null,
班级 varchar(20) not null,
性别 varchar(5) check(性别 in('男','女')),
借书数量 int default 0
)
go
alter table 租借表 add constraint pk_name_class primary key(姓名,班级)
go
insert 租借表
select '张三','一班','男',10 union all
select '李四','二班','女',7 union all
select '张三','二班','女',5 union all
select '李四','一班','男',3
--归还表
go
if object_id('归还表') is not null
drop table 归还表
go
create table 归还表(
姓名 varchar(20) not null,
班级 varchar(20) not null,
性别 varchar(5) check(性别 in('男','女')),
还书数量 int default 0
)
go
alter table 归还表 add constraint pk_n_c primary key(姓名,班级)
go
insert 归还表
select '张三','一班','男',9 union all
select '李四','二班','女',5 union all
select '张三','二班','女',2 union all
select '李四','一班','男',1
select *from 归还表--查找现在所有人欠书本数为1-3本的且性别为女的查询结果
--显示结果为:
--姓名 班级 性别 仍欠数量select
租借表.姓名,租借表.班级,
租借表.性别,(租借表.借书数量-归还表.还书数量) as 仍欠数量
from
租借表 inner join 归还表
on
租借表.姓名=归还表.姓名 and 租借表.班级=归还表.班级
/*
--结果表
姓名 班级 性别 仍欠数量
李四 二班 女 2
李四 一班 男 2
张三 二班 女 3
张三 一班 男 1
*/