数据库小技能:子查询

简介: 查询中含有查询

I 预备知识

1.1 组函数

多行函数,输入一组记录,输出一行记录。

maxminavgsumcount函数。

例子:查询相同姓名的记录

select *  from emp where name=(select name from emp where count(name>=2));

1.2 分组查询 group by

  1. 如果在select之后有某个字段名称,那么此字段必须作为分组的条件之一。
select deptno,max(sal) from emp group by deptno;--在分组查询中,select 之后除了组函数以外,查询的字段名称和个数最好和group by 之后的字段名称和个数一致。
  1. 过滤分组查询可以使用having关键字,having用于过滤分组之后的结果
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;--having不能单独使用,它必须出现在group by 之后。
  1. where 不可接分组函数
  2. 分组查询的执行顺序: 先执行from,在执行where,或在分组,最好才执行select。

II 子查询

查询中含有查询

2.1 非关联子查询

单列子查询:查询结果是一行一列

单列子查询可以使用比较运算符(<,>,=,!=,<>)
select enamel ,sal  rom emp where sal>(select  sal  from  emp where  ename='SOTT');

单行子查询:子查询的结果是一行多列

select enamel,sal。deptno from emp where (deptno,sal) in(select deptno,max(sal) from emp group  by  deptno having deptno=10);

多行子查询:子查询的结果是多行一列

select *  from emp where deptno in(select deptno from emp where job='CLERK');

注:=anyin的效果一样,匹配子查询的所有值

>any 大于最小的

<any 小于最大的

<all 小于最小的

>all大于最大的

多列子查询:子查询的结果是多行多列

select enamel,sal。deptno from emp where (deptno,sal) in(select deptno,max(sal) from emp group  by  deptno );

2.2 关联子查询(循环主查询)

子查询和主查询进行关联查询

select *  from emp out where sal>(select avg(sal) from emp where out.deptno=deptno group by deptno);
--先将主表out的第一条记录的deptno传到子查询,并将查询结果返回到主查询,主查询将符合条件的记录放入到结果集中,依次循环该过程,直到循环到主表的最后一条记录。

例子

select *  from emp out where empno in(select mgr from emp);;--查询出所有的领导

select * from emp out where exists(select 'x' from emp where  mgr=out.empno);
--exists,假如存在,子查返回的是true,并不关注子查询返回的具体的结果。

目录
相关文章
|
6月前
|
SQL 数据库
数据库开发之子查询案例的详细解析
数据库开发之子查询案例的详细解析
34 0
|
6月前
|
SQL 数据库
数据库开发之子查询的详细解析
数据库开发之子查询的详细解析
44 0
|
6月前
|
存储 关系型数据库 MySQL
MySQL技能完整学习列表5、数据库操作——1、创建数据库和表——2、修改表结构(ALTER TABLE)
MySQL技能完整学习列表5、数据库操作——1、创建数据库和表——2、修改表结构(ALTER TABLE)
226 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库子查询练习——EXISTS(存在)
MySQL数据库子查询练习——EXISTS(存在)
58 1
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库子查询——in多个数据查询的示例
MySQL数据库子查询——in多个数据查询的示例
37 1
|
5月前
|
关系型数据库 分布式数据库 数据库
数据库内核那些事|PolarDB IMCI让你和复杂低效的子查询说拜拜
PolarDB IMCI(In-Memory Column Index)确实是数据库领域的一项重要技术,特别是当它面对复杂和低效的子查询时,表现尤为出色。以下是关于PolarDB IMCI如何助力解决
|
3月前
|
人工智能 小程序 关系型数据库
【MySQL】黑悟空都掌握的技能,数据库隔离级别全攻略
本文以热门游戏《黑神话:悟空》为契机,深入浅出地解析了数据库事务的四种隔离级别:读未提交、读已提交、可重复读和串行化。通过具体示例,展示了不同隔离级别下的事务行为差异及可能遇到的问题,如脏读、不可重复读和幻读等。此外,还介绍了在MySQL中设置隔离级别的方法,包括全局和会话级别的调整,并通过实操演示了各隔离级别下的具体效果。本文旨在帮助开发者更好地理解和运用事务隔离级别,以提升数据库应用的一致性和性能。
142 2
【MySQL】黑悟空都掌握的技能,数据库隔离级别全攻略
|
3月前
|
SQL 数据库 数据安全/隐私保护
什么是数据库子查询?
【8月更文挑战第2天】
138 14
什么是数据库子查询?
|
6月前
|
NoSQL 关系型数据库 数据挖掘
编程语言和数据库:你的技能基础
编程语言和数据库:你的技能基础
|
4月前
|
存储 缓存 监控
如何优化数据库子查询?
【7月更文挑战第22天】如何优化数据库子查询?
94 15