当前位置: 首页 > article >正文

Mysql的高级查询:SQL关联查询(内连接/外连接/自连接)/子查询

一.关联查询:

定义:关联查询又叫连接查询

常见:内连接/外连接/自连接

1.内连接(无存在主从表)

语法:inner join ...on

定义:组合两个表的记录,返回关联字段相符的记录,也就是返回表的交集(红色部分)

# 查出学生表中学生们所在班级对应的班级名
SELECT * FROM student as s INNER JOIN classroom c on s.class_id = c.class_id

2.右连接(前从后主)

语法:right join ...on

定义:返回右表(B)所有的数据(主表),以及左表(A)与右表(B)对应的数据,没有则返回null(红色部分)

select * from student s right join classroom c on s.class_id = c.class_id

3.左连接(前主后从)

语法:left join ...on

定义:返回左表(A)所有的数据(主表),以及右表(B)与左表(A)对应的数据,没有则返回null(红色部分)

select * from student s left join classroom c on s.class_id = c.class_id

4.自连接

定义:一张表共用

语法:inner join ...[on]

例子:
select * from 员工表 表1 inner join 员工表 表2;
# 找到员工表的上级领导姓名
select * from 员工表 表1 inner join 员工表 表2 on 表1.领导id =表1.员工id ; # 没有上级领导的员工会不显示
select * from 员工表 表1 left join 员工表 表2 on 表1.领导id =表1.员工id ;# left才能把没有领导的也显示出来null

二.子查询:

定义:子查询也叫嵌套查询,将一个查询结果当作另一个查询的条件或结果集。子查询最接近思考方式,最自然的查询。

分类:单行子查询(=),多行子查询(in)

# 找到xx所在班级的班级名称(单行子查询)
SELECT * FROM classroom WHERE class_id = (SELECT class_id FROM student where `name` = 'xx')
# 查询薪资与x部门员工薪资相等但是不在x部门的员工信息
select * from emp where sal in (select sal from emp where 部门 = 'x') and 部门 != 'x'


http://www.kler.cn/news/305336.html

相关文章:

  • uni-app和Node.js使用uni-push2.0实现通知栏消息推送功能
  • Centos挂载和删除nfs
  • python选择排序算法
  • 基于Java+Mysql实现(web)大型企业管理系统
  • API安全测试 | Postman + BurpSuite 配置证书代理
  • chapter14-集合——(List)——day17
  • 828华为云征文|部署在线文件管理器 Spacedrive
  • 大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
  • 【LLM多模态】CogVideoX文生视频模型结构和训练过程
  • 【openGauss】检查工具gs_check,gs_checkperf的应用
  • Redisson 异步释放锁
  • 什么是485无线通信
  • 磁盘写操作压力测试工具的设计与实现
  • ChatGLM3模型搭建教程
  • OpenCV结构分析与形状描述符(20)计算一个包围给定点集的最小外接圆函数minEnclosingCircle()的使用
  • 研1日记12
  • C++系列-函数对象/仿函数
  • [网络]TCP/IP协议 之 网络层IP协议(3)
  • 艾丽卡的区块链英语小课堂
  • 基于ssm+vue+uniapp的新生报到系统小程序
  • 第4步CentOS配置SSH服务用SSH终端XShell等连接方便文件上传或其它操作
  • 实战外网配置——光猫桥接+路由器PPPoE拨号+防火墙外网链路健康检查+外网流量负载均衡
  • kafka mirror maker之实现两个kafka集群之间的数据同步
  • HTML + CSS - 网页布局之一般布局浮动布局
  • JVM 体系与结构
  • Node.js 中间件与洋葱模型
  • SonicWall SSL VPN曝出高危漏洞,可能导致防火墙崩溃
  • java --- 性能优化01
  • Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)
  • 使用 easyX 库实现顺序表插入操作的可视化