SQL_Server_2008完全学习之第七章操作查询

1、基本连接

 

用户在进行基本连接操作时,可以遵循以下基本原则:

1)SELECT子句列表中,每个目标列前都要加上基表名称。

2)FROM子句应包括所有使用的基表。

3)WHERE子句应定义一个同等连接。

 

SELECT a.UserId,a.UserName,a.Sex,b.CompanyName
FROM T_Member a,T_Company b
where a.UserId  = b.UserId

 

2、内连接

 

内连接语法

SELECT select_list

FROM table1 INNER JOIN table2 [ON join_conditions]

[WHERE search_conditions]

[ORDER BY order_expression]

 

SELECT a.UserId,a.UserName,a.Sex,b.CompanyName
FROM T_Member a INNER join T_Company b
ON a.UserId  = b.UserId AND AreaId=106
ORDER  BY a.UserId  desc

 

3、左外连接

 

外连接

1)内连接消除与另一个表的任何行不匹配的行,而外连接会返回FROM子句中提到的至少一个表或视图中的所有行,只要这些行符合任何搜索条件

2)因为,在外连接中参与连接的表有主从之分,以主表的每行数据去匹配从表中的数据行,如果符合连接条件,则直接返回到查询结果中;如果主表中的行在从表中没有找到匹配的行,主表的行仍然保留,并返回到查询结果中,相应的从表中的行中被填上空值后也返回到查询结果中。


SELECT a.UserId,a.UserName,a.Sex,b.CompanyName
FROM T_Member a  LEFT join T_Company b
ON a.UserId  = b.UserId
WHERE a.AreaId = 106 
ORDER  BY a.UserId  desc

 

4、右外连接

 

SELECT a.UserId,a.UserName,a.Sex,b.CompanyName
FROM T_Member a  RIGHT join T_Company b
ON a.UserId  = b.UserId
ORDER  BY a.UserId  desc


5、全连接

 

SELECT a.UserId,a.UserName,a.Sex,b.CompanyName
FROM T_Member a  FULL  join T_Company b
ON a.UserId  = b.UserId
ORDER  BY a.UserId  desc

 

6、交叉连接

 

1)交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡欠积,返回到结果集中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据的行数。

 

2)语法格式

SELECT select_list

FROM table1 CROSS JOIN table2

[WHERE search_conditions]

[ORDER BY order_expression]

 

select b.UserName,a.CompanyName
from t_company a  CROSS  join t_member b
where b.userName  =  ' Admin '

 

7、自连接

 

SELECT a.UserId,b.UserName,b.UserName as tmpUserName
FROM T_Member a,T_Member b
WHERE a.UserID  = b.UserID

 

这段不是太明白在什么场合下有用,求解!

 

8、联合查询

 

1)语法格式

SELECT select_list

FROM table_source

[WHERE search_conditions]

{UNION [ALL]
SELECT select_list FROM table_source [WHERE search_conditions]}

[ORDER BY order_expression]

 

2)注意:

使用UNION查询时,连接到两个结果集必须在某些目标列表中有相同数目的表达式,且数据内容尽量保持一致。


3)示例:

-- 查询用户财务记录,并联合查询平均值与合计值
SELECT a.UserName,b.Amount,b.Balance
FROM  [ User ] a,ProfitLoss b
WHERE a.UserId  = b.UserId  AND b.TypeId = 0  AND UpdateTime >= ' 2013-08-21 '  AND UpdateTime <= ' 2013-08-21 23:59:59 '
UNION
-- 查询平均
SELECT  ' 平均 ', AVG(b.Amount), 0
FROM  [ User ] a,ProfitLoss b
WHERE a.UserId  = b.UserId  AND b.TypeId = 0  AND UpdateTime >= ' 2013-08-21 '  AND UpdateTime <= ' 2013-08-21 23:59:59 '
UNION
-- 查询合计
SELECT  ' 合计 ', SUM(b.Amount), 0
FROM  [ User ] a,ProfitLoss b
WHERE a.UserId  = b.UserId  AND b.TypeId = 0  AND UpdateTime >= ' 2013-08-21 '  AND UpdateTime <= ' 2013-08-21 23:59:59 '
-- 对结果集进行排序
ORDER  BY b.Amount  DESC

 

9、使用子查询

 

-- 查询用户财务记录,使用子查询找到高于平均消费的记录
SELECT a.UserName,b.Amount,b.Balance
FROM  [ User ] a,ProfitLoss b
WHERE a.UserId  = b.UserId  AND b.TypeId = 1  AND UpdateTime >= ' 2013-07-21 '  AND UpdateTime <= ' 2013-08-21 23:59:59 '  AND 
b.Amount >=
(
SELECT  AVG(b.Amount)
FROM  [ User ] a,ProfitLoss b
WHERE a.UserId  = b.UserId  AND b.TypeId = 1  AND UpdateTime >= ' 2013-07-21 '  AND UpdateTime <= ' 2013-08-21 23:59:59 '
)

 

10、嵌套子查询(略)

 

11、EXISTS关键字查询

 

-- 以用户登录查询语句为例
declare  @userName  nvarchar( 20)
declare  @passWord  nvarchar( 32)
set  @userName = ' agent '
set  @passWord = ' 30B8CA8354B5AC6542797BFF9623B346 '
if  exists( select  *  from  [ User ]  where UserName = @userName  and Password = @passWord)
     print  ' 1 '
else
     print  ' 0 '

 

12、差查询EXCEPT(略:查询去除基结果集与次结果集的相交记录后的结果集)

 

13、交查询INTERSECT(略:求结果集的交集)

 

 

14、XML查询

 

Create  Table TestXML
(
    ItemId  int  not  null,
     [ Content ] xml
)

insert  into TestXML  VALUES( 1, ' <学生信息><姓名>张三</姓名><年龄>28</年龄><性别>男</性别><班级>云计算一班</班级></学生信息> ')

SELECT  *  FROM TestXML

declare  @xmlData xml
set  @xmlData  = ( SELECT  [ Content ]  from TestXML  where ItemId  =  1)
SELECT  @xmlData.query( ' 学生信息/姓名 'as 姓名, @xmlData.query( ' 学生信息/性别 'as 性别, @xmlData.query( ' 学生信息/班级 'as 班级

 

15、FOR XML子句

 

FOR XML子句

通过FOR XML子句并指定模式可以将从数据库系统的表中检索出来的数据自动表示成XML格式。SQL Server 2005 在之前版本的基础增加了FOR XML子句的功能,添加了多种显示模式,如RAW模式、AUTO模式、EXPLICIT模式和PATH模式等。

 

SELECT a.UserID,a.UserName,b.CompanyName
FROM T_Member a,T_Company b
where a.UserID  = b.UserId
FOR XML  RAW  | AUTO  | EXPLICIT  | PATH

 

RAW:

< row  UserID ="1"  UserName ="Admin"  CompanyName ="**"   />
< row  UserID ="2"  UserName ="Manager"  CompanyName ="**"   />

 

AUTO:
< UserID ="1"  UserName ="Admin" >
   < CompanyName ="**"   />
</ a >
< UserID ="2"  UserName ="Manager" >
   < CompanyName ="**"   />
</ a >

 

PATH:

< row >
   < UserID >1 </ UserID >
   < UserName >Admin </ UserName >
   < CompanyName >** </ CompanyName >
</ row >
< row >
   < UserID >2 </ UserID >
   < UserName >Manager </ UserName >
   < CompanyName >** </ CompanyName >
</ row >

 

转载于:https://www.cnblogs.com/cxmsky/p/3270410.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值