Рубрики

SQL | С галстуками

Этот пост является продолжением предложения SQL Offset-Fetch

Теперь мы понимаем, как использовать предложение Fetch в базе данных Oracle вместе с указанным смещением, и мы также понимаем, что предложение 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

Теперь, видите, мы также получили связанный ряд , который мы не получали ранее.

Примечание : мы получаем связанную строку в нашем выводе, только когда мы используем предложение order by в нашем операторе Select. Предположим, что если мы не будем использовать предложение order by и все еще будем использовать предложение связи , то мы не получим связанную строку в нашем выводе, и запрос будет вести себя так же, как если бы мы использовали предложение 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 Ties связан с предложением order by , то есть, мы получаем связанную строку в выводе, если и только если мы используем With Ties вместе с предложением Order by.

Примечание : Пожалуйста, убедитесь, что вы выполняете эти запросы в Oracle Database 12c, поскольку предложение Fetch является новой добавленной функцией в Oracle 12c, также с Ties, которая выполняется только в Oracle Database 12c, эти запросы не будут выполняться в версиях ниже 12c. как 10 г или 11 г.

Справочные материалы : о предложении Fetch, а также предложении With Ties , выполнение SQL-запросов в Интернете

Рекомендуемые посты:

SQL | С галстуками

0.00 (0%) 0 votes