① sql多对多关系的两表如何联合查询出所有的结果
1、语句如下:
Select project.*, [contract].* from project
Left join contract_project on project.projectId = contract_project.projectId
Left join [contract] on contract_project.contractId = [contract].contractId
注:contract在Sql server中是关键字,因此使用了中括号。
2、使用Left join
Left join是以左表为准的。换句话说,左表(project)的记录将会全部表示出来,而右表(contract_project)只会显示符合搜索条件的记录
(例子中为: project.projectId = contract_project.projectId)。对于contract表来说,contract_project表是它的左表。
此例以两个left join 将三个表按条件联接在一起。
(1)sqlserver2008联合查询扩展阅读
连接通常可以在select语句的from子句或where子句中建立,其语法格式为:
selectcolunm_name1,colunm_name2
fromtable_name1
leftjointable_name2
ontable_name1.colunmname=table_name2.colunmname其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接称为自连接, join_type 为连接类型,可以是left join 或者right join 或者inner join 。
on (join_condition)用来指连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。
② sql server 数据库联合查询、并汇总 去重
--你要汇总的是c.num这个字段吧,可以用groupby分类汇总,sum(c.num)
③ sql server怎么把多个查询结果关联起来
select * from a left join B on a.id=b.id where b.id is null --a的id 不在b表中的
同理
select * from b left join a on a.id=b.id where a.id is null --b的id不在a表中的
④ 紧急求助:关于SQL SERVER的联合查询
用UNION ALL 将两张表合并为一个结果集
select idtype,code,name,qty,price,zj
from 销售表
union all
select idtype,code,name,qty,price,zj
from 退货表
如果1表示销售出去的商品,-1表示退回的商品那么
求销售总计的语句是
select sum(idtype*zj ) as 销售总计
from
(
select idtype,code,name,qty,price,zj
from 销售表
union all
select idtype,code,name,qty,price,zj
from 退货表
) a
⑤ 在SQL Server 2008中,怎样进行多表联合查询还有那个group by到底有什么作用要详细的解答和例子!谢了
group by 是用来分组查询的,例如部门和雇员之间用一个外键连接着,在查询雇员时可以用部门的ID来分组查询
select avg(salary) from employee group by deptno;
这句就是用来按部门编号查询每个部门员工平均薪水
⑥ SQL Server两表联合查询问题
declare @tab1 table (id int,value nvarchar(20) null)
declare @tab2 table (id int,value nvarchar(20))
insert into @tab1
select 1,'1'
union
select 2,'2'
union
select 3,null
union
select 4,'3'
insert into @tab2
select 1,'A'
union
select 2,'B'
union
select 3,'C'
update a set a.value=b.value
from @tab1 a
left join @tab2 b
on convert(int,a.value)=b.id
where convert(int,a.value)=b.id
select * from @tab1
⑦ SQL 选择性联合查询
创建表及插入数据
createtablea
(datevarchar(10),
namevarchar(1),
markint)
insertintoavalues('2014/12/1','A',5)
insertintoavalues('2014/12/1','B',2)
insertintoavalues('2014/12/1','C',5)
insertintoavalues('2014/12/2','A',4)
insertintoavalues('2014/12/2','B',6)
insertintoavalues('2014/12/2','C',6)
insertintoavalues('2014/12/3','A',9)
insertintoavalues('2014/12/3','B',8)
createtableb
(datevarchar(10),
qtyint)
insertintobvalues('2014/12/1',1111)
insertintobvalues('2014/12/2',5123)
insertintobvalues('2014/12/3',4532)
执行
selectt1.date,t1.name,t1.mark,t2.qty
from
(selecta.*,ROW_NUMBER()over(partitionbydateorderbyname)rnfroma)t1
leftjoin(selectb.*,1rnfromb)t2
ont1.date=t2.dateandt1.rn=t2.rn
结果截图
以上环境为sqlserver2008r2,你sqlserver2005以上版本或oracle10g以上版本应该都没问题
⑧ SQLSERVER中两个表联合条件查询,子查询较多,烦请大神出手看看这条SQL该怎么改执行效率可以高
楼主好,这样写确实是耽误效率。根据楼主的要求,其实可以先全部关联,然后where筛选后在外围汇总。具体SQL如下:
selecta.id,a.uName,
sum(casewhenb._type=1andS=2thens1else0end)asa,
sum(casewhenb._type=1andS=2thens2else0end)asb,
sum(casewhenb._type=2andS=2thens1else0end)asc,
sum(casewhenb._type=2andS=2thens2else0end)asd,
sum(casewhenb._type=3andS=2thens1else0end)ase,
sum(casewhenb._type=3andS=2thens2else0end)asf,
from_Usera
join_Taskbona.id=b._User
wherea.T=1
groupbya.id,a.uName
这样效率应该会高一些。
⑨ SQL Server中三个表两两关联 怎么实现查询急!!
select a.*
from 学员表 a
inner join 校区表 b on a.所在学校=b.所在学校
inner join 管理员表 c on b.区域=c.区域
where c.用户名=@用户名 and c.密码=@密码
注意:最好把登陆和列表查询分开来做,因为无论是从安全还是程序实现的角度来看,都比较好。
查询语句:
SELECT p.id, p.url, p.description, GROUP_CONCAT(f.`name`)
from tb_pic p, tb_pic_flag_link l, tb_flag f
where p.id = l.pic_id and l.flag_id=f.id GROUP BY p.id;