SQL server数据库里查询时新建查询怎么进行多表查询?
5个回答
展开全部
首先要检查你的表与表之间是不是有约束(主外键约束),如果存在,才可以像 上面这位朋友的方式进行连接,一般连接有左连接、右连接、内连接,下面给你举例:
----做笛卡尔积
select s.id,s.name,sc.id,sc.sname,sc.score from infom s ,score sc
------内连接 写法一
select s.id,s.name,sc.id,sc.sname,sc.score
from infom s ,score sc inner join score sc
on s.id= sc.id ------内连接的条件
------on s.id <>sc.id --------是全集 - 交集
------where sc.score>80
------内连接 方法二
select s.id,s.name,sc.id,sc.sname,sc.score
from infom s ,score sc
where s.id= sc.id
------
-------------------------------------------------------外连接 左连接
--------------左表数据完全显示,右表中相同的数据显示,不同数据null
select Student.name,score.score
from Student left join score -----------------先写的为左表
on Student.id=score .id -----------------连接条件
-------------------------------------------------------外连接 右连接
--------------右表数据完全显示,左表中相同的数据显示,不同数据显示null
select Student.name,score.score
from Student right join score
on Student.id=score .id
-------------------------------------------------------全连接 full join
-------------------------------------------------------左、右表的数据完全显示,相同的数据显示一次
select Student.name,score.score
from Student full join score
on Student.id=score .id
-------------------------------------------------------交叉联接
------------------------------------------交叉联接得到的是两表联接所有的数据组合
------------------------------------------(A表的数据记录* B 表的数据记录)
-------------------------------------------方式一
select Student.*,score.* from Student,score
-------------------------------------------方式二
select score .*,Student.* from Student
cross join score
-----------------------------------------------------多表联接
--------------------------------------要求查出张三 C#的考试成绩,涉及student,score,subject三个表
---------方式一:
select student.name,subject.sname ,score .score
from Student
inner join score
on student.id= score.id
inner join subject
on score.id=subject.id
where Student.name='张三' and subject.sname='C#'
---------方式二:等值联接
select student.name,subject.sname ,score .score
from Student,score ,subject
where StudentDB.id=score.id and score .id=subject.id
and Student.name='张三' and subject.sname='C#'
----做笛卡尔积
select s.id,s.name,sc.id,sc.sname,sc.score from infom s ,score sc
------内连接 写法一
select s.id,s.name,sc.id,sc.sname,sc.score
from infom s ,score sc inner join score sc
on s.id= sc.id ------内连接的条件
------on s.id <>sc.id --------是全集 - 交集
------where sc.score>80
------内连接 方法二
select s.id,s.name,sc.id,sc.sname,sc.score
from infom s ,score sc
where s.id= sc.id
------
-------------------------------------------------------外连接 左连接
--------------左表数据完全显示,右表中相同的数据显示,不同数据null
select Student.name,score.score
from Student left join score -----------------先写的为左表
on Student.id=score .id -----------------连接条件
-------------------------------------------------------外连接 右连接
--------------右表数据完全显示,左表中相同的数据显示,不同数据显示null
select Student.name,score.score
from Student right join score
on Student.id=score .id
-------------------------------------------------------全连接 full join
-------------------------------------------------------左、右表的数据完全显示,相同的数据显示一次
select Student.name,score.score
from Student full join score
on Student.id=score .id
-------------------------------------------------------交叉联接
------------------------------------------交叉联接得到的是两表联接所有的数据组合
------------------------------------------(A表的数据记录* B 表的数据记录)
-------------------------------------------方式一
select Student.*,score.* from Student,score
-------------------------------------------方式二
select score .*,Student.* from Student
cross join score
-----------------------------------------------------多表联接
--------------------------------------要求查出张三 C#的考试成绩,涉及student,score,subject三个表
---------方式一:
select student.name,subject.sname ,score .score
from Student
inner join score
on student.id= score.id
inner join subject
on score.id=subject.id
where Student.name='张三' and subject.sname='C#'
---------方式二:等值联接
select student.name,subject.sname ,score .score
from Student,score ,subject
where StudentDB.id=score.id and score .id=subject.id
and Student.name='张三' and subject.sname='C#'
展开全部
这位朋友你好!多表查询主要用JOIN(里面又分为LEFT JOIN左连接 和RIGHT JOIN右连接 、JOIN等)
1、一般左连接用得多;SELECT 要显示的字段 FROM 表1
LEFT JOIN 表2 ON 表1.关联字段=表2.关联字段
注:如果还有下表同理写作(后面也可以是右连接等)
2、还有一种全表连接;比如要查询进退货明细表(在数据库可能是两表)
SELECT 两表相似字段 FROM 进货表
UNION ALL
SELECT 两表相似字段 FROM 退货表
注:这种UNION ALL 表示所有的;如果不加ALL是重复的就不显示了。
用得最多的大概就是这两种多表查询的了(当然如果对语言不熟悉,可以利用视图来做,视图是可视化的操作;而且视图的代码也相对来说比较标准的,这也是学习一种方法)
1、一般左连接用得多;SELECT 要显示的字段 FROM 表1
LEFT JOIN 表2 ON 表1.关联字段=表2.关联字段
注:如果还有下表同理写作(后面也可以是右连接等)
2、还有一种全表连接;比如要查询进退货明细表(在数据库可能是两表)
SELECT 两表相似字段 FROM 进货表
UNION ALL
SELECT 两表相似字段 FROM 退货表
注:这种UNION ALL 表示所有的;如果不加ALL是重复的就不显示了。
用得最多的大概就是这两种多表查询的了(当然如果对语言不熟悉,可以利用视图来做,视图是可视化的操作;而且视图的代码也相对来说比较标准的,这也是学习一种方法)
追问
你也学过数据库?能否留下qq或是其他联系方式。此谢!
追答
2017699681
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先要检查你的表与表之间是不是有约束(主外键约束),如果存在一般连接有左连接、右连接、内连接,下面给你举例:
----做笛卡尔积
select s.id,s.name,sc.id,sc.sname,sc.score from infom s ,score sc
------内连接 写法一
select s.id,s.name,sc.id,sc.sname,sc.score
from infom s ,score sc inner join score sc
on s.id= sc.id ------内连接的条件
------on s.id <>sc.id --------是全集 - 交集
------where sc.score>80
------内连接 方法二
select s.id,s.name,sc.id,sc.sname,sc.score
from infom s ,score sc
where s.id= sc.id
-------------------------------------------------------外连接 左连接
--------------左表数据完全显示,右表中相同的数据显示,不同数据null
select Student.name,score.score
from Student left join score -----------------先写的为左表
on Student.id=score .id -----------------连接条件
-------------------------------------------------------外连接 右连接
--------------右表数据完全显示,左表中相同的数据显示,不同数据显示null
select Student.name,score.score
from Student right join score
on Student.id=score .id
-----------------------------------全连接 full join
-----------------------------------左、右表的数据完全显示,相同的数据显示一次
select Student.name,score.score
from Student full join score
on Student.id=score .id
-------------------------------交叉联接
---------------------------------交叉联接得到的是两表联接所有的数据组合
------------------------------------------(A表的数据记录* B 表的数据记录)
---------------------方式一
select Student.*,score.* from Student,score
------------------------方式二
select score .*,Student.* from Student
cross join score
-------------------------------多表联接
-----------要求查出张三 C#的考试成绩,涉及student,score,subject三个表
---------方式一:
select student.name,subject.sname ,score .score
from Student
inner join score
on student.id= score.id
inner join subject
on score.id=subject.id
where Student.name='张三' and subject.sname='C#'
---------方式二:等值联接
select student.name,subject.sname ,score .score
from Student,score ,subject
where StudentDB.id=score.id and score .id=subject.id
and Student.name='张三' and subject.sname='C#'
----做笛卡尔积
select s.id,s.name,sc.id,sc.sname,sc.score from infom s ,score sc
------内连接 写法一
select s.id,s.name,sc.id,sc.sname,sc.score
from infom s ,score sc inner join score sc
on s.id= sc.id ------内连接的条件
------on s.id <>sc.id --------是全集 - 交集
------where sc.score>80
------内连接 方法二
select s.id,s.name,sc.id,sc.sname,sc.score
from infom s ,score sc
where s.id= sc.id
-------------------------------------------------------外连接 左连接
--------------左表数据完全显示,右表中相同的数据显示,不同数据null
select Student.name,score.score
from Student left join score -----------------先写的为左表
on Student.id=score .id -----------------连接条件
-------------------------------------------------------外连接 右连接
--------------右表数据完全显示,左表中相同的数据显示,不同数据显示null
select Student.name,score.score
from Student right join score
on Student.id=score .id
-----------------------------------全连接 full join
-----------------------------------左、右表的数据完全显示,相同的数据显示一次
select Student.name,score.score
from Student full join score
on Student.id=score .id
-------------------------------交叉联接
---------------------------------交叉联接得到的是两表联接所有的数据组合
------------------------------------------(A表的数据记录* B 表的数据记录)
---------------------方式一
select Student.*,score.* from Student,score
------------------------方式二
select score .*,Student.* from Student
cross join score
-------------------------------多表联接
-----------要求查出张三 C#的考试成绩,涉及student,score,subject三个表
---------方式一:
select student.name,subject.sname ,score .score
from Student
inner join score
on student.id= score.id
inner join subject
on score.id=subject.id
where Student.name='张三' and subject.sname='C#'
---------方式二:等值联接
select student.name,subject.sname ,score .score
from Student,score ,subject
where StudentDB.id=score.id and score .id=subject.id
and Student.name='张三' and subject.sname='C#'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
点了新建查询后。直接写关联语句 进行多表查询就可以。语法无非是使用 left join 、right join 、inner join 这些去关联相关表查询。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询