mysql 子查询(五)之主查询和子查询可以不是同一张表
2018-02-27 22:19
274 查看
子查询必须跟主查询是同一张表吗?
不是。主查询和子查询可以不是同一张表。
示例:查询部门名称是sales的员工信息。
既然是查询员工信息,那么主查询就是查员工表。员工表里只有部门号,而部门表中有部门名称和部门号。子查询,就是查部门表中的部门号。即如下所示:select *
from emp
where deptno=(select deptno
from dept
where dname= sales)除了上述的办法解决这个问题外,我们还可以使用多表查询来解决这类问题。即如下所示:
select e.*
from emp e, dept d
where e.deptno=d.deptno and d.dname=sales那么,这2种方式我们该采用哪种呢?
首先,示例中,子查询有2次from,查询了2次数据库,而多表查询中只有1次from,查询了1次数据库。从理论上来说多表查询的效率是大于子查询的,但如果多表查询的笛卡尔集过大,子查询反而会比多表查询有更高的效率。
这2种方式,没有绝对的正确,应具体情况而定。
不是。主查询和子查询可以不是同一张表。
示例:查询部门名称是sales的员工信息。
既然是查询员工信息,那么主查询就是查员工表。员工表里只有部门号,而部门表中有部门名称和部门号。子查询,就是查部门表中的部门号。即如下所示:select *
from emp
where deptno=(select deptno
from dept
where dname= sales)除了上述的办法解决这个问题外,我们还可以使用多表查询来解决这类问题。即如下所示:
select e.*
from emp e, dept d
where e.deptno=d.deptno and d.dname=sales那么,这2种方式我们该采用哪种呢?
首先,示例中,子查询有2次from,查询了2次数据库,而多表查询中只有1次from,查询了1次数据库。从理论上来说多表查询的效率是大于子查询的,但如果多表查询的笛卡尔集过大,子查询反而会比多表查询有更高的效率。
这2种方式,没有绝对的正确,应具体情况而定。
相关文章推荐
- MySQL 如何对同一张表来查询并update ?
- oracle优化,hint的使用! (系统自动优化有时不是最好的,我们可以手动添加hint来提高查询效率
- Mysql 把查询的数据插入另外一张表
- php的mysql模糊查询,可以允许空值(空值则查询全部)
- mysql查询某个字段在哪一张表中
- mysql 数据库汉字查询不到,数字和英文可以
- MySQL 将查询结果,加入一个自定义固定值字段,插入另外一张表
- 【转】不用程序mysql也可以查询今天、昨天、7天、近30天、本月、上一月的数据
- MySQL IFNULL中可以有select语句;查询一个表中的数据,同时查看另一个表中是否有符合条件的额数据
- mysql查询数据,根据条件更新到另一张表
- mysql以一张表的字段为条件查询另外一张表
- mysql 将查询结果插入一张表
- mysql查询结果集插入到另一张表中
- Mysql删除同一张表的子查询语句
- mysql如何查询不是身份证号(15位和18位都有)的记录
- mysql同一张表各个状态的项目数量筛选查询
- mysql按照每天分组查询数据结果排序不是从1到31而是1后接10
- mysql查询一张表字段在另一张表中出现的次数
- mysql两张表相同数据查询显示其中一张表的字段
- sqlServer里面怎么查询一张表里面有没有自增字段?一张表里面,可以存在两个自增字段吗?