sqlserver关联查询
❶ sqlserver中的关联查询问题
sql server 本省对语句就有自动优化功能, 第一个里边where语句相当于join on 来操作的
这样看来两个的效率基本上是一样的,你可以做两个表试一试。但是join的写法有助于你的编写语法检查,和易读性
❷ sql 两张表 关联查询
sqlserver下,表数据
createtablea
(idint,
namevarchar(10),
notevarchar(10))
insertintoavalues(1,'A','AAA')
insertintoavalues(2,'B','BBB')
insertintoavalues(3,'C','CCC')
insertintoavalues(4,'D','DDD')
createtableb
(idint,
namevarchar(10),
[key]int,
varvarchar(10))
insertintobvalues(1,'A',1,'AA')
insertintobvalues(1,'A',2,'BB')
insertintobvalues(2,'B',1,'CC')
insertintobvalues(2,'B',2,'DD')
insertintobvalues(3,'C',1,'EE')
insertintobvalues(3,'C',2,'FF')
insertintobvalues(4,'D',1,'GG')
insertintobvalues(4,'D',2,'HH')
执行:
selecta.id,a.name,max(casewhenb.[key]=1thenb.varend)key1,max(casewhenb.[key]=2thenb.varend)key2,a.note
froma,bwherea.id=b.id
groupbya.id,a.name,a.note
结果:
其他数据库语法基本一致
❸ sqlserver多表联合查询
select a.a_name as 名字,count(b.a_id) as 数量 from a inner join b on a.a_id = b.a_id group by a.a_name
名字 数量
me 3
wo 1
he 1
select a.a_name as 名字,count(b.a_id) as 数量 from a left join b on a.a_id = b.a_id group by a.a_name
名字 数量
me 3
wo 1
he 1
she 0
our 0
❹ 关于sqlserver 多个结构相同表联查的问题
写个分页的存储过程吧,然后把你的union all语句做为查询语句放进去,在应用中也不可能一下将几百万条数据查出来添加到容器中对吧?下边是我写的一个分页查询的例子,你可以参考一下:
(在你的查询语句中不要写排序的字段,将要排序的字段名称作为参数传进去)
USE [SuiyiPlatform201100905]
GO
/****** Object: StoredProcere [dbo].[SP_BM_BD_LPQ_SearchDataForPage] Script Date: 12/27/2011 12:47:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procere [dbo].[SP_BM_BD_LPQ_SearchDataForPage]
@QueryStr nvarchar(max),
@OrderBy nvarchar(100),
@PageIndex INT,
@PageSize int,
@RowCount INT OUTPUT
AS
BEGIN
declare @sqlstring nvarchar(max),@sqlCount int,@pagebegin nvarchar(15),@pageend nvarchar(15)
--查询总量,开始页数,结束页数,
--开始页数
set @pagebegin=CAST(((@PageIndex-1)*@PageSize+1) as nvarchar(15))
--结束页数
set @pageend=CAST((@PageIndex*@PageSize) as nvarchar(15))
SET @sqlstring='select * ,Row_Number()over(order by '+@OrderBy +' desc ) as rowNum from ( '+@QueryStr +' ) as tem '
declare @tStr nvarchar(max)
set @tStr = 'select @RowCount = Count(0) from ('+@sqlstring+') as counts '
EXEC SP_EXECUTESQL @tStr,N'@RowCount INT OUTPUT',@RowCount OUTPUT
set @sqlstring='select * from ( '+@sqlstring+' ) as endResult where rowNum between '+@pagebegin+' and '+@pageend
exec(@sqlstring)
END
❺ SQLSERVER 两表关联查询分页显示 SQL语句
如果你用的是SQL2008以后的数据库版本,可以这样
SELECT
ROW_NUMBER()
OVER
(ORDER
BY
B.HID
DESC)
BH,
B.*
FROM
(SELECT
h.[医院名称],k.[科室名称],k.[科室编号],k.id,k.kid
from
[医院表]
as
h
right
join
[科室表]
as
k
on
k.hid
=
h.hid
)
B
WHERE
BH
BETWEEN
($page_size
*
$page_num)
AND
($page_size
*
$page_num
+$page_size)
❻ sqlserver怎么连接两个不同的数据库里面的两个不同的表进行关联查询,两个数据库不在同一个服务器
这个简单,使用sqlserver的 OPENDATASOURCE 函数,开启另外一个数据库的临时链接就可以了。不过那台服务器的数据库必须开启了IP访问。
❼ sqlserver两表关联查询,表a有字段a1,a2,a3。表b有字段b1,b2,b3。
if (object_id('tgr_update', 'TR') is not null)
drop trigger tgr_update
go
create trigger tgr_clasupdate' B
for update
as
declare @A1 int, @newB1 int;
--更新前的数据
select @oldnewB1=b1,@A1=a1 From inserted
if (@olnewB1==1)
begin
--更新后的数据
update A set A2= 1 where A1 = @A1
end
go