sql多对多关系的两表如何联合查询出所有的结果?
用的数据库是oracle,如果把分页再加上去该怎么写? 展开
1、语句如下:
Select project.*, [contract].* from project
Left join contract_project on project.projectId = contract_project.projectId
Left join [contract] on contract_project.contractId = [contract].contractId
注:contract在Sql server中是关键字,因此使用了中括号。
2、使用Left join
Left join是以左表为准的。换句话说,左表(project)的记录将会全部表示出来,而右表(contract_project)只会显示符合搜索条件的记录
(例子中为: project.projectId = contract_project.projectId)。对于contract表来说,contract_project表是它的左表。
此例以两个left join 将三个表按条件联接在一起。
扩展资料
连接通常可以在select语句的from子句或where子句中建立,其语法格式为:
select colunm_name1,colunm_name2
from table_name1
left join table_name2
on table_name1.colunmname=table_name2.colunmname其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接称为自连接, join_type 为连接类型,可以是left join 或者right join 或者inner join 。
on (join_condition)用来指连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。
参考资料:百度百科 left join
1、语句如下:
Select project.*, [contract].* from project
Left join contract_project on project.projectId = contract_project.projectId
Left join [contract] on contract_project.contractId = [contract].contractId
注:contract在Sql server中是关键字,因此使用了中括号。
2、使用Left join
Left join是以左表为准的。换句话说,左表(project)的记录将会全部表示出来,而右表(contract_project)只会显示符合搜索条件的记录(例子中为: project.projectId = contract_project.projectId)。对于contract表来说,contract_project表是它的左表。
此例以两个left join 将三个表按条件联接在一起。
3、三表联查
实际开发过程中,经常遇到如题中的三表联查的情况。
用户角色 user + userInRole + role
用户部门 user + userInDept +Dept
你只需设置好各表的主键/外键,然后在查询编缉器中加入三个表,它的查询代码会自动生成。
扩展资料:
用普通查询处理三表联查
select * from project,contract_project,[contract]
where project.projectId = contract_project.projectId and contract_project.contractid = contract.contractId
它的基本形式: select * from 表A,表B,表C where 表A.a = 表B.a and 表B.d = 表C.d
注:该结果和两个LEFT JOIN的查询结果稍有不同。当表A在表B中没有相关联的数据时,该条记录将不会被查出,如题中“工程3”这条记录将不能被查出。同样情况也存在表B和表C之间。
参考资料:
select *
from contract_project a
left join project b on a.projectId = b.projectId
left join contract c on a.contractId = c.contractId
前提是contract_project要大而全,包含所有的pid和cid,不然不行