不用非得相同的字段,但是字段和字段之间需要有一致性才可以的
select aid,bname,csex from a inner join b on aid=bid inner join c on aid=cid
以上,希望对你有所帮助
数据库多表关联:
在关系型数据库中,多表关联方式是影响性能最大的技术,把mysql定义为中小型数据库的主要原因是mysql是不支持hash join的,这对多个大表关联查询造成性能的瓶颈,因此,在大数据领域,比较少使用mysql作为后台数据库,使用mysql,需要把表设计为宽表,进行反范式设计,减少多表关联,虽然单表的数据量大了,但是查询速度快了非常多,从几十秒降到1秒左右,1秒对大数据应用是可以接受的,在oltp应用是不可接受,因此,在oltp应用数据库会进行分库分表设计,这属于垂直拆分,按照业务类型进行拆分多个实例和分库,这属于水平拆分,目标是实现轻数据库重业务模式,很多运算需要放到应用代码执行,这也是基于数据库是CS结构,而业务代码是分布式结构的属性。
例如表a,b,c同时进行内连接,连接的key都是id字段
select
from a inner join b on aid = bid
inner join c on bid = cid
其他情况如此类推,关键是看你的连接关系和连接的关键字
可以用谓词或联结实现:
连接实现:
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
以上就是关于关于SQL中多表连接的问题:3个表以上,请举例说明。全部的内容,包括:关于SQL中多表连接的问题:3个表以上,请举例说明。、数据库多表关联问题、如何用sql语句编辑数据库多表连接等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)