这篇文章是 SQL偏移量获取子句
现在,我们了解了如何在Oracle数据库中使用Fetch子句以及指定的偏移量,我们还了解了Fetch子句是Oracle数据库12c中新添加的子句,或者是Oracle数据库12c中添加的新功能。
现在考虑下面的例子:
假设我们有一个名为 我的桌子 以下数据:
ID NAME SALARY ----------------------------- 1 Geeks 10000 4 Finch 10000 2 RR 6000 3 Dhoni 16000 5 Karthik 7000 6 Watson 10000
现在,假设我们希望前三行按薪资降序排列,那么必须执行以下查询:
Query: SELECT * from myTable order by salary desc fetch first 3 rows only; Output: We got only first 3 rows order by Salary in Descending Order ID NAME SALARY -------------------------- 3 Dhoni 16000 1 Geeks 10000 4 Finch 10000
笔记 :在上面的结果中,我们得到了前3行,按薪资降序排列,但我们还有一行具有相同薪资,即带有名称的行 沃森 工资呢 10000 ,但它没有出现,因为我们只将输出限制在前三行。但这并不是最优的,因为在实时应用程序中,大多数时候我们还需要显示绑定行。
现实生活中的例子 –假设我们有10名参赛者,我们只有3个奖项,即第一、第二、第三,但假设参赛者3和4在同一时间完成了比赛,所以在这种情况下,我们在3和4之间有一个平局,这就是为什么他们都保持第3位的原因。
打领带
因此,为了克服上述问题,Oracle引入了一个名为 打领带 条款现在,让我们看看前面使用With Ties子句的示例。
Query: SELECT * from myTable order by salary desc fetch first 3 rows With Ties; Output: See we get only first 3 rows order by Salary in Descending Order along with Tied Row also ID NAME SALARY -------------------------- 3 Dhoni 16000 1 Geeks 10000 6 Watson 10000 // We get Tied Row also 4 Finch 10000
现在,看我们拿到了 平局 此外,我们之前没有得到。
笔记 :我们 收到 只有当我们使用 订购人 在我们的Select语句中。假设,如果我们不使用ORDERBY子句,但仍然使用 打领带 子句,则我们不会在输出中获得绑定行,并且查询的行为与 只有 条款 相反 有联系条款。
实例 –假设我们执行以下查询(不使用order by子句):
Query: SELECT * from myTable fetch first 3 rows With Ties; Output: See we won't get the tied row because we didn't use order by clause ID NAME SALARY -------------------------- 1 Geeks 10000 4 Finch 10000 2 RR 6000
在上面的结果中,我们不会得到并列的行,我们只得到前3行。所以 打领带 是 捆绑 具有 订购人 子句,即,当且仅当我们与Ties以及Order by子句一起使用时,我们在输出中获得绑定行。
笔记 :请确保您在Oracle数据库12c中运行这些查询,因为Fetch子句是Oracle 12c中新增的功能,也带有Ties,仅在Oracle数据库12c中运行这些查询 不会的 在10g或11g等12c的以下版本中运行。
参考 s: 关于Fetch子句以及With Ties子句 , 联机执行SQL查询