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

sql2000 多表查询
刚学到sql的select语 sql提供了多表查询的功能 是用join。。。on。。。实现的 
但我自己试了一下 不用join。。。on。。。 也可以在多个表中查询出想要的结果啊 
我想知道用普通的 select。。from。。。where。。。和select。。。from。。join。。on。。。这样 有什么不同

------解决方案--------------------
/*
包括部门,姓名,出勤天数,迟到次数,早退次数,矿工次数 这些数据
*/

go
if OBJECT_ID('dept') is not null
drop table dept
go
create table dept(
deptid varchar(5),
deptname varchar(20)
)

go
if OBJECT_ID('emp') is not null
drop table emp
go
create table emp(
empid varchar(10),
empname varchar(20),
empsex varchar(5) check(empsex in('men','women')),
empage int,
birthday datetime,
addr varchar(50),
tel varchar(12),
deptid varchar(5)
)

go
if OBJECT_ID('kaoqin') is not null
drop table kaoqin
go
create table kaoqin(
empid varchar(10),
deptid varchar(5),
出勤天数 int,
迟到次数 int,
早退次数 int,
矿工次数 int
)
--包括部门,姓名,出勤天数,迟到次数,早退次数,矿工次数
select 
dept.deptname as 部门,emp.empname as 姓名,
出勤天数,迟到次数,早退次数,矿工次数
from emp
inner join dept on emp.deptid=dept.deptid
inner join kaoqin on emp.empid=kaoqin.empid

/*
包括部门 姓名 出勤天数 迟到次数 早退次数 矿工次数
*/

------解决方案--------------------
SQL code

declare @t table (id int,col varchar(1))
insert into @t
select 1,'a' union all
select 2,'b' UNION ALL
SELECT 3,'c'

declare @m table (id int,col varchar(1))
insert into @m
select 1,'a' union all
select 2,'b'

select * from @t a left join @m b on a.id=b.id
/*
id          col  id          col
----------- ---- ----------- ----
1           a    1           a
2           b    2           b
3           c    NULL        NULL
*/
select * from @t a left join @m b on 1=1  WHERE a.id=b.id
/*
id          col  id          col
----------- ---- ----------- ----
1           a    1           a
2           b    2           b
*/
--相当于内连接
select * from @t a ,@m b WHERE a.id=b.id
/*
----------- ---- ----------- ----
1           a    1           a
2           b    2           b
*/