多表查询 * 当我们的一条记录 分散不同的表中时,就需要进行多表查询 例如 一对一 一对多 多对多

1.笛卡尔积查询  意思是将两个表中的所有数据 全部关联在一起
  例如 a表 有2条 b表有3条   一共6条
  会产生大量的错误数据 需要用添加来过滤
select *from 表1,表2,....... where 过滤条件

连接查询
内连接查询 inner jon
  select *from 表1 join 表2 on 关系过滤条件
  两边的数据必须完全匹配成功才显示
    select *from emp join dept on dept.id = emp.dept_id;

外连接查询 不常用(不应该出现这种没有正确关联的数据)
左外连接   left join
  左边表的数据无论是否匹配成功 都要全部显示
    select *from emp left join dept on dept.id = emp.dept_id;
右外连接   right join
  右边表的数据无论是否匹配成功 都要全部显示
    select *from emp right join dept on dept.id = emp.dept_id;
全外连接
  mysql不支持   可以用合并查询union来 将 左外连接和右外连接合并
  select *from emp left join dept on dept.id = emp.dept_id
  union
  select *from emp right join dept on dept.id = emp.dept_id;

on 专门用于筛选出正确的匹配关系 只能与join一起使用
但是在join 中 可以把on 换成where
反过来 在普通查询中不可以使用on
通常在连接查询 join中推荐使用on

连接查询解决问题的思路
1.先联合查询   select *from emp join dept
2.on 来筛选正确关系 on dept.id = emp.dept_id
3. where 来进行额外的条件过滤 where dept.id = 1
select *from emp join dept on dept.id = emp.dept_id where dept.id = 1;

多对多关系的案例:
  egon老师教过哪些人?

三表联查

create table stu(id int primary key auto_increment,name char(10));

create table tea(id int primary key auto_increment,name char(10));

create table tsr(id int primary key auto_increment,t_id int,s_id int,

foreign key(s_id) references stu(id),

foreign key(t_id) references tea(id));

insert into stu values(null,"张三"),(null,"李四");

insert into tea values(null,"egon"),(null,"wer");

insert into tsr values(null,1,1),(null,1,2),(null,2,2);


select tea.name,stu.name from tea join tsr join stu
on tea.id = tsr.t_id and stu.id = tsr.s_id
where tea.name = "egon";

MySQL多表查询 三表查询 连接查询的套路的更多相关文章

  1. MYSQL初级学习笔记五:连接查询!(视频序号:初级_37-41)

    知识点七:连接查询(37-41) 什么是连接查询: 连接查询是将两个或两个以上的表按某个条件连接起来,从中选取需要的数据.连接查询是同时查询两个或两个以上的表时使用的.当不同的表中存在相同意义的字段时 ...

  2. MySQL常用查询命令(连接查询&子查询)

    多张表联合起来查询即为连接查询,可分为: 内连接:等值连接.非等值连接.自连接 外连接:右外连接.左外连接 也就是先把多张表通过某种指定条件用join...on...语法连接起来,然后再进行where ...

  3. SQL基础--查询之二--连接查询

    SQL基础--查询之二--连接查询

  4. MySQL学习(四) SQL连接查询

    更多情况下,我们查询的数据来源于多张表,所有有必要了解一下MySQL中的连接查询. SQL中将连接查询分成四类:交叉连接,内连接,外连接和自然连接. 数据准备 student表 -- -------- ...

  5. MySQL学习笔记(十二)__连接查询(一)

    连接查询含义:又称多表查询,当查询的字段来自多个表时,就会用到连接查询 笛卡尔乘积现象:表1 有 m 行,表2 有 n 行,结果 = m*n 行发生原因:没有有效的连接条件如何避免:添加有效的连接条件 ...

  6. Mysql教程:(四)连接查询

    连接查询 1.左连接查询: mysql> select stu.*,sc.*,maths+sc.chinese+sc.english from student stu left join sco ...

  7. mysql给表添加外键并查询

    CREATE TABLE `heart` ( `heart_ID` ) NOT NULL AUTO_INCREMENT, `heart_name` ) CHARACTER SET utf8 NOT N ...

  8. Dapper 多表(三表以上)查询小技巧

    在使用Dappr做查询的时候遇到多表查询,之前多是两张表,现在出现三张表或者更多.两表的时候使用splitOn进行分割,splitOn的默认值是Id.在我建库的时候,主键ID并不都是这个名字.当出现三 ...

  9. mysql过滤表中重复数据,查询相同数据的特定一条

    待操作的表如下: p.p1 { margin: 0; font: 16px Menlo; color: rgba(0, 0, 0, 1) } span.s1 { font-variant-ligatu ...

  10. SQL多表连接查询以及mysql数据库、sqlserver数据库常见不同点

    mysql数据库表及数据准备语句: USE test; DROP TABLE IF EXISTS `teacher_table`; DROP TABLE IF EXISTS `student_tabl ...

随机推荐

  1. Coursera, Deep Learning 1, Neural Networks and Deep Learning - week3, Neural Networks Basics

    NN representation 这一课主要是讲3层神经网络 下面是常见的 activation 函数.sigmoid, tanh, ReLU, leaky ReLU. Sigmoid 只用在输出0 ...

  2. jupyter notebook出现cannot import name 'create_prompt_application'问题(Died Kernel)

    应该是在安装其它python第三方库时更新了prompt-toolkit版本,降级到下面的版本即可: sudo pip install 'prompt-toolkit==1.0.15'

  3. bootstrap table 冻结列 ie 兼容

    修改前: Chrome效果 Ie11效果 修改后: Ie11效果 修改bootstrap-table-fixed-columns.js文件 修改其中的initBody方法 修改为

  4. VS 中NuGet 尝试还原程序包时出错"*"已拥有为"**"定义的依赖项

    之前从Git检出项目以后,项目编译不能通过,发现是缺少依赖的外部插件,于是通过NuGet去获取项目依赖的插件,如何通过NuGet恢复使用的插件请使用NuGet还原项目插件. 但是就是在使用NuGet还 ...

  5. Codeforces712E

    传送门 here 题意: 有n个赌场,第i个赌场的胜率为$ P_i$,在第i个赌场若取胜则到达第$ i+1$个赌场,反之到达第$ i-1$个赌场 定义统治赌场$ L...R$为从赌场$ L$开始,从赌 ...

  6. Windows 7 SP1无人值守自动应答文件制作

    使用U盘安装Windows系统时,很多人都会使用UltraISO工具来制作U盘启动盘,然后插入到电脑中加以安装.系统的安装过程中,需要一步一步手动选择或者输入配置,Windows是支持无人值守自动应答 ...

  7. python - 编程规范问题

    软件目录结构规范alex_老男孩:为什么要设计好目录结构?“设计项目目录结构”,就和“胆码编码风格”一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度:    1.一类同学认为,这种个人 ...

  8. Thymeleaf在前台下拉列表获取后台传的值

    Thymeleaf在前台下拉列表获取后台传的值 后台添加代码: /** * 新增机构 */ @GetMapping("/add") public String add(ModelM ...

  9. python,os.path简单用法

    #首先导入os包 import os#引入time模块是因为需要将浮点型的时间转为东八区时间 import time # basename(path),去掉路径名称,单独返回文件名 f = os.pa ...

  10. [转] 理解CheckPoint及其在Tensorflow & Keras & Pytorch中的使用

    作者用游戏的暂停与继续聊明白了checkpoint的作用,在三种主流框架中演示实际使用场景,手动点赞. 转自:https://blog.floydhub.com/checkpointing-tutor ...