select * from emp where deptno in (select deptno from dept group by deptno) 查询结果为什么会分组

假如select deptno from dept group by deptno 的结果是10,20,那么整条语句的结果就是deptno 为10的先全部查出来,20的后查出来。
但是查询语句如果是select * from emp where deptno in(10,20),则结果只会按emp表中的数据顺序得出结果
实验得出这个分组跟group by没有任何关系,换成select * from emp where deptno in (select distinc(deptno) from dept ) 结果也会分组了
结论是in后面的括号如果是子查询语句,结果就会按子查询结果的顺序得出结果,如果是一组值,就会按表中的数据顺序得到结果
我说这么多就是想请各位大侠解析下题目中sql的执行流程,为什么会分组1(先给5分,答出再加吧)

很简单,为了整个sql语句的执行效率select * from emp where deptno in (select deptno from dept group by deptno) 和select * from emp where deptno in (select distinc(deptno) from dept ) 是等效的
温馨提示:内容为网友见解,仅供参考
无其他回答

select * from emp where deptno in (select deptno from dept group b...
1.首先sql语句从右往左执行。所以先执行select deptno from emp。查询雇员表所有部门编号。2.in代表在...的范围。3.再执行select deptno from dept。查询部门表中所有部门编号。4.总括:查询部门表中的部门编号且在雇员表中的部门编号的范围内。

表dept的字段:DEPTNO(部门编号),EMPNO(员工编号),DEPTNO有重复的记录...
都是字段名啊,可以随便取的 雇员号码,雇员名字,薪资,职位,部门号码 雇员号码,部门号码,部门名字 应该是8个表吧

oracle数据库分组数据库表后有重复值
SELECT * FROM EMP WHERE (DEPTNO, SAL) IN (SELECT DEPTNO, MIN(SAL) FROM EMP GROUP BY DEPTNO)

查询拥有最多的员工的部门的基本信息,如果有多个部
select from dept where deptno in (select deptno from emp group by deptno having count(*) >= ALL (select count(*)from emp group by deptno))

select deptno from emp 问题
select deptno from emp group by deptno having count(*)>1group by 是分组的意思, select deptno from emp group by deptno 这句话的意思是,根据deptuno也就是部门编号分组查询 查询出来所有的部门编号 having count(*)>1 是一个限制条件,在查询出来的结果集的基础之上,找到部门编号数量大于1...

SQL中SELECT中的FROM子句可否带另外一个SELECT
);例2:select子查询出现在from子句中 SELECT ename,job,sal,rownum FROM (SELECT ename,job,sal FROM EMP ORDER BY sal);例3:select子查询出现在select list中,作为一个字段值来返回 SELECT ename,job,sal FROM EMP WHERE deptno in ( SELECT deptno FROM dept WHERE dname LIKE 'A%');...

如何使用SQL语句求出交集
求交集的关键字是 intersect ,例:select * from emp where deptno in (10,20)intersect select * from emp where deptno in (20,30);

pp打打的
select * from dept where deptno in(select distinct deptno from emp);select count(*),deptno from emp group by deptno having count(*)>1;--2.列出薪金比“SMITH”多的所有员工。select * from emp where sal>(select sal from emp where ename='SMITH');--3.列出所有员工的姓名及其直接...

mysql复杂查询--多表查询
子查询是指嵌入在其它sql查询语句中的select语句,也叫嵌套查询 单行子查询是 指只返回一行数据的子查询语句 select * from emp where deptno=(select deptno from emp where ename='smith');多行子查询指返回多行数据的子查询 使用关键字 in 如果我们的一个子查询,返回的 结果是多列,就叫...

表dept的字段:DEPTNO(部门编号),EMPNO(员工编号),DEPTNO有重复的记录...
select count(*),DEPTNO from dept group by DEPTNO having count(*)>1 delete from dept where EMPNO not in(select max(EMPNO ) from dept where DEPTNO in(select DEPTNO from (select count(*),DEPTNO from dept group by DEPTNO having count(*)>1)))...

相似回答