日期:2014-05-18  浏览次数:20405 次

两表关联,
两表关联,
  如T1 (DEPID,NAME)
  1 张三
  2 李四
  阿五

  ,T2 (DEPID,DEPTNAME)

  1 行政
  2 财务
  3 研发

1:通过DEPTID关联部门,还要放阿五,没有DEPID的也要显示这个人

------解决方案--------------------
/*
不同的班有重名的人,同一个班没有重名的,班级和姓名是联合主键
--租借表
姓名 班级 性别 借书数量(int类型)
张三 一班 男 10
李四 二班 女 7
张三 二班 女 5
李四 一班 男 3

--归还表
姓名 班级 性别 还书数量(int类型)
张三 一班 男 9
'李四','二班','女',5
张三 二班 女 2
李四 一班 男 1

--查找现在所有人欠书本数为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
*/

/*
两表关联:
如T1 (DEPID,NAME)
1 张三
2 李四
null 阿五

T2 (DEPID,DEPTNAME)

1 行政
2 财务
3 研发

1:通过DEPTID关联部门,还要放阿五,没有DEPID的也要显示这个人
*/
go
if object_id('T1')is not null
drop table T1
go
create table T1(
DEPID int,
NAME varchar(20)
)
insert T1
select 1,'张三' union all
select 2,'李四' union all
select null,'阿五'
select *from T1

go
if object_id('T2')is not null
drop table T2
go
create table T2(
DEPID int,
DEPARTNAME varchar(20)
)
go
insert T2
select 1,'行政' union all
select 2,'财务' union all
select 3,'研发' 

select 
T1.DEPID,T1.NAME,T2.DEPARTNAME 
from 
T1 left join T2 on T1.DEPID=T2.DEPID

/*
结果表:
DEPID NAME DEPARTNAME
1 张三 行政
2 李四 财务
NULL 阿五 NULL
*/
------解决方案--------------------
/*
两表关联:
如T1 (DEPID,NAME)
1 张三
2 李四
null 阿五

T2 (DEPID,DEPTNAME)

1 行政
2 财务
3 研发

1:通过DEPTID关联部门,还要放阿五,没有DEPID的也要显示这个人
*/
go
if object_id('T1')is not null
drop table T1
go
create table T1(
DEPID int,
NAME varchar(20)
)
insert T1
select 1,'张三' union all
select 2,'李四' union all
select null,'阿五'
select *from T1

go
if object_id('T2')is not null
drop table T2
go
create table T2(
DEPID int,
DEPARTNAME varchar(20)
)
go
insert T2
select 1,'行政' union all
select 2,'财务' union all
select 3,'研发' 

select 
T1.DEPID,T1.NAME,T2.DEPARTNAME 
from 
T1 left join T2 on T1.DEPID=T2.DEPID

/*
结果表:
DEPID NAME DEPARTNAME