sqlalchemy多表聯合查詢(inner outer join 左右連接)詳解


#按用戶名摸糊查詢
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語句效果一致,即兩個表的共同的部分

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

左連接,即已左邊的表為主表,右邊的表為副表,將主表中需要的字段全部列出,然后將副表中的數據按照查詢條件與其對應起來,

右連接則相反。

全連接,則是將兩個表的需要的字段的數據全排列。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM