有表如下:
create table students (sno int, sname varchar(10), age int); insert into students values(1,'AARON',20); insert into students values(2,'CHUCK',21); insert into students values(3,'DOUG',20); insert into students values(4,'MAGGIE',19); insert into students values(5,'STEVE',22); insert into students values(6,'JING',18); insert into students values(7,'BRIAN',21); insert into students values(8,'KAY',20); insert into students values(9,'GILLIAN',20); insert into students values(10,'CHAD',21);
求年龄最大的学生?
方式一,我的第一反应是使用聚焦函数max,相信很多人和我一样。
select * from students where age=(select max(age) from students);
简单明了,两次全表扫描,成本6
方式二,有没有不使用max的方法来求最大呢?使用自连接加比较。
select * from students where age not in (select a.age from students a, students b where a.age< b.age);
先做笛卡尔集,求年龄比任一个小的,再排除他们。三次全表扫描,成本12
方式二的改良
select * from students s1 where not exists (select 1 from students s2 where s1.age<s2.age);
两次全表扫描,成本8
方式三,使用窗口函数
select * from (select students.*,max(age)over() oldest from students) where age=oldest;
一次全表扫描,成本3
我本人也有些意料之外,没想到窗口函数威力巨大。
总结:
优先使用窗口函数,然后才是聚集函数;能用exists,就别用in;尽量别做笛卡尔集。
相关推荐
本文将详细介绍几种SQL去重的方法,并通过具体的示例来解释每种方法的应用场景及其背后的原理。 ### 方法一:使用 `SELECT DISTINCT` `SELECT DISTINCT` 是最常用的去重方式之一,它可以返回指定列中的不同值。...
### SQL分页的几种方法 #### 背景介绍 在数据库操作中,分页是一项非常常见的需求。尤其是在处理大量数据时,为了提高查询效率、减少服务器负担,并为用户提供更好的体验,分页变得尤为重要。SQL提供了多种实现分页...
通过对给定文件中的 SQL 代码进行解析,我们可以看出“求比例”的实现方式主要是利用 SQL 中的聚合函数如 `SUM` 和 `COUNT`,以及分组查询 `GROUP BY` 来完成。同时,合理的数据类型选择如 `decimal` 可以确保计算...
### 50种方法巧妙优化你的SQL Server数据库 在日常的数据库管理与维护工作中,我们经常会遇到查询速度慢的问题,这不仅影响了系统的性能,也降低了用户体验。本文将基于给出的信息,详细介绍可能导致查询速度变慢的...
在SQL中,我们有几种主要的语句类型: 1. **DQL(Data Query Language)**:查询数据,如`SELECT`语句用于获取表中的信息。 2. **DML(Data Manipulation Language)**:数据操纵,包括`INSERT`(插入)、`UPDATE`...
在 SQL Server 中,主要存在以下几种类型的内存缓存: 1. **数据缓存**:当执行 SELECT 查询时,SQL Server 会将查询涉及的数据页加载到内存中。这样做可以避免后续查询同一数据页时重复访问磁盘,显著提升查询速度...
显式类型转换是用cast将一种数据类型的值转换为另一种类型的值的行为,在MaxCompute SQL中支持的显式类型转换包括: * Bigint、Double、String、Datetime、Boolean、Decimal之间的转换 * 显式类型转换可以将double...
主要有内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)等几种类型。 #### 示例1:内连接 - 使用BETWEEN进行范围匹配 ```sql SELECT * FROM salgrades s1 JOIN ( SELECT ...
在开始介绍具体的实现方法之前,我们先来了解一下SQL中与本主题相关的几种数据类型: - **Numeric(precision,scale)**:其中`precision`表示整个数字的最大长度(包括小数点前后),而`scale`表示小数点后的位数。 ...
- **聚合函数**:如求总数(`COUNT`)、求和(`SUM`)、平均值(`AVG`)、最大值(`MAX`)和最小值(`MIN`)。 ##### 3. 高级查询运算符 除了基本的DML和DQL语句外,ArcGIS还支持一些高级查询运算符,如: - **UNION**:...
该方法相对于第一种方法而言,可能稍微慢一些,因为它需要计算最大值并再次进行筛选。但在某些情况下,这种方法可能更优,特别是当`fldSerialNo`字段具有较好的索引时。 ### 使用TOP与ORDER BY组合实现分页 另一种...
8. **聚合函数**:除了COUNT(),其他聚合函数如SUM()计算总和,AVG()计算平均值,MAX()和MIN()找出最大值和最小值。 9. **索引**:索引用于加速查询速度,可以在列上创建。`CREATE INDEX idx_Products_Price ON ...
此方法利用了数据表中的`ID`字段,通过设定一个起始点(通常是上一页的最大`ID`值),然后选取满足条件的前几条记录作为当前页的数据。这种方法同样适用于主键为标识列的情况。 **具体实现** 以下示例展示了如何...
`GROUP BY`子句用于按某一列或多列进行分组,而聚合函数如`AVG`和`MAX`则分别用于计算平均值和最大值。这样的查询对于人力资源分析非常有用,可以帮助了解不同部门的薪资分布情况。 ### 4. 复杂分组与筛选 SQL语句...
SQL*LOADER有两种主要的工作模式:传统路径(CONVENTIONAL PATH)和直接路径(DIRECT PATH),其中直接路径提供了更快的速度,特别适合大型数据仓库的数据加载需求。 #### 二、SQL*LOADER的基本概念与命令 SQL*...
其中,BLOB类型可以存储最多2^16(65,535)个字节的数据,而MEDIUMBLOB则可以存储2^24(16,777,215)字节,LONGBLOB可以存储的最大值为2^32 - 1(4,294,967,295)字节。在默认配置下,MySQL限制单个包大小为1MB,...
9.2.1 为每种数据库编写不同的SQL语句 9.2.2 使用语法交集 9.2.3 使用SQL实体对象 9.2.4 使用ORM工具 9.2.5 使用SQL翻译器 9.3 CowNewSQL翻译器 9.3.1 CowNewSQL支持的数据类型 9.3.2 CowNewSQL支持...
2. **数值函数**:如`SUM()`计算数字列的总和,`AVG()`求平均值,`MIN()`和`MAX()`找出最小值和最大值。 3. **日期/时间函数**:如`DATE_FORMAT()`格式化日期,`YEAR()`提取年份,`MONTH()`和`DAY()`分别获取月份和...
4. MAX:返回一组非 NULL 值中的最大值。 5. MIN:返回一组非 NULL 值中的最小值。 6. SUM:返回一个表达式中所有非 NULL 值的总和。 7. STDEV:根据数据母体的样本返回由表达式提供的所有值的标准差。 8. STDEVP:...
常用的聚合函数包括COUNT(计数)、SUM(求和)、AVG(平均值)、MAX(最大值)、MIN(最小值)、VARIANCE(方差)和STDDEV(标准差)。 4. 字符函数:字符函数主要用于处理字符串数据。文件中提到了如CHR、CONCAT...