目录 MySQL多表关系 一对一 一对多 多对多 MySQL外键约束 创建外键 数据插入 删除 多表联合查询 交叉连接查询 内连接查询 外连接查询 子查询关键字 自关联 MySQL多表关系 MySQL...添加主表数据 -- 注意必须先给主表添加数据 添加从表数据 -- 注意给从表添加数据时,外键列的值不能随便写,必须依赖主表的主键列 删除 主表的数据被从表依赖时,不能删除,否则可以删除 从表的数据可以随便删除...多表联合查询 交叉连接查询 • 交叉连接查询返回被连接的两个表所有数据行的笛卡尔积 • 笛卡尔积 可以理解为一张表的每一行去和另外一张表的任意一行进行匹配...• 假如 A 表有 m 行数据, B 表有 n 行数据,则返回 m*n 行数据 • 笛卡尔积会产生很多冗余的数据,后期的其他查询可以在该集合的基础上进行条件筛选...返回的数据类型 单行单列:返回的是一个具体列的内容,可以理解为一个单值数据; 单行多列:返回一行数据中多个列的内容; 多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围; 多行多列:查询返回的结果是一张临时表
目录MySQL多表关系一对一一对多多对多MySQL外键约束创建外键数据插入删除多表联合查询交叉连接查询内连接查询外连接查询子查询关键字自关联MySQL多表关系MySQL表与表之间的三种关系一对多关系...在多的一方建立外外键指向一的一方编辑多对多 下表为多对多关系,由下表可知多对多关系的中间表至少需要2个外键编辑 MySQL外键约束创建外键 格式: constraint foreign...-- 注意必须先给主表添加数据添加从表数据 -- 注意给从表添加数据时,外键列的值不能随便写,必须依赖主表的主键列删除主表的数据被从表依赖时,不能删除,否则可以删除从表的数据可以随便删除多表联合查询编辑...交叉连接查询 •交叉连接查询返回被连接的两个表所有数据行的笛卡尔积 •笛卡尔积可以理解为一张表的每一行去和另外一张表的任意一行进行匹配 •假如A表有m行数据,B表有n行数据,则返回m*n行数据 •笛卡尔积会产生很多冗余的数据...返回的数据类型单行单列:返回的是一个具体列的内容,可以理解为一个单值数据;单行多列:返回一行数据中多个列的内容;多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围;多行多列:查询返回的结果是一张临时表
大家好,又见面了,我是你们的朋友全栈君。 MySQL多表关联数据同时删除sql语句 有需要的朋友可参考。 DELETE删除多表数据,怎样才能同时删除多个关联表的数据呢?...t1中把那些id值在数据表t2里有匹配的记录全删除掉1 代码如下 DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或 DELETE FROM t1 USING t1,t2...WHERE t1.id=t2.id 2、从数据表t1里在数据表t2里没有匹配的记录查找出来并删除掉1 代码如下 DELETE t1 FROM t1 LEFT JOIN T2 ON t1.id=t2.id....id IS NULL 或 DELETE FROM t1,USING t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL 3、 从两个表中找出相同记录的数据并把两个表中的数据都删除掉...(MYSQL 版本不小于5.0在5.0中是可以的) 上述语句改 写成1 代码如下 delete table_name,table2_name from table_name as t1 left join
多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。...且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习多表方面的知识。 ?...]用于删除外键约束的,一般建议“_fk”结尾 altertable 从表 drop foreignkey 外键名称 l 使用外键目的: n 保证数据完整性 1.3 一对多操作 1.3.1 分析...orderitem(pid,oid)VALUES('p001','x002'); INSERT INTO orderitem(pid,oid)VALUES('p002','x002'); #4删除中间表的数据...(pid,oid)VALUES('p002','x003'); #6删除商品表的数据 -- 执行异常 DELETE FROM products WHERE pid = 'p001';
左外连接 规则:以左边的表为准,右边如果没有对应的记录用null显示 语法: select * from 表1 left join 表2 on 表1.公共字段=表...2.公共字段 3.右外连接 规则:以右边的表为准,左边如果没有对应的记录用null显示 语法: select * from 表1 right join 表2... 语法: 1.自然内连接(natural join) MySQL> select * from stuinfo natural join stumarks; 2.自然左外连接...(natural left join) mysql> select * from stuinfo natural left join stumarks; 3.自然右外连接(natural right join...6.using using用来指定连接字段 mysql> select * from stuinfo inner join stumarks using(stuno
mysql默认是禁用多表删除语句的,之前的做法都是先把条件缓存,然后逐条执行 delete from a where a.xxx in (123123,123123); delete from b where...b.xxxx in (123123,123123); 如果写成下面这种绝对是错误的!...今天突然发现原来mysql也是可以一条sql删除多表数据的,下面来分析一下 多表删除其实思路还是比较简单的,首先条件就是多个表(一般就两个表,织梦的文章信息存在3个表里,删除起来很麻烦)有关联 其次,删除条件一般都是由关联的这一行组成的...所以你需要把子查询改为临时表中,所以最终的查询就是 DELETE p.*, pp.* FROM pw_threads p, pw_tmsgs pp WHERE p.tid = pp.tid AND
多表 一、多表概述 1. 多表简介 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(product)、订单表(orders)等多张表。...且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习多表方面的知识。 2....多表创建流程 设计表:设计相关的多个表; 创建表并设置主外键关系: 方式一:创建表时设置多张表之间的关系; 方式二:创建表之后,再设置表之间的关系 3....一对一关系:(了解) 在实际的开发中应用不多.因为一对一可以创建成一张表.如果非要设计成一对一的表关系,多半是为了解耦,提高灵活度.如QQ号跟QQ信息详情,会员信息跟用户信息 二、多表入门案例...,要注意数据的categroy_id字段值要跟category表中的cid值相对应,如果插入的category_id,在category表中的cid没有对应则无法插入成功.
多表查询分类 分类1:等值连接 vs 非等值连接 1....employees.department_id = departments.department_id; [在这里插入图片描述] 拓展1:多个连接条件与 AND 操作符 [在这里插入图片描述] 拓展2:区分重复的列名...阿里开发规范: 【强制】对于数据库中表记录的查询和变更,只要涉及多个表,都需要在列名前加表的别名(或 表名)进行限定。...说明:对多表进行查询记录、更新记录、删除记录时,如果对操作列没有限定表的别名(或表名),并且操作列在多个表中存在时,就会抛异常。...(或表名)的限制,正常运行两年后,最近在 某个表中增加一个同名字段,在预发布环境做数据库变更后,线上查询语句出现出 1052 异常:Column 'name' in field list is ambiguous
有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。 本章节我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据。...---- 防止表中出现重复数据 你可以在 MySQL 数据表中设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性。...HAVING子句设置重复数大于1。 ---- 过滤重复数据 如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。...mysql> SELECT DISTINCT last_name, first_name -> FROM person_tbl; 你也可以使用 GROUP BY 来读取数据表中不重复的数据: mysql...如果你想删除数据表中的重复数据,你可以使用以下的SQL语句: mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl
) 全连接查询:是在内连接的基础上增加 左右两边没有显示的数据 注意: mysql并不支持全连接 full JOIN 关键字 注意: 但是mysql 提供了 UNION 关键字.使用 UNION...:UNION 会去掉重复的数据,而 UNION ALL 则直接显示结果 示例 复制条件多表查询 1....注:插入数据时,先插入主表中的数据,再插入从表中的数据。 删除数据时,先删除从表中的数据,再删除主表中的数据。...create table t2( id int(10) not null primary key ); 注意: 主键这一行的数据不能重复且不能为空。 还有一种特殊的主键——复合主键。...alter table t4 add unique id_name(id,name); //删除唯一约束 alter table t4 drop index id_name; 注意: 当INSERT语句新插入的数据和已有数据重复的时候
=Article.ar_id) as '文章数目' from Article; SELECT 多表查询 查询每篇文章的阅读次数,所属类型,作者 select ArticleDetail.title,ArticleDetail.reade_times...Article.update_date from ArticleDetail inner join Article on ArticleDetail.ar_id=Article.ar_id ; #LEFT JOIN 会读取左边数据表的全部数据...,即便右边表无对应数据。...;(不包括重复数据) UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据) 列出Author表中和Article中所有不同的作者名:每个列出现一次 select name...ar_id,title,comments_times,praise_times from ArticleDetail where praise_times in (5,8); UNION ALL包含或取消重复的行
SQL语言中,可以通过UNION 或 ALL将多个SELECT语句的查询结果合并输出,这两个关键字的使用说明如下: UNION:利用该关键字可以将多个SELECT 语句的查询结果合并输出,并删除重复行...ALL:利用该关键字可以将多个SELECT 语句的查询结果合并输出,但不会删除重复行 在使用UNION或ALL关键字将多个表合并输出时,查询结果必须具有相同的结构并且数据类型必须兼容,另外使用UNION...SQL表达式,subquery包含某结果集的子查询 多表嵌套查询的原理:无论是多少张表进行嵌套,表与表之间一定存在某种关联,通过WHERE子句建立此种关联实现查询 六、嵌套查询在查询统计中的应用 实现多表查询时...利用SQL语句中的UNION,可以将不同表中符合条件的数据信息显示在同一列中。...on a.id=b.id WHERE b.id=(SELECT id FROM tb_demo065 WHERE tb_demo065.name=’$_POST[text]’) 总之,实现表与表之间的关联的本质是两表之间存在共同的数据项或者相同的数据项
多表查询 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。...一个案例引发的多表连接 1.1 案例说明 [在这里插入图片描述] 查询员工名为'Abel'的人在哪个城市工作?...FROM departments WHERE department_id = 80; SELECT * FROM locations WHERE location_id = 2500; 从多个表中获取数据...出现笛卡尔积的错误,错误的原因:缺少了多表的连接条件 #错误的实现方式:每个员工都与每个部门匹配了一遍。...在MySQL中如下情况会出现笛卡尔积: 查询员工姓名和所在部门名称SELECT last_name,department_name FROM employees,departments; SELECT
前言 学习SQL多表查询,本文就介绍MySQL数据库中联表查询方法 一、MySQL中有几种联表查询方法?...内连接:inner join 或 join 左外连接:left join 右外连接:right join 全连接:Mysql是不支持全连接的,可以利用union合并结果集实现全连接效果 等值连接:where...和内连接一样 笛卡尔积:两张或以上的表数据的 “爆炸” 集合 ”导入素材:“ create table table_1(id int); create table table_2(id int)...,它们的交集取决于 on 后面的条件 2.左外连接 select * from table_1 t1 left join table_2 t2 on t1.id=t2.id; 左外连接取表之间的交集以及左表的全部数据...就是多张表的所有数据,但是注意"它们的交集"不能重复出现。
1.2 多表查询 1.2.1 内连接 规则:返回两个表的公共记录 语法: -- 语法一 select * from 表1 inner join 表2 on 表1.公共字段=表2.公共字段 -- 语法二...1.2.3 右外连接 规则:以右边的表为准,左边如果没有对应的记录用null显示 语法: select * from 表1 right join 表2 on 表1.公共字段=表2.公共字段 例题: mysql...2、如果没有同名字段就返回笛卡尔积 3、同名的连接字段只显示一个,并且将该字段放在最前面 1.2.6 using using用来指定连接字段 mysql> select * from stuinfo...,优化的规则和自然连接是一样的; 1.2.7 练习 1、显示地区及每个地区参加笔试的人数,并按人数降序排列 -- 第一步: 显示地区及每个地区参加笔试的人数 mysql> select stuaddress...| | 北京 | | 天津 | | NULL | +------------+ 6 rows in set (0.00 sec) -- 第二步:去重复
Mysql数据库-多表查询案例 我们在公司开发中,根据不同的业务需求往往需要通过2张及以上的表中去查询需要的数据。所以我们有必要学习2张及以上的表的查询。其实不管是几张表的查询,都是有规律可循的。...准备数据 -- 部门表 CREATE TABLE dept ( id INT PRIMARY KEY PRIMARY KEY, -- 部门id dname VARCHAR(50), -- 部门名称...JOIN salarygrade s ON e.job_id=j.id AND e.dept_id=d.id AND e.salary BETWEEN s.losalary AND hisalary; 多表查询规律总结...不管我们查询几张表,表连接查询会产出笛卡尔积,我们需要消除笛卡尔积,拿到正确的数据。...(条件数量=表的数量-1),每张表都要参与进来 多表连接查询步骤:3.1. 确定要查询哪些表 3.2. 确定表连接条件 3.3. 确定查询字段 2.4 练习4 查询经理的信息。
首先,为了方便说明问题,创建两个表emp(雇员信息)和dept(雇员部门信息),其数据如下: 在之前的博客中,我们分享了单表查询的方法,但是在实际应用中,我们要查的数据很可能不在同一个表中...多表查询如果不加任何条件,得到的结果称为笛卡尔积。 例如,查找雇员名、雇员工资以及部门所在的名字。...3.显示每个部门的信息(部门名、编号、地址)和人员数量 这里有两种方法可以使用,但是经验证,当数据非常多的时候from子查询的效率是高于多表查询的。...删除表中的重复记录 已知一个表tt中有重复的数据 创建一张空表tmp_tt,空表的结构与表tt的结构相同;create table tmp_tt like tt; 将tt表进行distinct,将数据导入空表中...,可以使用union,union all集合操作符 union操作符用于取得两个结果的并集,并再自动去掉重复行 查找工资大于2500和职位Manger的人 2. union all 与
浅记sql中多表查询的相关语法 笛卡尔积 单表查询:select * from table1; 多表查询:select *from table1,table2; id name age status...女 3 禁止 2 李四 12 1 女 2 受限 2 李四 12 1 女 1 正常 3 王五 1 1 男 3 禁止 3 王五 1 1 男 2 受限 3 王五 1 1 男 1 正常 直接采用这种方法进行多表查询...在多表查询时,需要消掉无效的笛卡尔积。...左外连接:查询左表所有数据,以及两张表交集部分的数据。 右外连接:查询右表所有数据,以及两张表交集部分的数据。 自连接:当前表与自身连接查询,必须使用表的别名。....; 加不加all的区别是: 加all:直接将查询的结果合并,不去重 没all:将查询的结果合并后去重,没有重复项 #示例,直接将查询的结果合并 select * from user where id>
MySQL多表查询 交叉连接查询 语法:selectfrom 表1 cross join 表2; 或 selectfrom 表1,表2; 这样查询到的结果为两个表中所有数据行的乘积即笛卡尔积...内连接查询: 注意:要查询的表,查询的条件,查询的字段。...隐式内连接:使用where条件消除无用数据 select * from emp,dept where emp.dept_id = dept.id; 查询emp表和dept表中dept_id和id相等的数据...如果左表的某条记录在右表中没有匹配,则在右表中显示为空。(在左表的基础上,符合条件的右表的数据,也就是交集部分)。...如果右表的某条记录在左表中没有匹配,则左表将返回空值。 (在右表的基础上,符合条件的左表的数据,也就是交集部分)。
删除用户数据,我们就需要删除有关用户的所有数据。 主表是有数据的,其他关联表不一定有数据,我们可以用left join 来关联删除的表。 eg:table1 是主表,t2,t3是关联表。
领取专属 10元无门槛券
手把手带您无忧上云