当前位置:首页 » 数据仓库 » 数据库多表查询
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库多表查询

发布时间: 2022-01-14 00:21:21

sql数据库 多表查询

可以有两种处理方法,
1、两表先合并,后求和
select 日期,sum( 数值) as 数值 from
( select 日期, 金额 as 数值 from A表
union all
select 日期,数量 as 数值 from B表 )
group by 日期
2、先求和后合并,再求和
select 日期,sum( 数值) as 数值 from
( select 日期, sum(金额) as 数值 from A表 group by 日期
union all
select 日期,sum(数量) as 数值 from B表 group by 日期 )
group by 日期

对于“如果要实现总和的相乘、相除,或者相减得话,应该怎么写呢?”,你得提出明确需求,那后才能设计。

如果 是相乘、相除,或者相减,得有条件,还像上面,用日期关联,A表 - B表,

A表求和:select 日期,sum(金额) as 数值 from A表 group by 日期
B表求和:select 日期,sum(数量) as 数值 from B表 group by 日期

在执行 A表 - B表 时,由于用日期关联,则某一日期对应的记录可能会产生三种情况: A表B表都有;A表有B表无;A表无B表有。

1、需要先找出所有日期,

select 日期 from A表
union
select 日期 from B表

2、对于A表中所有数据以上表中日期为依据构造所有相关日期数据,如果有日期数据,则为原数据,否则为0。

select a.日期 as 日期,
case when b.数值 is NULL then b.数值 else 0 end as 数值
from
( select 日期 from A表
union
select 日期 from B表 ) a
left join
( select 日期,sum(金额) as 数值 from A表 group by 日期 ) b
on a.日期 = b.日期

3、同样对于B表也如此。

4、2表相减即得。

select a3.日期 as 日期, a3.数值 - b3.数值 as 数值
from
(
select a1.日期 as 日期,
case when b1.数值 is NULL then b1.数值 else 0 end as 数值
from
( select 日期 from A表
union
select 日期 from B表 ) a1
left join
( select 日期,sum(金额) as 数值 from A表 group by 日期 ) b1
on a1.日期 = b1.日期
) a3 ,
(
select a2.日期 as 日期,
case when b2.数值 is NULL then b2.数值 else 0 end as 数值
from
( select 日期 from A表
union
select 日期 from B表 ) a2
left join
( select 日期,sum(金额) as 数值 from B表 group by 日期 ) b2
on a2.日期 = b2.日期
) b3

where a3.日期 = b3.日期

当然,以上只是一种方法,还有其他方法也可以实现,尽供参考。

㈡ 在SQL中如何进行多表查询

要想多表查询,是有条件的。一般是几张表结构相似或者是有一样的ID号关联。例如:
select * from 表1,表2,表3 这是把3张表结果全部查出来
select * from 表1 where not exists(select 0 from 表2 where
表1.id=表2.id)

㈢ sql 多表查询,数据表如下,

1.select学号,姓名fromTable_stustujoinTable_Scsconstu.no=sc.no
joinTable_Courseconc.number=sc.numberwhere课程名='JAVA'

2.select课程名fromTable_stustujoinTable_Scsconstu.no=sc.no
joinTable_Courseconc.number=sc.numberwhere姓名='依依'

3.select学号,姓名fromTable_stustujoinTable_Scsconstu.no=sc.no
joinTable_Courseconc.number=sc.numbergroupby学号,姓名
havingcount(学号)=5

4.selecttop5*fromTable_Sc

5.selecttop5*fromTable_ScwhereNOnotin
(selecttop5NOfromTable_Scorderbychenji)orderbychenji

6.selectname,class,max(chenji)fromTable_stustu
joinTable_Scsconstu.no=sc.no
joinTable_Courseconc.number=sc.number
groupbyname,class

7.selectgetdate()

没有测试,只是凭你的问题和图片写出。可能你需要修改。

㈣ Sql多表查询,怎么做

