首页
学习
活动
专区
圈层
工具
发布

mysql多表的关联查询

1、多表关系 在数据表中,各个表结构之间存在着各种关系(一对一、一对多、多对多)。 一对一关系: 示例:学生与学生详情的关系,一个学生对应一个详细情况,一个详细情况对应一个学生。...实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的UNIQUE。 一对多关系: 示例:学生与班级的关系,一个班级对应多个学生,一个学生对应一个班级。...实现:在多对多关系中,建立第三张中间表,中间表至少包含两个外键,分别关联两方主键 -- 一方,主表 CREATE TABLE dept( d_id INT PRIMARY KEY AUTO_INCREMENT...-- 也成主从表为父子表; -- 4) 先删除从表数据再删除主表数据 -- 正确逻辑 -- 5) 外键约束允许为空但不能是错的 update emp set d_id=null where e_id=...-- 两个表的等值条件; -- 2.学生选了什么课,每一课得了多少分 3个表 SELECT s.s_name 学生姓名,c.c_name 课程名,sc.score 成绩 from student

1.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL的单表多表查询

    1.获取每个部门的员工数 2.获取每个部门的最高工资 3.获取男生人数和女生人数 #提示:如果先分组,必须要把全局的sql模块改为ONLY_FULL_GROUP_BY #修改方法:   1.登录进去改mysql...| +----+------------+ 5 rows in set (0.00 sec) #从5开始,即先查询出第6条,然后包含在这一条在内让后查5条,也就是6-10 2.多表查询 #多表查询的语法...发现department表中id=203部门在employee中没有对应的员工,发现employee中id=6的员工在department表中没有对应关系 #查看两个表的交叉连接 mysql> select...employee和department表,并且employee表中的age字段值必须大于25,即找出年龄大于25岁的员工以及员工所在的部门 mysql> select employee.name,department.name...(2)将查出的结果作为临时表,再对根据临时表的dep_id和employee的dep_id作为筛选条件将employee表和临时表进行内连接。

    16.2K40

    ShardingSphere水平分片、多表关联、绑定表、广播表

    2.4、行表达式 2.5、分片算法配置 2.6、分布式序列算法 3、多表关联 3.1、创建关联表 3.2、创建实体类 3.3、创建Mapper 3.4、配置关联表 3.5、测试插入数据 4、绑定表 4.1...,自动依赖数据库的主键自增策略 @TableId(type = IdType.AUTO) 3、多表关联 3.1、创建关联表 在server-order0、server-order1服务器中分别创建两张订单详情表...多表关联查询会出现笛卡尔积关联。 如果配置绑定表:测试的结果为4个SQL。 多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。 绑定表:指分片规则一致的一组分片表。...使用绑定表进行多表关联查询时,必须使用分片键进行关联,否则会出现笛卡尔积关联或跨库关联,从而影响查询效率。...5、广播表 4.1、什么是广播表 指所有的分片数据源中都存在的表,表结构及其数据在每个数据库中均完全一致。 适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表。

    4.2K20

    MySQL数据库(九):修改表结构

    前言: 1.修改表结构的时候受表中已存储数据的限制 2.查看表结构 desc 表名; 1.修改表结构 格式: alter  table  表名  修改动作; 2.修改动作 1.1 add 添加新字段 (新添加的字段默认追加在已有字段的下方) 格式: add  字段名(宽度) 约束条件,add  字段名(宽度) 约束条件; 例子: 添加字段...格式: alter  table  源表名  rename  [to] 新表名; 例子: 将t20表明修改为newt20 alter table  t20 rename newt20; 3.复制表...*注:源表表结构中key列的值不会被复制给新表 格式: create table 新表名  SQL查询; 例子: 复制newt20表的所有字段到t200表 create table t200 select...* from newt20; 值复制newt20表中的name,loves字段到t201表 create table t201 select name,loves from newt20; 4.只复制源表的表结构

    9.8K50

    ②【MySQL表操作】 数据库表的创建、查询、修改、删除

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 数据库表的创建、查询、...修改、删除 1....数据类型 数据库表中的数据类型: 数值类型: TINYINT:小整数 SMALLINT:大整数 MEDIUMINT:大整数,范围大于SMALLINT INT/INTEGER:大整数,范围大于MEDIUMINT...DDL - 表操作 DDL-表操作: 查询表信息 ①查询当前数据库所有表 SHOW TABLES; ②查询表结构 DESC 表名; ③查询指定表的建表语句 SHOW CREATE TABLE 表名; 创建表操作...旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束]; -- 案例 -- 将tb_emp表的nickname字段修改为username,类型varchar(30) ALTER TABLE

    5.1K50

    mysql修改数据库表和表中的字段的编码格式的修改

    本文链接:https://blog.csdn.net/luo4105/article/details/50804148 建数据库的时候,已经选择了编码格式为UTF-8 但是用PDM生成的脚本导进去的时候却奇怪的发现表和表的字段的编码格式却是...GBK,一个一个却又觉得麻烦,在网上找了一下办法 一个是修改表的编码格式的 ALTER TABLE `table` DEFAULT CHARACTER SET utf8; 但是虽然修改了表的编码格式,...但是字段的编码格式并没有修改过来,没有什么卵用 又发现一条语句,作用是修改字段的编码格式 ALTER TABLE `tablename` CHANGE `字段名1` `字段名2` VARCHAR(36...) CHARACTER SET utf8 NOT NULL; 但是一次只能修改一个字段,还是很麻烦,不方便。...最后找到这么一条语句 alter table `tablename` convert to character set utf8; 它可以修改一张表的所有字段的编码格式,顿时方便多了

    11.2K20

    MySQL修改表的字段

    MySQL修改表的字段 MySQL 修改表字段的方法有两种: ALTER TABLE MODIFY COLUMN。...其语法如下: ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型; 其中,表名 表示要修改的表名,字段名 表示要修改的字段名,字段类型 表示修改后的字段类型。...例如,修改表 users 的字段 username 的类型为 VARCHAR(50),可以使用以下 SQL 语句: ALTER TABLE users MODIFY COLUMN username VARCHAR...其语法如下: ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 [属性]; 其中,表名 表示要修改的表名,字段名 表示要修改的字段名,字段类型 表示修改后的字段类型,属性 表示修改后的字段属性...例如,将表 users 中的字段 age 的数据类型修改为 INT,并设置默认值为 0,可以使用以下 SQL 语句: ALTER TABLE users MODIFY COLUMN age INT DEFAULT

    9.8K10

    MySQL之单表查询、多表查询

    # 进入数据库singe_t1 Database changed mysql> create table emp( # 创建表emp -> id int...,这样起名只是临时性的,显示的结果也是临时的,所以和数据库中实际表名没有关系。...多个表之间的查询一般都是在 表之间存在某种逻辑关联的情况下进行的查询,这种逻辑上的关联其实就是表中某个字段名和另外一个表中的字段名存在一个一一对应的关系或者关联。...# 将2张表关联到一起的操作,有专门的方法 # 1、内连接(inner join):只取两张表有对应关系的记录 mysql> select * from emp inner join dep on emp.dep_id...,也可以通过其别名的方式把它作为一张虚拟表去跟其他表做关联查询 额外题: 部门中薪资超过部门平均薪资的员工姓名及薪资 mysql> select t1.name,t1.salary,t1.post,t2

    25K30

    java进阶|MySQL数据库系列(四)查询操作和多表关联查询

    文章参考:https://blog.csdn.net/gaoweizang/article/details/52859449 先讲述一下为什么在写这样的文章吧,由于好久好久之前一直在用MySQL这样的关系型数据库...,对于sql的编写还是熟练操作的,后面项目慢慢用到了非关系型数据库Mongo以及内存级别数据库redis这样的数据库,导致mysql用的越来越少,以至于去写sql不是很熟练了,所以就有了这个系列的文章,...二,多表关联查询 create table t_bookType ( id int primary key auto_increment, bookTypeName...合并查询 1,union关键字 使用union关键字时,数据库系统会将所有的查询结果合并到一起,然后去掉相同的记录。...到这里就结束了对表常用的操作,无论它是单表操作还是多表的连接查询操作,这也是自己总结最全面的一篇关于多表连接查询的文章了。

    2.8K20

    数据库_mysql多表操作

    多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。...且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习多表方面的知识。 ?...l 一对一关系:(了解) n 在实际的开发中应用不多.因为一对一可以创建成一张表. n 两种建表原则: u 外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一unique。...u 外键是主键:主表的主键和从表的主键,形成主外键关系。...我们通过主表的主键和从表的外键来描述主外键关系,呈现就是一对多关系。 外键特点: u 从表外键的值是对主表主键的引用。 u 从表外键类型,必须与主表主键类型一致。

    2.8K80

    【MySQL数据库】多表关系与多表联合查询

    目录 MySQL多表关系 一对一 一对多 多对多 MySQL外键约束 创建外键 数据插入 删除 多表联合查询 交叉连接查询 内连接查询 外连接查询 子查询关键字 自关联 MySQL多表关系 MySQL...varchar(20), -- 员工所属部门 constraint emp_fk foreign key (dept_id)references dept (deptno) –- 外键约束 ); 方式二 修改表添加外键...-- 注意给从表添加数据时,外键列的值不能随便写,必须依赖主表的主键列 删除 主表的数据被从表依赖时,不能删除,否则可以删除 从表的数据可以随便删除 多表联合查询 交叉连接查询 •...,推荐使用EXISTS关键字 select …from …where exists(查询语句) 自关联  自关联....:自关联的基本含义就是 自己join自己,用一张表搞定多张表可以达到的效果. 需要注意的是,当表自关联的时候,需要使用 as 起别名,防止关联的时候引发重名的问题。

    3.9K20

    面试官:为什么mysql不建议执行超过3表以上的多表关联查询?

    概述 前段时间在跟其他公司DBA交流时谈到了mysql跟PG之间在多表关联查询上的一些区别,相比之下mysql只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort-merge...join)与散列连接(hash join),而PG是都支持的,而且mysql是往简单化方向去设计的,如果多个表关联查询(超过3张表)效率上是比不上PG的。...下面也对mysql多表关联这个特性简单探讨下~ MySQL多表关联查询效率高点还是多次单表查询效率高?...A,B两个表数据规模十几万,数据规模都不大,单机MySQL够用了,在单机的基础上要关联两表的数据,先说一个极端情况,A,B两个表都没有索引,并且关联是笛卡尔积,那关联结果会爆炸式增长,可能到亿级别,这个时候网络...另外对于MySQL的查询缓存来说,如果关联中的某个表发生了变化,那么就无法使用查询缓存了,而拆分后,如果某个表很少改变,那么基于该表的查询就可以重复利用查询缓存结果了。

    9.8K00

    【MySQL数据库】多表关系与多表联合查询

    ​​目录MySQL多表关系一对一一对多多对多MySQL外键约束创建外键数据插入删除多表联合查询交叉连接查询内连接查询外连接查询子查询关键字自关联MySQL多表关系MySQL表与表之间的三种关系一对多关系...在多的一方建立外外键指向一的一方​编辑多对多 下表为多对多关系,由下表可知多对多关系的中间表至少需要2个外键​编辑 MySQL外键约束创建外键 格式: constraint foreign...varchar(20), -- 员工所属部门 constraint emp_fk foreign key (dept_id)references dept (deptno) –- 外键约束 );方式二 修改表添加外键...-- 注意给从表添加数据时,外键列的值不能随便写,必须依赖主表的主键列删除主表的数据被从表依赖时,不能删除,否则可以删除从表的数据可以随便删除多表联合查询​编辑 交叉连接查询 •交叉连接查询返回被连接的两个表所有数据行的笛卡尔积...:自关联的基本含义就是自己join自己,用一张表搞定多张表可以达到的效果. 需要注意的是,当表自关联的时候,需要使用as 起别名,防止关联的时候引发重名的问题。

    4.2K30

    MySQL数据库3分组与单表、多表查询

    having > order by > limit 三、多表操作 外键 主关键字(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。...公共关键字(Common Key)在关系数据库中,关系之间的联系是通过相容或相同的属性或属性组来表示的。如果两个关系中具有相容或相同的属性或属性组,那么这个属性或属性组被称为这两个关系的公共关键字。...如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。...使用外键的原因: 1.减少占用的内存空间 2.只需要修改主表的数据,从表的数据也会相应的跟着修改 3.1一对多 一对多指一个主表中的数据和从表中的数据是一对多的关系,如下例,一个部门可以有多个员工。...多表联查就是将多个有关系的表放在一起查,使用的语句有: left join……on查询时以左边的数据为主 right join ……on查询时以右边的数据为主 mysql> insert into department

    7.2K50

    mysql 多表关联查询 实现 全文匹配的 模糊搜索接口 SQLmysql 多表关联查询 实现 全文匹配的 模糊搜索接口 SQL

    mysql 多表关联查询 实现 全文匹配的 模糊搜索接口 SQL SELECT tagDeptUserRel.* FROM tag_dept_user_rel tagDeptUserRel inner...tg.name from tag_group tg where tg.id = tagGroupShowUserRel.show_group_id)) like CONCAT('%','之剑','%') ; mysql...中FIND_IN_SET的使用方法 在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,...这时候mysql的FIND_IN_SET函数就派上用场了,下面来具体了解一下。...null或记录 下面举例说明 test表中有如下字段及值 下面我想查询area中包含”1″这个参数的记录 SELECT * from test where FIND_IN_SET('1',area)

    3.5K20
    领券