#按用户名摸糊查询
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%'

#左外联接(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%'

#以上是已经设置好外键,它自动找到关联的字段.也可以自己指定:
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%'

#另外一个更复杂的例子:
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 = %s

附录:

SQl内,外,左,右,全连接

表结构:

student

no

name

1

a

2

b

3

c

4

d

   

grade

no

grade

1

90

2

80

3

85

3

95

   

运行语句如下

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语句

no      name      no       grade

1         a            1          90

2         b            2          80

3         c            3           85

3         c            3           90

内连接语句

no      name       no     grade

1           a             1         90

2           b             2         80

3           c             3         85

3           c             3         90

左连接语句

no           name           no         grade

1                 a               1            90

2                 b               2            80

3                 c               3             85

3                 c                3            90

4                 d            NULL         NULL

右连接语句

no            name           no         grade

1                 a                1              90

2                 b                2              80

3                 c                3               85

3                 c                3               90

全连接语句

no           name            no           grade

1                a                  1              90

2                b                  2               80

3                c                  3              85

3                c                  3               90

4                d               NULL        NULL

总结:

从上面例子可以看出:

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

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

左连接,即已左边的表为主表,右边的表为副表,将主表中需要的字段全部列出,然后将副表中的数据按照查询条件与其对应起来,

右连接则相反。

全连接,则是将两个表的需要的字段的数据全排列。

sqlalchemy多表联合查询(inner outer join 左右连接)详解的更多相关文章

  1. sqlalchemy多表联合查询的左连接、右连接等使用

    #按用户名摸糊查询trans_details.query.join(Uses).filter(Users.username.like('%xx%'))#select xxx from trans_de ...

  2. sqlalchemy多表联合查询(join)

    使用outerjoin instances = db.session.query(Instance.name, Instance.sep_status, User.email).outerjoin( ...

  3. 《MySQL必知必会》[02] 多表联合查询

    1.基本连接 不同类型的数据,存储在多个表中,而所谓多表连接,就是将多个表联合返回一组输出. 1.1 等值连接 基本的连接方式非常简单,只需要在WHERE子句中规定如何关联即可,如下: SELECT ...

  4. SQLServer之多表联合查询

    多表联合查询简介 定义:连接查询是关系型数据库最主要的查询,通过连接运算符可以实现多个表连接数据查询. 分类:内连接,外连接,全外连接. 内连接 定义 内联接使用比较运算符根据每个表的通用列中的值匹配 ...

  5. 理解mysql执行多表联合查询

    阅读目录 一:inner join(内连接) 二:left join(左连接) 三:right join(右连接) 四:cross join(交叉连接) 五:union操作 六:node+mysql ...

  6. 【Oracle】曾经的Oracle学习笔记(4-7)多表联合查询,子查询,动态条件查询

    一.多表联合查询 二.子查询 三.动态条件查询 LESSON 4 Displaying Data from Multiple Tables------------------------------- ...

  7. MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例

    有二三年没写代码了,**内的工作就是这样,容易废人!看到园子里这么多大侠朝气蓬勃的,我想也要学点东西并和大家分享,共同进步!快乐每一天,进步每一天!言归正传! 通过最近一段时间对MVC5.EF6的学习 ...

  8. Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新

    CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等.目前已支持Chrome 25, Firefox 19 ...

  9. SharePoint 2013 列表多表联合查询

    在SharePoint的企业应用中,遇到复杂的逻辑的时候,我们会需要多表查询:SharePoint和Sql数据表一样,也支持多表联合查询,但是不像Sql语句那样简单,需要使用SPQuery的Joins ...

随机推荐

  1. EXCEPTION-SPRING

      CreateTime--2016年8月23日09:00:47Author:Marydon 声明:异常类文章主要是记录了我遇到的异常信息及解决方案,解决方案大部分都是百度解决的,(这里只是针对我遇到 ...

  2. exception PLS-00215: String length constraints must be in range (1 .. 32767)

      exception PLS-00215: String length constraints must be in range (1 .. 32767) CreationTime--2018年8月 ...

  3. java 如何取前32位全是1的int型数据的后八位

    直接&255 因为Integer.toBinaryString(255) 是 8个1. 如果一个负数byte转成int则前面全部会补1,就是24个1和它自己的八位,,于是和八个1相&就 ...

  4. 【asp.net Core 2.0 初步探索】

    首先下载 对应的SDK 和runtime https://www.microsoft.com/net/core#linuxubuntu           ---------当前为 1.1 稳定版本 ...

  5. 【laravel5.4】使用baum\node 类库实现无限极分类

    1.在model中引入baum\node 类库,并继承,具体参考 https://packagist.org/packages/baum/baum 2.核心代码: /* * model::create ...

  6. xmlhttp.readyState==4 && xmlhttp.status==200的探究

    作为一个后端人员,很惭愧,对Ajax的使用只局限在功能实现层面的交互,对底层通过XMLHttpRequest对象来使用的知识却没有仔细研究过.现总结如下 1. XMLHttpRequest 对象的相关 ...

  7. 锋利的jQuery(第二版)源码下载地址

    书上给的http://cssrain.sinaapp.com无法访问 问作者邮箱要的: 第1版源码:百度云盘下载:http://pan.baidu.com/share/link?shareid=104 ...

  8. HDUOJ----More is better(并查集)

    More is better Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 327680/102400 K (Java/Others) ...

  9. 商业规则引擎IBM WebSphere ILog JRules概述,开发基础教程

    Ilog Jrules开发基础教程有7篇,地址规则引擎Ilog Jrules开发基础教程[连载1]-- 概述篇 概述篇 规则引擎是一种嵌套在应用程序中的组件,它实现了将业务规则从应用程序代码中分离出来 ...

  10. DBA_Oracle Erp R12系统文件结构(概念)

    20150609 Created By BaoXinjian