根据你的查询结果要求,可以根据一下几个步骤确定多表查询语句的写法:
1、要显示所有学生信息、班级、年级等信息,则需以主表1为主记录,其他表通过外连接的方式进行关联;
2、LEFT JOIN 关键字会从左表那里返回所有的行,即使在右表中没有匹配的行,确定主表之后,其他关联表使用LEFT JOIN;
3、拼接SQL语句,需要确定关联字段主表1与表2的关联为主表1.studentid=表2.studentid,
主表1与表3的关联为主表1.gradId=表3.gradId,主表1与表4的关联为主表1.classId=表4.classId
4、具体语句为:
SELECT 表1.ID, 表2.STUDENTNAME,表3.GRADNAME,表4.CLASSNAME
FROM 表1

LEFT JOIN 表2 ON 表1.STUDENTID = 表2.STUDENTID
LEFT JOIN 表3 ON 表1.GRADID = 表3.GRADID
LEFT JOIN 表4 ON 表1.CLASSID= 表4.CLASSID

㈤ 数据库多表查询

我们通常使用的表之间的联接是等值联接;你的情况需要使用外联接来做。
我按照你的意思分别见了table1,table2,table0(对应你的table表),并把你的数据也增加进去了。
执行下面的SQL可能会得到你想要的结果:
(selecttable1.hm,table1.no1,table2.(table1.hm=table2.hm)wheretable1.hmisnotnull)
union
(selecttable2.hm,table1.no1,table2.(table1.hm=table2.hm)wheretable2.hmisnotnull)
输出结果如下:
希望是你想要的!
刚才没用到table0表,如果保证hm的值必须在table0中,如要修改上面的SQL如下:
select*from(selecttable1.hmashm,table1.no1,table2.(table1.hm=table2.hm)wheretable1.hmisnotnull
union
selecttable2.hmashm,table1.no1,table2.(table1.hm=table2.hm)wheretable2.hmisnotnull)astwheret.hmin(selecthmfromtable0)
这样,当table1,table2中的hm值不在table0表中,查询结果就不会出现。
外联接,包括左外联接、右外联接、全外联接的确大多数的程序员都不使用。宁肯用很长的程序代码来实现,但是用数据库sql来实现其实效率是最快的。
建议你了解外联接的知识。

㈥ SQL如何实现多表查询

大体上的方法有两种
(1)联合查询
select dbo.vipcard.cardno,........,dbo.viptype.typename as cardtype from dbo.vipcard inner join dbo.viptype on dbo.vipcard.cardtype=dbo.viptype.ctypeid
(2)子查询
select dbo.vipcard.cardno,........,(select typename from viptype where dbo.vipcard.cardtype=dbo.viptype.ctypeid) as cardtype from dbo.vipcard

㈦ SQL多表查询语句怎么写

SQL多表查询语句的步骤如下:

我们需要准备的材料分别是:电脑、sql查询器。

1、首先,打开sql查询器,连接上相应的数据库表,例如m1表和m2表。

㈧ sql数据库多表查询

1.

select
st.StudentNumber,
st.Name,
count(*)
from
studentst,
sbooksk
where
st.StudentNumber=sk.StudentNumber
andto_char(sk.BorrowingTime,'yyyy')='2008'
groupby
st.StudentNumber,
st.Name

2.

select
b.BookNumber,
b.BookName,
st.Name,
sk.BorrowingTime,
sk.ShouldReturnTime
from
studentst,
sbooksk,
bookb
where
st.StudentNumber=sk.StudentNumber
andsk.BookNumber=b.BookNumber
andmonth(sk.BorrowingTime)=month(sysdate)

3.

CreateviewyourViewNameas
select
b.BookNumber,
b.BookName,
st.Name,
sk.BorrowingTime,
sk.ShouldReturnTime
from
studentst,
sbooksk,
bookb
where
st.StudentNumber=sk.StudentNumber
andsk.BookNumber=b.BookNumber
andmonth(sk.BorrowingTime)=month(sysdate)

没运行过可能有点问题

㈨ 数据库 多表联合查询

oralce么?
select A.姓名,A.电话,wm_concat(B.卡号) 卡号 from 表A A,表B B where A.姓名=B.姓名 group by A.姓名,A.电话