📜  SQL |有关系条款

📅  最后修改于: 2022-05-13 01:55:05.524000             🧑  作者: Mango

SQL |有关系条款

这篇文章是 SQL Offset-Fetch 子句的延续

现在,我们了解了如何在 Oracle 数据库中使用 Fetch 子句以及指定的偏移量,并且我们也了解了 Fetch 子句是 Oracle 数据库 12c 中新增的子句,或者它是 Oracle 数据库 12c 中添加的新功能。

现在考虑下面的例子:

假设我们有一个名为myTable的表,其中包含以下数据:

ID    NAME        SALARY
-----------------------------
1    Geeks      10000
4    Finch      10000
2    RR         6000
3    Dhoni      16000
5    Karthik    7000
6    Watson     10000

现在,假设我们希望前三行按 Salary 降序排列,那么必须执行以下查询:

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 行,按 Salary 降序排列,但是我们还有一行具有相同的薪水,即名为Watson和 Salary 10000的行,但它没有出现,因为我们限制了我们的输出只到前三行。但这并不是最优的,因为大多数时候在实时应用程序中,我们还需要显示绑定的行。

现实生活中的例子– 假设我们有 10 位赛车手参赛,我们只有 3 个奖项,即第一、第二、第三,但是假设赛车手 3 和 4 同时完成了比赛,所以在这种情况下,我们有 3 人之间的平局和 4,这就是为什么两者都是位置 3 的持有者。

有领带

因此,为了克服上述问题,Oracle 引入了一个称为With Ties子句的子句。现在,让我们看看我们之前使用 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 语句中使用order by子句时,我们才会在输出中得到绑定行。假设,如果我们不使用 order by 子句,并且仍然使用with ties子句,那么我们将不会在输出中获得绑定行,并且查询的行为与使用ONLY子句而不是With Ties 的行为相同条款。

示例– 假设我们执行以下查询(不使用 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 行。因此, With Tiesorder by子句绑定,即当且仅当我们将 With Ties 与 Order by 子句一起使用时,我们才能在输出中获得绑定的行。

注意:请确保,您在 Oracle Database 12c 中运行这些查询,因为 Fetch 子句是 Oracle 12c 中新增的功能,同样 With Ties,仅在 Oracle Database 12c 中运行,这些查询不会在 12c 的以下版本中运行比如 10 克或 11 克。

参考s:关于Fetch子句以及With Ties子句,在线执行SQL查询