有表如下:
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;尽量别做笛卡尔集。
相关推荐
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支持...
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支持...
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from ...
上一步 (5276) 中的 Last Counter 值必须与以下注册表项内 Perflib\009 中 Counter 项的最大值相等,上一步 (5277) 中的 Last Help 值必须与以下注册表项内 Perflib\009 中 Help 项的最大值相等:[HKEY_LOCAL_...
实现网站全文检索有几种常见方案,比如应用数据库全文检索,开源搜索引擎,使用Google API等, 本文我们将就如何使用SQL Server 2005多快好省地建立网站全文检索展开探讨。 二、全文检索技术说明 1、应用背景 ...
这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码): SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9" 注意:以上...
因此在嵌入方式下,除了数据查询语句一次查询一条记录外,还有几种与游标 有关的语句: 游标的定义、打廾、关闭、拨动语句 游标定位方式的数据修改与删除语句。 为了有效维护数据库的完整性和一致性,支持 的并发...
l 可以用普通的SQL登录方式添加在线日志(Online Log), l 直接选择LDF文件来添加离线日志(OffLine Log) l 添加备份文件 登录之后界 功能介绍: 1、 Log Summary 日志文件的概要信息。 2、 Load ...
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支持...
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支持...
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支持...
在编写SQL语句时我们应清楚优化器根据何种原则来删除索引,这有助于写出高性能的SQL语句。 二、SQL语句编写注意问题 下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。在这些where子句中,即使...
l 可以用普通的SQL登录方式添加在线日志(Online Log), l 直接选择LDF文件来添加离线日志(OffLine Log) l 添加备份文件 登录之后界 功能介绍: 1、 Log Summary 日志文件的概要信息。 2、 Load Analysis 列出...
最大优点是可以包含其他 SELECT 语句,使用能够动态地建立 WHERE 子句。 如 SELECT prod_id,prod_price,prod_name FROM Products WHERE vend_id IN(‘DELL’,’RBER’,’TTSR’); 八、单行函数: 函数一般在数据...
8:用文本方式将数据装入数据库表中(例如D:/mysql.txt) mysql> LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE MYTABLE; 9:导入.sql文件命令(例如D:/mysql.sql) mysql>use database; mysql>source d:/mysql....
MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql="select sum(字段名) as 别名 from 数据表 where 条件表达式" set rs=conn....
PL/SQL Developer为简化日常开发专门提供了几种工具。使用这些工具,您可以重新编译全部不合法对象、查找数据库源中文本、导入或导出表格、生成测试数据、导出文本文件、监控dbms_alert和dbms_pipe事件、浏览会话...
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from ...
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.) select a,b,c from tablename ta where a=(select max(a) from ...