首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql利用外连接删除数据

基础概念

MySQL中的外连接(Outer Join)是一种联接操作,它返回左表(Left Table)或右表(Right Table)中的所有记录,以及两个表中匹配的记录。外连接分为左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join)。MySQL不直接支持全外连接,但可以通过左外连接和右外连接的组合来实现。

相关优势

  1. 数据完整性:外连接可以确保返回所有相关数据,即使某些数据在另一个表中没有匹配项。
  2. 灵活性:可以根据需要选择返回左表或右表的所有数据,或者两者都返回。
  3. 复杂查询:外连接常用于复杂的查询场景,如数据对齐、数据合并等。

类型

  1. 左外连接(Left Outer Join):返回左表中的所有记录,以及右表中匹配的记录。如果右表中没有匹配的记录,则返回NULL。
  2. 右外连接(Right Outer Join):返回右表中的所有记录,以及左表中匹配的记录。如果左表中没有匹配的记录,则返回NULL。

应用场景

假设我们有两个表:orders(订单)和customers(客户)。我们希望删除那些没有对应客户的订单。

代码语言:txt
复制
-- 创建示例表
CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(100)
);

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE
);

-- 插入示例数据
INSERT INTO customers (customer_id, customer_name) VALUES
(1, 'Alice'),
(2, 'Bob');

INSERT INTO orders (order_id, customer_id, order_date) VALUES
(101, 1, '2023-01-01'),
(102, 2, '2023-01-02'),
(103, 3, '2023-01-03');

删除数据

我们可以使用左外连接来删除那些没有对应客户的订单:

代码语言:txt
复制
DELETE o
FROM orders o
LEFT JOIN customers c ON o.customer_id = c.customer_id
WHERE c.customer_id IS NULL;

解释

  1. 左外连接orders表作为左表,customers表作为右表。左外连接会返回orders表中的所有记录,以及customers表中匹配的记录。
  2. WHERE条件WHERE c.customer_id IS NULL表示只删除那些在customers表中没有匹配项的记录。

参考链接

MySQL LEFT JOIN

