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语句怎么写?
连接查询分类:
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