sql中的连接查询

作者在 2010-08-08 09:17:59 发布以下内容
以下部分是我学习的笔记
 
create table 产品
(
   产品编号  char(9) not null,
   产品名称  varchar(20)  not null
)
go
create table 产品销量
(
   产品编号  char(9) not null,
   销量      int
)
go
insert into 产品 values('001','显示器')
insert into 产品 values('002','键盘')
insert into 产品 values('003','鼠标')
insert into 产品销量 values('001','25')
insert into 产品销量 values('003','35')
insert into 产品销量 values('005','30')

--A.自身连接查询
select a.*,b.* from 产品 as a join 产品 as b
on a.产品编号=b.产品编号
/*
自身连接查询,
必须有连接条件,
不能有查询条件,
结果集全显示,
要加上区分标记
*/
--B.多表连接查询
--B-1: 交叉查询
select * from 产品 cross join 产品销量
/*
交叉连接(不含查询条件)
全显示,左在左,右在右
类似于俩矩阵相乘
*/
select * from 产品 cross join 产品销量
where 产品.产品编号=产品销量.产品编号
--交叉连接(含 查询条件)
--B-2-1 等值连接查询
select * from 产品 join 产品销量
on  产品.产品编号=产品销量.产品编号
/*
等值连接
结果全显示,左在左,右在右
*/
--B-2-2 自然连接查询
select 产品名称 from 产品 join 产品销量
on  产品.产品编号=产品销量.产品编号
/*
自然连接查询 要指定列的名字
结果只显示所选列
*/
--B-2-3不等值查询
select * from 产品 join 产品销量
on  产品.产品编号>产品销量.产品编号
/*
连接条件中不能是等号
结果是符合条件的全显示
*/
--B-3-1 外连中的左连
select * from 产品 left join  产品销量
on 产品.产品编号=产品销量.产品编号
/*
查询时以左表为准,
结果中不仅有与连接条件中相同的行;
并且,左表中与连接条件中不相同的行也都要显示
右表对应的为null 
*/
--B-3-2 外连中的右连
select * from 产品 right join  产品销量
on 产品.产品编号=产品销量.产品编号
/*
查询时以右表为准,
结果中不仅有与连接条件中相同的行;
并且,右表中与连接条件中不相同的行也都要显示
左表对应的为null 
*/
--B-3-3 完全外连接
select * from 产品 full join  产品销量
on 产品.产品编号=产品销量.产品编号
/*
完全外连接,全显示,
若A表有的项,B没有,则B中对应为null
反过来一样
*/
sql | 阅读 356 次
文章评论,共0条
游客请输入验证码
文章归档
最新评论