码迷,mamicode.com
首页 > 其他好文 > 详细

select的使用(二)

时间:2014-06-02 22:22:41      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

多表查询

bubuko.com,布布扣
/*基本连接*/
select a.Name,b.Name
from T_Employee a,T_Department b
where a.DepartmentId=b.Id

/*内连接,消除没有匹配连接条件的项*/
select a.Name,b.Name
from T_Employee a inner join T_Department b
on a.DepartmentId=b.Id

select a.Name,b.Name
from T_Employee a inner join T_Department b
on a.DepartmentId=b.Id and b.IsDelete=1

select a.Name,b.Name
from T_Employee a inner join T_Department b
on a.DepartmentId=b.Id 
where  b.IsDelete=1


select a.Name,b.Name
from T_Employee a  join T_Department b--inner可以省略
on a.DepartmentId=b.Id 
where  b.IsDelete=1


/*左外连接,保留没有匹配连接条件的左边表的项*/
select a.Name,b.Name
from T_Employee a left outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id

select a.Name,b.Name
from T_Employee a left outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id and b.IsDelete=1--满足此连接条件的才显示b表内容,保留左边表的没有匹配连接条件的项


select a.Name,b.Name
from T_Employee a left outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id
where  b.IsDelete=1--相当于先执行前三行,再用where语句进行筛选


/*右外连接,保留没有匹配连接条件的右边表的项*/
select a.Name,b.Name
from T_Employee a right outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id 

select a.Name,b.Name
from T_Employee a right outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id and b.IsDelete=1--满足此连接条件的才显示a表内容,保留右边表的没有匹配连接条件的项


select a.Name,b.Name
from T_Employee a right outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id
where  b.IsDelete=1--相当于先执行前三行,再用where语句进行筛选


/*全连接,先列出左边表的所有项,保留没有匹配连接条件的左右两边表的项*/
select a.Name,b.Name
from T_Employee a full outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id 

select a.Name,b.Name
from T_Employee a full outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id and b.IsDelete=1--先列出左边表的所有项,保留没有匹配连接条件的左右两边表的项


select a.Name,b.Name
from T_Employee a full outer join T_Department b--outer可以省略
on a.DepartmentId=b.Id
where  b.IsDelete=1--相当于先执行前三行,再用where语句进行筛选


/*交叉连接,select的b表的字段分别来匹配所有的select的a表字段*/
select a.Name,b.Name
from T_Employee a cross  join T_Department b

select a.Name,b.Name
from T_Employee a cross  join T_Department b
where  b.IsDelete=1--相当于先执行前两行,再用where语句进行筛选


/*自连接,在同一个表上进行连接*/
select a.Name,a.IsDelete, b.Name
from T_Department a,T_Department b
where a.IsDelete=b.IsDelete

select a.Name,a.IsDelete, b.Name
from T_Department a,T_Department b
where a.IsDelete=b.IsDelete and a.Id<>b.Id and a.Name=广东省
bubuko.com,布布扣

 

bubuko.com,布布扣
/*联合查询,将两个查询的结果连接起来,所以select的个数必须相同,类型必须可转换为相同的,可以空起来占位
,union all表示显示所有的列,尽管出现重复,union 表示只显示不重复的信息
*/
select a.Name ,a.BaseSalary,b.Name
from T_Employee a,T_Department b
where a.DepartmentId=b.Id and a.GenderId=403A0BD5-A304-4981-9535-ADA7AF2BFB51
union
select ‘‘,SUM(a.BaseSalary),‘‘
from T_Employee a,T_Department b
where a.DepartmentId=b.Id  and a.GenderId=403A0BD5-A304-4981-9535-ADA7AF2BFB51
union
select ‘‘,AVG(a.BaseSalary),‘‘
from T_Employee a,T_Department b
where a.DepartmentId=b.Id  and a.GenderId=403A0BD5-A304-4981-9535-ADA7AF2BFB51
order by BaseSalary


/*子查询*/
select a.Name ,a.BaseSalary,b.Name
from T_Employee a,T_Department b
where a.DepartmentId=b.Id 
and a.GenderId=403A0BD5-A304-4981-9535-ADA7AF2BFB51
and a.BaseSalary< (select AVG(a.BaseSalary)+1
from T_Employee a,T_Department b
where a.DepartmentId=b.Id 
and a.GenderId=403A0BD5-A304-4981-9535-ADA7AF2BFB51
)


/*子查询嵌套*/
select a.Name ,a.BaseSalary,b.Name
from T_Employee a,T_Department b
where a.DepartmentId=b.Id 
and a.GenderId=403A0BD5-A304-4981-9535-ADA7AF2BFB51
and a.name in (select Name
from T_Employee a,T_SalarySheet b
where a.DepartmentId=b.DepartmentId
and b.Year=(select Year from T_SalarySheet where Id=E0AD51DE-C6A2-4BBE-BF85-D978EAEF9BE9
)
)


/*exists 如果exists有结果,就开始查询主select*/
select a.Name ,a.BaseSalary,b.Name
from T_Employee a,T_Department b
where exists(select * from T_Employee where Name=)


declare @address varchar(20)
declare @pwd varchar(10)
set @address=他告诉
set @pwd=
if exists(select * from T_Employee a where a.Address =@address and a.name =@pwd )
print 登录成功
else
print 登录失败


/*交查询,得到相交的部分*/
select a.Name ,a.BaseSalary
from T_Employee a
intersect
select a.Name ,a.BaseSalary from T_Employee a where Name=



/*差查询,在第一个select中去除这两个相交的部分*/
select a.Name ,a.BaseSalary
from T_Employee a
except
select a.Name ,a.BaseSalary from T_Employee a where Name=
bubuko.com,布布扣

 

select的使用(二),布布扣,bubuko.com

select的使用(二)

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/hongmaju/p/3762143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!