对mysql多表查询的理解
来源:互联网 发布:js对象数组重新赋值 编辑:程序博客网 时间:2024/05/18 00:00
多表查询就是在多个有逻辑联系的表之间进行的查询,逻辑关系主要是指主外键之间的联系, 在主表中的某个字段的值取自另一个表中的一个字段,就是说主表中的一个字段的值包含于另一个表的一个字段的值的集合里 。这样的话,如果要在主表里插入数据,就必须是对应的字段的值在相应的表中存在,才有可能插入成功,如果不存在,则肯定插入不成功(除非此字段可以为空) 。要实现多表之间的查询就要依靠表连接或者是子查询的方式实现:
表连接:
普通多表查询:
select 列1... from 表1,表2...
where condition
...
在from之后可以有很多表,每个表之间用,隔开,from后面的表会做笛卡尔积
表与表之间做笛卡尔积,然后就能查询出来了
内连接:
select 列
from 表1 别名 inner join 表2 别名 on 表1.列=表2.列,...
condition...
from开始,表1与表2进行笛卡尔积,每匹配一行的数据,就会通过on后条件判断
是否成立,就将该行匹配的信息存放到临时表,否则不存放
外连接:
左外连接:左表中所有的记录都会被放到结果`集中,无论是否在右表是否存在匹配记录
语法:select 列
from 表1 left outer join 表2 on 表1.列=表2.列
[left outer join 表3 on...]
右外连接:不管是否成功匹配连接条件都会返回右表中的所有记录
语法: select 列
from 表1 right outer join 表2 on 表1.列=表2.列
[left outer join 表3 on...]
全外连接:(在mysql中没有全外连接,可以使用union实现
即是select...左连接 union select ... 右连接...
表1 full outer join 表2 on ...
自连接:
一张表与自己进行连接,
select 列..
from 表1 别名,表1 别名2
where...
...
select e1.empno,e1.ename,e1.mgr e2.empno,e2.ename
from emp e1,emp e2
where e1.empno = e2.mgr;
ex:查找每个员工的直接上级领导的姓名:
select ifnull(e1.ename,'boss') 领导,e2.ename
from emp e1 right outer join emp e2 on e1.empno=e2.mgr;
子查询:
在查询中还可以有查询。外查询叫主查询,内部的叫子查询
子查询先运行,子查询的结果作为主查询的值使用
--子查询返回单个值 =
--子查询返回多行一列 in
--子查询返回一行多列 (,)in(,)
--子查询返回多行多列 将条件一个一个拆开,然后将子查询得到的表在进行连接
连接之后可按下一步的条件进行查询,以此类推下去即可得到
符合条件的结果。在条件拆分的时候就是要月简单越好,并且
条件之间有相应的关系,最好是包含的关系,这样查询出来的
结果肯定是没有错的,并且在逻辑上也是很通的。也就各种子查询
并列或者是一个是另一个的子查询。
注意:
笛卡尔积其实就是前后先对应,然后就是后前对应,再是个个匹配,再按照条件去掉一部分,留下需要的形成一张新表。
- 对mysql多表查询的理解
- mysql 多对多,三表查询
- MySQL:对join的理解
- 从一个MySQL left join优化的例子加深对查询计划的理解
- 从一个MySQL left join优化的例子加深对查询计划的理解
- 从一个MySQL left join优化的例子加深对查询计划的理解
- 从一个MySQL left join优化的例子加深对查询计划的理解
- 从一个MySQL left join优化的例子加深对查询计划的理解
- MySQL多对多查询
- Mysql 对海量数据的查询优化
- MySQL查询对NULL的处理
- MySQL 对重复记录的查询
- mysql flush table 对查询的影响
- MySQL查询对NULL的处理
- MySQL查询对NULL的处理
- MySQL查询对NULL的处理
- mysql中的索引对查询的影响
- mysql 关于对时间字段的查询
- win10升级后 IE 火狐 谷歌浏览器 不能上网 解决办法
- 各种安装程序下载
- ora 12560 协议适配器错误
- 黑马程序员——流程控制
- 算法设计与分析:第五章 回溯法 5.8流水作业车间调度
- 对mysql多表查询的理解
- Android Context与GetApplicationContext的区别及使用
- 算法设计与分析:第五章 回溯法 5.9连续邮资问题
- 如何编写一个JSON解析器
- 黑马程序员——数组
- ZOJ Problem Set - 3818 Pretty Poem
- C 语言基础
- HDU 1556 Color the ball
- Python中导入子文件夹中的模块