MySql多表查询

本文介绍了数据库中的一对多、多对多和一对一关系的实现方式,以及内连接、外连接、自连接和联合查询的语法和应用场景。此外,还讲解了子查询的分类及其在SQL中的应用。内容源自《MySql》课程,适合数据库学习者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多表关系

  • 一对多

    实现:在多的一方建立外键,用来指向一的一方的主键

  • 多对多

    实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

  • 一对一

    实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(unique)

内连接

查询的是两张表交集的部分

语法

隐式内连接

select 字段列表 from 表1,表2 where 条件...

显式内连接

select 字段列表 from 表1 [inner] join 表2 on 连接条件 ...;

外连接

语法

左外连接

select 字段列表 from 表1 left [outer] join 表2 on 条件...;

相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据

右外连接

select 字段列表 from 表1 right [outer] join 表2 on 条件...;

相当于查询表2(右表)的所有数据 包含 表1和表2交集部分的数据

自连接

select 字段列表 from 表A 别名A left(/right) join 表A 别名B on 条件...;
或者
select 字段列表 from 表A as A,表A as B where 条件... ;

自连接查询可以是内连接查询也可以是外连接查询。

联合查询

-union(查询合并且去除重复项),union all(直接合并,可能含有重复项)

对于联合查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。

语法

select 字段列表 from 表A ...
union [all]
select 字段列表 from 表B ...;

条件:多张表查询的列数必须保持一致,字段类型也要保持一致。

子查询

概念:SQL语句中嵌套select语句,称为嵌套查询,又称子查询。

语法

select * from t1 where column1=(select column1 from t2);

子查询外部的语句可以是insert/update/delete/select的任何一个。

分类

  • 标量子查询

    子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式。

    常用操作符:= <> > >= < <=

  • 列子查询

    子查询返回的结果是一列(可以是多行)。

    常用操作符:in、not in、any、some、all

    操作符描述
    in在指定的集合范围之内,多选一
    not in不在指定的集合范围之内
    any子查询返回列表中,有任意一个满足即可
    some与any相同,使用some的地方都可以使用any
    all子查询返回列表的所有值都必须满足
  • 行子查询

    子查询返回的结果是一行(可以是多列)。

    常用操作符:= 、<> 、in、not in

  • 表子查询

    子查询返回的结果是多行多列。

    常用操作符:in

文章内容通过观看B站视频10天精通《MySql》课程总结而出。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不爱菠萝的菠萝君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值