MariaDB
 sql >> база данни >  >> RDS >> MariaDB

MariaDB ROWNUM() Обяснено

В MariaDB, ROWNUM() е вградена функция, която връща текущия брой приети редове в текущия контекст. Основната му цел е да емулира ROWNUM псевдо колона в Oracle.

ROWNUM() може да се използва по начин, който има подобен ефект на LIMIT клауза – за ограничаване на броя на резултатите, върнати от заявка.

Когато е в режим на Oracle, може да се извика като ROWNUM (т.е. без скоби).

 ROWNUM() функцията се поддържа от MariaDB 10.6.1.

Синтаксис

Синтаксисът е така:

ROWNUM() 

Не се изискват и не се приемат аргументи.

Когато е в режим на Oracle, той може да бъде извикан без скоби, както следва:

ROWNUM 

Използването на този синтаксис имитира ROWNUM псевдо колона в Oracle.

Пример

Нека изпълним заявка, която връща всички редове от таблица, наречена Pets :

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets; 

Резултат:

+---------+-------+--------+| ROWNUM() | PetId | Име на домашни любимци |+---------+-------+--------+| 1 | 1 | Пухкави || 2 | 2 | Извличане || 3 | 3 | Надраскване || 4 | 4 | Размахване || 5 | 5 | Tweet || 6 | 6 | Пухкави || 7 | 7 | Кора || 8 | 8 | Мяу |+---------+-------+--------+8 реда в комплект (0,001 сек)

Виждаме, че са върнати осем реда.

Стойността, върната от ROWNUM() функцията се увеличава с всеки ред. В този случай се случва да съвпада със стойностите в PetId колона, но това е чисто случайно. PetId колоната може да използва всяка стойност, но ROWNUM() ще остане както е тук.

За да илюстрирам какво имам предвид, нека прецизираме заявката, за да изведе по-малко резултати:

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets
WHERE PetId > 4; 

Резултат:

+---------+-------+--------+| ROWNUM() | PetId | Име на домашни любимци |+---------+-------+--------+| 1 | 5 | Tweet || 2 | 6 | Пухкави || 3 | 7 | Кора || 4 | 8 | Мяу |+---------+-------+--------+4 реда в комплект (0,010 сек)

Ограничаване на върнатите редове

Както споменахме, ROWNUM() може да се използва по начин, който има подобен ефект на LIMIT клауза – за ограничаване на броя на резултатите, върнати от заявка.

Ето един пример:

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets
WHERE ROWNUM() <= 5; 

Резултат:

+---------+-------+--------+| ROWNUM() | PetId | Име на домашни любимци |+---------+-------+--------+| 1 | 1 | Пухкави || 2 | 2 | Извличане || 3 | 3 | Надраскване || 4 | 4 | Размахване || 5 | 5 | Tweet |+---------+-------+--------+5 реда в комплект (0,001 сек)

Ето как ще постигнем същия ефект, използвайки LIMIT клауза:

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets
LIMIT 5; 

Резултат:

+---------+-------+--------+| ROWNUM() | PetId | Име на домашни любимци |+---------+-------+--------+| 1 | 1 | Пухкави || 2 | 2 | Извличане || 3 | 3 | Надраскване || 4 | 4 | Размахване || 5 | 5 | Tweet |+---------+-------+--------+5 реда в комплект (0,001 сек)

Има разлика между използването на LIMIT и ROWNUM() за да ограничите върнатите редове.

Основната разлика е, че LIMIT работи върху набора от резултати, докато ROWNUM работи върху броя на приетите редове (пред всяка ORDER или GROUP BY клаузи).

Ето пример, който демонстрира тази разлика:

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets
WHERE ROWNUM() <= 5
ORDER BY PetId Desc; 

Резултат:

+---------+-------+--------+| ROWNUM() | PetId | Име на домашни любимци |+---------+-------+--------+| 5 | 5 | Tweet || 4 | 4 | Размахване || 3 | 3 | Надраскване || 2 | 2 | Извличане || 1 | 1 | Пухкав |+---------+-------+--------+5 реда в комплект (0,129 сек)

И тук се използва LIMIT клауза:

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets
ORDER BY PetId Desc
LIMIT 5; 

Резултат:

+---------+-------+--------+| ROWNUM() | PetId | Име на домашни любимци |+---------+-------+--------+| 8 | 8 | Мяу || 7 | 7 | Кора || 6 | 6 | Пухкави || 5 | 5 | Tweet || 4 | 4 | Размахване |+---------+-------+--------+5 реда в комплект (0,000 сек)

Пропускане на скобите

Когато работите в режим на Oracle, е възможно да пропуснете скобите. Това ви позволява да емулирате ROWNUM псевдо колона в Oracle.

Ето пример за превключване към режим на Oracle:

SET SQL_MODE='ORACLE'; 

Сега можем да изпълним ROWNUM без скоби:

SELECT 
    ROWNUM,
    PetId,
    PetName
FROM Pets; 

Резултат:

<пред>+--------+-------+--------+| ROWNUM | PetId | Име на домашни любимци |+-------+-------+--------+| 1 | 1 | Пухкави || 2 | 2 | Извличане || 3 | 3 | Надраскване || 4 | 4 | Размахване || 5 | 5 | Tweet || 6 | 6 | Пухкави || 7 | 7 | Кора || 8 | 8 | Мяу |+--------+-------+--------+8 реда в комплект (0,029 сек)

Имайте предвид, че това е достъпно само в режим на Oracle. Използване на ROWNUM без скоби, когато не е в режим на Oracle, води до грешка.

За да демонстрираме, нека преминем към режим по подразбиране:

SET SQL_MODE=DEFAULT; 

Сега стартирайте заявката отново:

SELECT 
    ROWNUM,
    PetId,
    PetName
FROM Pets; 

Резултат:

ГРЕШКА 1054 (42S22):Неизвестна колона „ROWNUM“ в „списък с полета“

Вижте документацията на MariaDB за някои съображения относно оптимизацията и други фактори.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи UPDATEXML() в MariaDB

  2. Как да инсталирате и защитите MariaDB 10 в CentOS 7

  3. Как CONCAT_WS() работи в MariaDB

  4. Преместване на база данни на MariaDB в криптирани и некриптирани състояния

  5. Изграждане на MySQL или MariaDB база данни в студен режим на готовност на Amazon AWS