sql多表关联查询

sql多表关联查询,第1张

所有信息,无论你使用什么关联都可以,join/ left join/right join/full join
从你写的表结构看,表D表示个A表、B表、C表的关系(除非表D还有其他三张表没有的信息),不需要加入关联的
select
from A
left join B on A_user_id=B_id
left join C on A_device_id=C_id

select 
 ano as 学生ID
,aname as 学生名字
,csubname as 科目名称
, bscore as 学生成绩
 from A a left join B b on ano = bno left join C on bsubid = csubid

结构化查询语言(StructuredQueryLanguage)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的接口。

结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。

恩,这个有2种写法,一种是:
select aa1,aa2,aa3,bb2,cc2,dd2
from a,b,c,d
where aa1=bb1 and bb1=cc1 and cc1=dd1
第二种是:
select aa1,aa2,aa3,bb2,cc2,dd2
from a inner join b on aa1=bb1
inner join c on bb1=cc1
inner join d on cc1=dd1
楼主2种都试一下,有啥问题,在联系!
补充:
可以不用括号的,就是inner join 是在sql server 2000 中的用法,用第一种也是可以的。

四张表联合查询呗。
假设四张表为A,B,C,D
你要查A表某时间段内的ID,在BCD三张表内的数据。
那么有一个问题,就是你要的是什么结果,三张表的字段一样吗?
如果三张表的字段一样,那么就一张一张查,然后union all就可以了。
如果不是而是要的B的一个字段,C表的几个字段,D表的几个字段,那么就是四张表联合查询就可以了,只是where后面的条件写的多一些。
比如
where aid=XXXXX(子查询) and aid=bid and bid=cid and cid=did and aid=cid and aid=did and bid=did
说白了就是为了保险起见,你要写6个,两两都相等,这样就绝对不会有问题(其实写4个(分别和aid相等),或者递归相等可能也对,但是写六个绝对不会有错,所以我就写了六个,具体的写法要只能去试),前面的select就是aid ,b某某字段,c某某字段,XXXXXXX之类的就可以了

select
userId,,realName,mark,courseName,grade,Sumgrade
from
(select
userId,realName,mark
from
A
join
B
on
AUserId=BUserId)
one
join
(select
userId,
courseName,grade
from
C
join
D
on
CcourseId=DcourseId)
two
on
oneuserId=twouserId

可以用谓词或联结实现:

连接实现:

selectfrombjoinaonbid=aidwhereab=21

联结实现的条件是两表id来自同一值域,表示意义相同在连接时其实两可以作成一个表的:

也就是

id,ab,ac,bbbc

但由于空值的问题,导致了部分依赖所以才会拆分成两个表的

使用谓词实现:

selectfrombwhereidin(selectidfromawhereab=21)

这个可以实现两表id来自同一值域,但表示意义不同的情况也就是说两表中的id有无关性

相比较而言,连接的方式更快一些,但这种情况是两表来自同一值域,且意义相同,如果不是这种情况,可能得不到你正确的值的而使用谓词不管意义是否相同,都可以得到正确的值

玩数据库必须知道这两个表是否具有相关性,也就是设计时的意义,否则优化词句什么的都没有办法去做的!

有几种方式可以实现你的这个需求

1使用表关联

SELECTFROM表2JOIN表1ON(表2ID=表1列1);

2使用IN

SELECTFROM表2WHEREIDIN(SELECT列1FROM表1);

3使用EXISTS

SELECTFROM表2

WHEREEXISTS(SELECT1FROM表1WHERE表2ID=表1列1);

selectfromt2leftjoint1ont2ID=t1列1wheret1需要啥条件andt2需要啥条件

selectfrom表2where某列in(select列1from表1)andid=1

用最简单的C/S架构去做,百度一下教程大把。可以用 access数据库+IIS网页服务端+net服务端开发做。我也是新手,前不久做过这样的小项目,花了两三天做完了,部署在企业内网的,数据查询系统。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13396200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-28
下一篇 2023-07-28

发表评论

登录后才能评论

评论列表(0条)

保存