通过这种方式,你可以确保删除那些没有对应客户的订单,同时保留所有其他订单数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Mysql 连接和内连接

    mysql连接连接 什么是内连接? 假设A和B表进行连接,使用内连接的话。凡是A表和B表能够匹配上的记录查询出来,这就是内连接。 AB两张表没有主副之分,两张表是平等的。...FROM t1 INNER JOIN t2 ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件; 什么是连接?...假设A和B表进行连接,使用连接的话,AB两张表中有一张表是主表,一张表是副表。主要查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。...其中外连接分为左连接和右连接连接语法 SELECT ... FROM t1 LEFT JOIN t2 ON 连接条件 [LEFT JOIN t3 ON 连接条件] ......AND 其他条件; 右连接语法 SELECT ... FROM t1 RIGHT JOIN t2 ON 连接条件 [RIGHT JOIN t3 ON 连接条件] ...

    1.8K30

    什么是内连接连接?MySQL支持哪些连接?_oracle内连接连接的区别

    连接 分为左连接,右连接连接 left join 语句: select 表1查询的字段,表2查询的字段 from 表1 left join 表2 on 条件; // 只改变了连接的语句...,是连接中的一种。...右连接 right join 语句: select 表1查询的字段,表2查询的字段 from 表1 right join 表2 on 条件; // 只改变了连接的语句,其他写法相同 如: mysql...,是连接中的一种。...当前MySQL关联执行的策略很简单:**MySQL对任何关联都执行嵌套循环关联操作,即MySQL先在一个表中循环取出单条数据,然后在嵌套循环到下一个表中寻找匹配的行,依次下去,直到找到所有表中匹配的行为止

    90720

    数据库-MySQL-基础(10)-内连接连接,自连接

    目录 内连接连接查询语法  案例演示 连接 连接查询的语法 案例演示  自连接连接查询语法 案例演示 ---- 内连接连接查询语法 ——隐式内连接 SELECT 字段列表 FROM...,那么就查询不到 查询结果 ---- 连接 连接查询的语法 ——左连接 SELECT 字段列表 FROM LEFT [OUTER] JOIN 表2 ON 条件  相当于查询表1(左表)的所有数据包含表...1和表2交集部分的数据· ——右连接 SELECT 字段列表 RIGHT  LEFT [OUTER] JOIN 表2 ON 条件  相当于查询表2(右表)的所有数据包含表1和表2交集部分的数据·... outer 可以省略 案例演示  代码(左连接) --1.查询emp表中所有数据,和对应部门信息(左连接) -- 表结构: emp ,dept -- 连接条件: emp.dept_id = dept.id...(右连接) select d.

    2K40

    MySQL—内连接连接区别

    区别 内连接(inner join):取出两张表中匹配到的数据,匹配不到的不保留 连接(outer join):取出连接表中匹配到的数据,匹配不到的也会保留,其值为NULL 示例表 users表 mysql...2 | +----+------+----+---------------------------------------+---------+ 2 rows in set (0.00 sec) 连接...(outer join) 左连接(left outer join):以左边的表为主表 右连接(right outer join):以右边的表为主表 以某一个表为主表,进行关联查询,不管能不能关联的上...,主表的数据都会保留,关联不上的以NULL显示 通俗解释就是:先拿出主表的所有数据,然后到关联的那张表去找有没有符合关联条件的数据,如果有,正常显示,如果没有,显示为NULL 示例 mysql> select...| +------+---------------------------------------+---------+----+-------+ 5 rows in set (0.00 sec) 左连接和右连接是相对的

    1.2K20

    MySql】表的内连接连接

    本篇博客主要介绍的内容是表的连接,在MySql中表的连接分为内连接连接,下面,我们直接进入主题把 内连接连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接...,学习完内连接,我们在来看一看连接。...本质是差不多的 连接 连接分为左连接和右连接连接 如果联合查询,左侧的表完全显示我们就说是左连接 -- 语法 select 字段名 from 表名1 left join 表名2 on...连接条件 下面,我们来举个例子: 先创建两张表,一张是学生表,另一张是成绩表:并插入一些数据,sql代码如下所示: -- 建两张表 create table stu (id int, name varchar...右连接 如果联合查询,右侧的表完全显示我们就说是右连接

    26150

    ⑧【MySQL数据库查询:内连接连接、自连接、子查询、多表查询

    、子查询、多表查询 ⑧MySQL数据库查询 1....—— LEFT OUTER JOIN 连接查询 —— 左连接连接 —— 左连接: ①查询表1所有数据,包含表1和表2交集部分的数据。...SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 连接条件...; -- 演示: -- 查询emp表所有数据,以及对应部门信息(dept表数据) -- 左连接实现...`id`; 右连接 —— RIGHT OUTER JOIN 连接查询 —— 右连接 连接 —— 右连接: ①查询表2所有数据,包含表1和表2交集部分的数据。...SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 连接条件...; -- 演示: -- 查询emp表所有数据,以及对应部门信息(dept表数据) -- 右连接实现

    51780

    MySQL数据库——多表查询之内连接查询、连接查询、子查询

    【准备数据】:创建两张表并插入数据 # 创建部门表 CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) );...1.2 多表查询的分类 1.2.1 内连接查询 1)隐式内连接:使用where条件来消除无用的数据; -- 查询所有员工信息和对应的部门信息 SELECT *FROM emp,dept WHERE emp...`id`; 3)内连接查询注意事项: 从哪些表中查询; 条件是什么; 查询哪些字段; 1.2.2 连接查询 1)左连接:查询的是左表所有的数据及其交集部分。...`id`; -- 使用左连接查询 SELECT t1.*,t2.`NAME` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2....2)右连接:查询的是右表所有的数据及其交集部分。

    11.8K10

    【重学 MySQL】二十六、内连接连接

    【重学 MySQL】二十六、内连接连接MySQL中,内连接连接是两种常见的表连接方式,它们在处理多个表之间的关系时发挥着重要作用。...连接分为左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN,但需要注意的是,MySQL原生并不直接支持FULL JOIN,但可以通过UNION操作模拟)。...全连接(FULL JOIN,通过UNION模拟) 由于MySQL原生不支持全连接,但可以通过结合左连接和右连接,并使用UNION操作来模拟全连接的效果。...总结 内连接连接MySQL中都是处理表之间关系的重要工具。内连接只返回匹配的记录,而外连接则返回匹配的记录以及未匹配的记录(通过NULL值表示)。...通过合理使用这些连接方式,可以灵活地查询和处理多个表中的数据

    10110

    Mysql中的关联查询(内连接连接,自连接)

    在使用数据库查询语句时,单表的查询有时候不能满足项目的业务需求,在项目开发过程中,有很多需求都是要涉及到多表的连接查询,总结一下mysql中的多表关联查询 一,内连接查询 是指所有查询出的结果都是能够在连接的表中有对应记录的...,只查询在连接的表中能够有对应的记录,其中e.dept = d.id是连接条件 二,左连接查询 是指以左边的表的数据为基准,去匹配右边的表的数据,如果匹配到就显示,匹配不到就显示为null。...,如果右表没有记录对应的话就显示null 查询结果: 关键字是left outer join,等效于left join,在关联查询中,做连接查询就是左连接查询,两者是一个概念 三,右连接是同理的...,所以左连接能做到的查询,右连接也能做到 查询结果: 四,全连接 顾名思义,把两张表的字段都查出来,没有对应的值就显示null,但是注意:mysql是没有全连接的(mysql中没有...full outer join关键字),想要达到全连接的效果,可以使用union关键字连接连接和右连接

    3.9K40

    数据库中内连接连接、全连接

    转自:http://blog.csdn.net/yilip/article/details/8065840 内连接:把两个表中数据对应的数据查出来  连接:以某个表为基础把对应数据查出来(全连接是以多个表为基础...)  student表  no name  1 a  2 b  3 c  4 d  grade表  no grade  1 90  2 98  3 95  内连接 inner join(查找条件中对应的数据...grade.no grade  1 a 1 90  2 b 2 98  3 c 3 95  左连接(左表中所有数据,右表中对应数据,即左边一定有数据,右边不一定有)  语法:select * from...结果:  student.no name grade.no grade  1 a 1 90  2 b 2 98  3 c 3 95  全连接(表中数据=内连接+左边缺失数据+右边缺失数据) 语法:select...注:access 中不能直接使用full join ,需要使用union all 将左连接和右连接合并后才可以

    4.4K50
    领券