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

mysql之等值连接8个实例

以下实例以常见的业务场景为例,使用 MySQL 语法,假设存在员工表(employees)、部门表(departments)、订单表(orders)、客户表(customers)等,来展示等值连接的不同用法:

实例1:员工与部门信息关联
员工表(employees):
emp_id emp_name dept_id
1 Alice 101
2 Bob 102

部门表(departments):
dept_id dept_name
101 销售部
102 技术部

需求:查询每个员工所属的部门名称。
SELECT e.emp_name, d.dept_name
FROM employees e
– 通过部门id进行等值连接
INNER JOIN departments d ON e.dept_id = d.dept_id;
结果:
emp_name dept_name
Alice 销售部
Bob 技术部

实例2:订单与客户信息关联
订单表(orders):
order_id customer_id order_amount
1001 C001 500
1002 C002 800

客户表(customers):
customer_id customer_name
C001 张三
C002 李四

需求:查询每个订单对应的客户姓名。
SELECT o.order_id, o.order_amount, c.customer_name
FROM orders o
– 通过客户id进行等值连接
INNER JOIN customers c ON o.customer_id = c.customer_id;
结果:
order_id order_amount customer_name
1001 500 张三
1002 800 李四

实例3:多表等值连接(员工、部门、项目)
员工表(employees):
emp_id emp_name dept_id
1 Alice 101
2 Bob 102

部门表(departments):
dept_id dept_name
101 销售部
102 技术部

项目表(projects):
project_id emp_id project_name
P001 1 项目A
P002 2 项目B

需求:查询每个员工所属部门以及参与的项目名称。
SELECT e.emp_name, d.dept_name, p.project_name
FROM employees e
– 员工表与部门表通过部门id等值连接
INNER JOIN departments d ON e.dept_id = d.dept_id
– 员工表与项目表通过员工id等值连接
INNER JOIN projects p ON e.emp_id = p.emp_id;
结果:
emp_name dept_name project_name
Alice 销售部 项目A
Bob 技术部 项目B

实例4:带条件的等值连接(查询特定部门员工)
员工表(employees):
emp_id emp_name dept_id
1 Alice 101
2 Bob 102
3 Charlie 101

部门表(departments):
dept_id dept_name
101 销售部
102 技术部

需求:查询销售部的员工姓名。
SELECT e.emp_name, d.dept_name
FROM employees e
– 通过部门id进行等值连接
INNER JOIN departments d ON e.dept_id = d.dept_id
– 添加条件筛选销售部
WHERE d.dept_name = ‘销售部’;
结果:
emp_name dept_name
Alice 销售部
Charlie 销售部

实例5:自连接(查询员工及其上级)
员工表(employees):
emp_id emp_name manager_id
1 Alice NULL
2 Bob 1
3 Charlie 1

需求:查询每个员工及其对应的上级姓名(manager_id为上级的emp_id)。
SELECT e.emp_name AS employee, m.emp_name AS manager
FROM employees e
– 自连接,员工表与自身通过manager_id和emp_id进行等值连接
INNER JOIN employees m ON e.manager_id = m.emp_id;
结果:
employee manager
Bob Alice
Charlie Alice

实例6:等值连接与聚合函数(统计每个部门的员工数量)
员工表(employees):
emp_id emp_name dept_id
1 Alice 101
2 Bob 102
3 Charlie 101

部门表(departments):
dept_id dept_name
101 销售部
102 技术部

需求:统计每个部门的员工数量。
SELECT d.dept_name, COUNT(e.emp_id) AS employee_count
FROM employees e
– 通过部门id进行等值连接
INNER JOIN departments d ON e.dept_id = d.dept_id
– 按部门名称分组
GROUP BY d.dept_name;
结果:
dept_name employee_count
销售部 2
技术部 1

实例7:等值连接与子查询(查询购买特定商品的客户信息)
订单表(orders):
order_id customer_id product_id
1001 C001 P001
1002 C002 P002
1003 C001 P003

客户表(customers):
customer_id customer_name
C001 张三
C002 李四

需求:查询购买了商品P001的客户姓名(通过子查询先找出购买P001的订单对应的客户id)。
SELECT c.customer_name
FROM customers c
– 通过客户id进行等值连接
INNER JOIN (
SELECT customer_id
FROM orders
WHERE product_id = ‘P001’
) o ON c.customer_id = o.customer_id;
结果:
customer_name
张三

实例8:使用别名的等值连接(避免列名冲突)
员工表1(employees1):
emp_id emp_name dept_id
1 Alice 101
2 Bob 102

员工表2(employees2):
emp_id emp_salary dept_id
1 5000 101
2 6000 102

需求:查询每个员工的姓名和工资。
SELECT e1.emp_name, e2.emp_salary
FROM employees1 e1
– 通过员工id和部门id进行等值连接,使用别名区分表
INNER JOIN employees2 e2 ON e1.emp_id = e2.emp_id AND e1.dept_id = e2.dept_id;
结果:
emp_name emp_salary
Alice 5000
Bob 6000

http://www.dtcms.com/a/121898.html

相关文章:

  • 不同服务器架构(x86、ARM、Power、SPARC)对数据库使用的影响
  • 软件工程基础之设计模式
  • FFMEPG常见命令查询
  • 计算机视觉——深度学习图像处理中目标检测平均精度均值(mAP)与其他常用评估指标
  • 机器学习之PCA主成分分析详解
  • 强化学习原理二 BasicConcepts
  • 从MySQL快速上手大数据Hive
  • go游戏后端开发31:麻将游戏的碰牌与胡牌逻辑
  • 将外网下载的 Docker 镜像拷贝到内网运行
  • 【文献阅读】Capabilities of Gemini Models in Medicine
  • Quill富文本编辑器支持自定义字体(包括新旧两个版本,支持Windings 2字体)
  • MyBatis 动态 SQL 使用详解
  • MCP 服务搭建与配置学习资源部分汇总
  • 【CSS 选择器组合规则详解】
  • 2025-04-09 吴恩达机器学习6——神经网络(1):介绍
  • Spring Boot 3.x 中 WebClient 全面详解及示例
  • 文件上传漏洞原理学习
  • Synexens上海矽印 SP10 基于 DTOF 技术的单点激光雷达
  • Cursor+Claude 项目开发(辅助编程)
  • 沟通渠道混乱,信息传递延迟怎么办?
  • Redis高可用
  • 树的直径 (dp或贪心)
  • 蓝桥杯--寻找整数
  • 【教程】xrdp修改远程桌面环境为xfce4
  • 《从底层逻辑剖析:分布式软总线与传统计算机硬件总线的深度对话》
  • Mockito如何对静态方法进行测试
  • 【Claude AI大语言模型连接Blender生成资产】Windows安装Blender MCP教程
  • FreeRTOS(中断时间片任务API)
  • 微信小程序开发常用组件及用法详解
  • 如何解决Chrome浏览器安装时提示“无法连接互联网”