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

一、内连接查询(INNER JOIN)

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

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

orders 表:

order_id goods_id user_id
1 1 1
2 2 2
3 3 1
4 2 3

goods 表:

order_id goods_name price
1 商品A 10
2 商品B 20
3 商品C 30
4 商品D 40

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

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

结果:

order_id goods_name price
1 商品A 10
2 商品B 20
3 商品C 30
4 商品B 20

二、左连接查询(LEFT JOIN)

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

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

employees 表:

id name department_id
1 张三 1
2 李四 2
3 王五 1
4 赵六 3

salaries 表:

id employee_id salary
1 1 5000
2 2 8000
3 3 6000

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

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

结果:

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

三、右连接查询(RIGHT JOIN)

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

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

salaries 表:
salaries 表:

id employee_id salary
1 1 5000
2 2 8000
3 3 6000

employees 表:

id name department_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;

结果:

name salary
张三 5000
李四 8000
王五 6000
NULL NULL

你可能感兴趣的:(Mysql,mysql,学习,数据库,java)