sqlalchemy多表联合查询的左链接、右链接等使用

 #按用户名摸糊查询
trans_details.query.join(Uses).filter(Users.username.like('%xx%'))
#select xxx from trans_details inner join trans_details on users.id=trans_details.user_id where users.username like '%xx%'python

#左外联接(left join)
trans_details.query.outerjoin(Uses).filter(Users.username.like('%xx%'))
#select xxx from trans_details left outer join trans_details on users.id=trans_details.user_id where users.username like '%xx%'session

#以上是已经设置好外键,它自动找到关联的字段.也能够本身指定:
trans_details.query.join(Uses,trans_details.user_id==Users.id).filter(Users.username.like('%xx%'))
#select xxx from trans_details inner join trans_details on users.id=trans_details.user_id where users.username like '%xx%'spa

#另一个更复杂的例子:
q=db.session.query(Credit_bills_details.no,Credit_bills_details.amount,Cards.no).outerjoin(Card_trans_details,
Credit_bills_details.no==Card_trans_details.trans_no).join(Cards,Card_trans_details.to_card_id==Cards.id)\
.filter(Credit_bills_details.credit_bill_id==3)
 调试

#SELECT credit_bills_details.no AS credit_bills_details_no, credit_bills_details.amount AS credit_bills_details_amount, cards.no AS cards_no
# FROM credit_bills_details LEFT OUTER JOIN card_trans_details ON credit_bills_details.no = card_trans_details.trans_no INNER JOIN cards
# ON card_trans_details.to_card_id = cards.id  WHERE credit_bills_details.credit_bill_id = %scode

 

with session() as s:
	machineList = s.query(OnlinePerfMachine, MachineUsed, OnlinePerfProject).\
		outerjoin(MachineUsed, OnlinePerfMachine.machine_id==MachineUsed.machine_id).\
		outerjoin(OnlinePerfProject, OnlinePerfProject.project_id==MachineUsed.perf_project_id).all()

等价于:blog

SELECT xxx  FROM online_perf_machine LEFT OUTER JOIN machine_used ON online_perf_machine.machine_id = machine_used.machine_id LEFT OUTER JOIN online_perf_project ON online_perf_project.project_id = machine_used.perf_project_idit

上面语句的调试信息:io

 

在查询结果里显示query()括号里的内容,所以,你能够在查询结果里获得匹配的某个表某些字段的信息、几个表的信息、几个表的某些字段的信息,好比class

一、匹配到的Table1的全部字段信息sed

二、匹配到的Table一、Table2的全部字段的信息

三、匹配到的Table1.column一、Table1.column二、Table2.column一、Table2.column4这些字段的信息

 

 

select * from student,grade WHERE student.no = grade.no ---普通的where语句

 

select * from student inner join grade on student.no = grade.no    ---内链接语句

select * from student left join grade on student.no = grade.no    ---左链接语句

select * from student right join grade on student.no = grade.no    ---右链接语句

select * from student full join grade on student.no = grade.no    ---全链接语句

总结:

从上面例子能够看出:

内链接和咱们平时所用的where语句效果一致,即两个表的共同的部分

外链接包括(左链接、右链接)

左链接,即已左边的表为主表,右边的表为副表,将主表中须要的字段所有列出,而后将副表中的数据按照查询条件与其对应起来,

右链接则相反。

全链接,则是将两个表的须要的字段的数据全排列。---我这边实际上报错

 

参考:http://www.codexiu.cn/python/blog/727/

相关文章
相关标签/搜索