【mysql学习篇】连接查询详解以及性能优化

本文介绍了数据库查询中的三种连接方式:内连接(INNERJOIN)、左连接(LEFTJOIN)和右连接(RIGHTJOIN)。内连接返回两个表中匹配的记录,左连接保留左表所有记录,右连接保留右表所有记录,不匹配时用NULL填充。并给出了订单和商品、员工和工资的实例来说明这三种连接的使用场景。
摘要由CSDN通过智能技术生成

一、内连接查询(INNER JOIN)

内连接查询只返回两个表中匹配的记录,即只有在两个表中都存在的记录才会被返回。内连接查询是最常用的连接查询方式。

场景1: 假设有两个表,一个是订单表 orders,包含订单编号 order_id、商品编号 goods_id 和用户编号 user_id;另一个是商品表 goods,包含商品编号 goods_id、商品名称 goods_name 和商品单价 price。如下:

orders 表:

order_idgoods_iduser_id
111
222
331
423

goods 表:

order_idgoods_nameprice
1商品A10
2商品B20
3商品C30
4商品D40

现在想要查询所有订单的商品名称和商品单价,可以使用内连接查询

SELECT orders.order_id, goods.goods_name, goods.price
FROM orders
INNER JOIN goods ON orders.goods_id = goods.goods_id;

结果:

order_idgoods_nameprice
1商品A10
2商品B20
3商品C30
4商品B20

二、左连接查询(LEFT JOIN)

左连接查询返回左表中的所有记录和右表中的匹配记录。如果左表中的记录在右表中没有匹配的记录,则使用 NULL 填充。

场景1: 假设有两个表,一个是员工表 employees,包含员工编号 id、员工姓名 name 和所属部门编号 department_id;另一个是工资表 salaries,包含工资编号 id、员工编号 employee_id 和工资 salary。如下:

employees 表:

idnamedepartment_id
1张三1
2李四2
3王五1
4赵六3

salaries 表:

idemployee_idsalary
115000
228000
336000

现在想要查询所有员工的姓名和工资,可以使用左连接查询

SELECT employees.name, salaries.salary
FROM employees
LEFT JOIN salaries ON employees.id = salaries.employee_id;

结果:

namesalary
张三5000
李四8000
王五6000
赵六NULL

三、右连接查询(RIGHT JOIN)

右连接查询返回右表中的所有记录和左表中的匹配记录。如果右表中的记录在左表中没有匹配的记录,则使用 NULL 填充。

场景1: 假设有两个表,一个是工资表 salaries,包含工资编号 id、员工编号 employee_id 和工资 salary;另一个是员工表 employees,包含员工编号 id、员工姓名 name 和所属部门编号 department_id。如下:

salaries 表:
salaries 表:

idemployee_idsalary
115000
228000
336000

employees 表:

idnamedepartment_id
1张三1
2李四2
3王五1
4赵六3

现在想要查询所有工资信息和对应的员工姓名,可以使用右连接查询

SELECT employees.name, salaries.salary
FROM salaries
RIGHT JOIN employees ON employees.id = salaries.employee_id;

结果:

namesalary
张三5000
李四8000
王五6000
NULLNULL
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Java学习者柯十一

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

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

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

打赏作者

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

抵扣说明:

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

余额充值