MySQL多表查询

目录

一、笛卡尔积

多表查询时如果没有指定条件那么查询结果就是笛卡尔积。例如A表有2条数据,B表有4条数据,那么笛卡尔积就是2×4=8条数据。

c 复制代码
select * from a,b;

二、内连接

内连接查询的是两张表的交集部分。也就是说当表A/表B中的数据在表B/表A中没有匹配项时不会输出。

隐式内连接:select a.name, b.name from a, b where a.b_name=b.name;

显式内连接:select a.name, b.name from a inner join b on a.b_name=b.name;

二、外连接

左外连接查询的是左表所有数据+两张表的交集 。右外连接查询的是右表所有数据+两张表的交集。也就是说当表A中的数据在表B中没有匹配项时使用左外连接也会输出,当表B中的数据在表A中没有匹配项时使用右外连接也会输出。

左外连接:select a.name, b.name from a left join b on a.b_name=b.name;

右外连接:select a.name, b.name from a right join b on a.b_name=b.name;

在实际开发中,想要哪张表的所有信息就以该表作为主表。

三、自连接

自连接查询的是同一张表,例如同一张表记录了id和领导id,那么查询所有员工的信息及其领导信息就需要用自连接。自连接可以用内连接也可以用外连接,具体看需求。自连接需要对表起别名,因为需要看成两张表。

c 复制代码
select * from emp a, emp b left join on a.manager_id=b.id;

四、联合查询

联合查询可以把多次查询的结果在行上合并起来,形成一个新的结果集。

c 复制代码
select * from emp where salary>5000
union all
select * from emp where age>50

union还会将查询结果合并之后去重。

五、子查询

1.列子查询

子查询返回的是1列n行数据,常用操作符:

  • in:在子查询集合内满足其一
  • not in
  • any: 在子查询集合内满足其一,一般配合>号使用
  • all:子查询集合内满足所有,一般配合>号使用

2.行子查询

子查询返回的是1行n列数据,常用操作符:

  • =
  • <>:不等于
  • in:在子查询集合内满足其一
  • not in

3.表子查询

子查询返回的是n行n列数据,常用操作符:

  • in:在子查询集合内满足其一

select * from emp where (job, salary) in (子查询select job, salary from ...)

相关推荐
仍然.3 小时前
Redis---缓存
数据库·redis·缓存
Aloudata3 小时前
LookML 语义模型 vs 企业级独立语义层:BI 建模语言能否承担企业语义底座?
数据库·人工智能·数据分析·数据资产·dataagent
细嗅蔷薇@3 小时前
排序和分⻚(order by 、limit)
数据库·oracle
wdfk_prog4 小时前
LWIP教程 09:从 `tcp_slowtmr()` 到 Fast Retransmit——TCP 超时重传与重复 ACK
服务器·网络·数据库·网络协议·tcp/ip
逸模4 小时前
BIM在连锁餐饮装修中的应用:不只是画三维图
大数据·数据库·人工智能·物联网·建模
梦想平凡4 小时前
棋牌游戏技术实战(五):从对局事件重新执行规则,核对棋盘和最终状态
数据库·游戏·oracle
白露与泡影4 小时前
Oracle AI Database 26ai RAC 部署步骤、关键命令与一键脚本
数据库·人工智能·oracle
天天喝旺仔5 小时前
MySQL 索引原理与慢查询优化实战:从 B+ 树到执行计划调优
数据库·sql·mysql·性能优化
liulilittle5 小时前
Linux 下 select 测试函数
linux·服务器·网络·数据库·c++·select·c
DongQiShanRen5 小时前
玄龙(上):TICK 主循环——意识心跳怎么跳
linux·jvm·数据库·人工智能·数据挖掘·rust