python之SQL表连接

1. 前言

  • 什么是连接?
    需要查询两张表中的内容,比如通过外键约束的两张表。

2. 内连接

2.1 语法和实例

  • 语法
    假如表1通过外键与表2进行连接
--- 语法1  -- where后面可以为表1和表2的任何字段相关的运算符
select1.字段1,2.字段2  --- 查询内容
from1,2             ---- 查询的表名
where 运算符(1.字段3,2.字段4)  ---- 连接条件

--- 语法2   用于表之间存在外键约束的两章表
select1.字段1,2.字段2 --- 查询内容
from1 (inner) join2   ---- 查询的表名
on1.外键 =2.主键    ---- 连接条件,通过哪个外键连接

一定要搞清楚查询的数据来自哪几张表

3. 外连接

外连接分为左外连接,右外连接和全外连接。

3.1 左(外)连接

3.1.1 特点

两张表在连接过程中除返回连接条件的行数据外,还会返回左表中不满足条件的行。

3.1.2 语法

-- 方法1: 适用on
select1.字段1,2.字段2
from1 left (outer) join2
on1.字段3与表2.字段4的运算符

select1.字段1,2.字段2
from1 left (outer) join2
using (字段3)  --- 字段3为连接字段且在表1和表2必须相同

上述将显示完表1中所有字段数据。

3.2 右(外)连接

3.2.1 特点

两张表在连接过程中除返回连接条件的行数据外,还会返回右表中不满足条件的行。

3.2.2 语法

-- 方法1: 适用on方法
select1.字段1,2.字段2
from1 right (outer) join2
on1.字段3与表2.字段4的运算符

-- 方法2: 适用using方法
select1.字段1,2.字段2
from1 right (outer) join2
using (字段3)  --- 字段3为连接字段且在表1和表2必须相同

上述将显示完表2中所有字段数据。

3.3 全(外)连接

3.3.1 特点

两张表在连接过程中除返回连接条件的行数据外,还会返回两个表中不满足条件的行。

3.3.2 语法

方法1: 适用on
select1.字段1,2.字段2
from1 full (outer) join2
on1.字段3与表2.字段4的运算符

-- 方法2: 适用using方法
select1.字段1,2.字段2
from1 full (outer) join2
using (字段3)  --- 字段3为连接字段且在表1和表2必须相同

上述将显示完表1和表2中所有字段数据 。

4. 子查询

4.1 前言

  • 需要将查询出来的数据作为条件查询中
  • 应用广泛,比如要求在某一个部门,查询工资比张三高的所有员工及相关信息;上述问题,需要查询两个数据,一个为张三的工资(子查询),另一个为所有员工及相关信息(主查询)。
    step1: 查询张三的工资:select 工资 from 表 where 姓名 = ‘张三’
    step2: 查询所有员工及相关信息: select * from 表
    step3: 融合主副问题, 靠的是工资大于张三的工资
    select * from 表 where 工资 > (select 工资 from 表 where 姓名 = ‘张三’)

4.2 语法特点即注意

4.2.1 语法

select 主查询的字段列表
fromwhere 连接主子问题的表达式 (select 子查询字段列表 from);

4.2.2 特点

  • 上述SQL语句执行顺序:子查询 -> 主查询
  • 主查询适用子查询的结果
  • where后面接的是比较运算符,返回的是true或者false

4.3 子查询结果的维度

一定要注意子查询返回的格式,到底是几行几列的数据。若返回一行数据,则称为单行子查询;若返回多行数据,则称为多行子查询。不同维度的子查询结果对应了不同的连接主子问题的表达式。

4.3.1 单行子查询

返回一行记录,对单行子查询可使用单行记录的比较运算符:
<, >, =, >=, <=, !=
该例子比较简单。

4.3.2 多行子查询

  • 返回多行记录,不能直接使用单行比较运算符,需要根据需要“取”多行数据中的“一行数据”做比较运算。“取”有如下关键字:
    ALL : 和子查询返回的所有值进行比较,全部都满足才返回true
    ANY/SOME: 和子查询返回的任意值进行比较,满足其中一个就可以
    IN: 等于子查询多行数据中的任意一个
  • 语法

--- ALL
select 主查询的字段列表
fromwhere 连接主子问题的表达式 ALL(select 子查询字段列表 from);

--- ANY
select 主查询的字段列表
fromwhere 连接主子问题的表达式 ANY(select 子查询字段列表 from);

--- SOME
select 主查询的字段列表
fromwhere 连接主子问题的表达式 SOME(select 子查询字段列表 from);

--- IN
select 主查询的字段列表
fromwhere 连接主子问题的表达式 IN(select 子查询字段列表 from);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值