SQL | With Ties子句

这篇文章是 SQL偏移量获取子句

null

现在,我们了解了如何在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查询

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享