多表联合查询语句怎么写?

A表:ID,name
B表:ID,name,A_ID(与A表是多对一关联关系)
C表:ID,name,B_ID(与B表是多对一关联关系)
我要级联的查询出全部数据,比如1个A对应3个B,1个B对应3个C,我要查出这13条记录,sql语句怎么写?

Select *--只查a用a.*,只要b用b.*,只要c用c.*
From A as a 
Inner Join B as b On a.ID=b.A_ID
Inner Join C as c On b.ID=c.B_ID

 

连接查询分类:
1.自连接查询,对同一个表进行连接操作(可以理解为两个不同表的内连接,有时可与嵌套查询等价)
2.内连接查询,<又分为:自然连接、等值连接、不等值连接三种>
3.外连接查询,<又分为:左外连接、右外连接、全外连接三种>
4.交叉连接查询,也作无条件查询。
5.联合查询



多表连接查询(内,外,交叉连接)

连接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系数据库查询最主要的特征.
select 表1.字段名1,表2.字段名2,... 
from 表1,表2
where 连接条件
SQL-92标准所定义的FROM子句的连接语法格式为: 
FROM 表名 join_type 表名 [ON (连接条件)]
连接操作中的ON (连接条件) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构
成。 

资料:

www.cnblogs.com/gaiyang/archive/2011/04/12/2013168.html

追问

只知道A的id怎么写?

追答

没太明白,意思是根据a的id作为查询条件?

Select * From A as a
Inner Join B as b On a.ID=b.A_ID And a.ID='2'--假设a的ID是2
Inner Join C as c On b.ID=c.B_ID

如果不是这个,就给出详细点的描述

追问

是这个意思,根据A的id做为查询条件。
我希望的结果是:13条记录
A一条:id=2
B三条:根据A的id=2查出3条。
C九条:根据三条B的id查出9条。
我刚才用你教的语句只返回9条记录。
我希望得到的是:多少个B,分别是哪几个;多少个C,分别是哪几个。

追答

- - ! 好怪异的需求,你这不叫表连接了,叫作表拼接,我说的那种才是表连接

Select c.ID,c.Name From C as c Inner Join B as b on b.A_ID=2 And b.C_ID=c.ID
Union All Select ID,Name From B Where A_ID=2
Union All Select ID,Name From A Where ID=2
--13条

追问

感谢回答!
b.C_ID=c.ID

这句不大明白,B表只有a_id,没有c_id。

追答

额 ,记错,疏忽了
改下
Select c.ID,c.Name From C as c Inner Join B as b on b.A_ID=2 And b.ID=c.B_ID
Union All Select ID,Name From B Where A_ID=2
Union All Select ID,Name From A Where ID=2

温馨提示:答案为网友推荐,仅供参考
相似回答