1. A Forma Moderna (Oracle 12c e superior): FETCH
Esta é a maneira mais limpa, moderna e recomendada. É a sintaxe padrão do SQL ANSI para limitar linhas.
Para obter o equivalente exato de SELECT TOP 7 ... do SQL Server, você usaria FETCH FIRST 7 ROWS ONLY.
Exemplo:
SQL
SELECT
nome_da_coluna,
outra_coluna
FROM
sua_tabela
ORDER BY
coluna_de_ordenacao DESC -- Importante para o "top" ter sentido
FETCH FIRST 7 ROWS ONLY;
2. A Forma Clássica (Oracle 11g e anteriores): ROWNUM
Antes da versão 12c, a única maneira de limitar linhas era usando a pseudo-coluna ROWNUM. No entanto, ela tem uma particularidade importante.
ROWNUM é atribuído antes da cláusula ORDER BY. Se você quiser as 7 primeiras linhas após a ordenação (que é o que o TOP geralmente faz), você precisa usar uma subconsulta.
Exemplo (a forma correta com ORDER BY):
SQL
SELECT *
FROM (
SELECT
nome_da_coluna,
outra_coluna
FROM
sua_tabela
ORDER BY
coluna_de_ordenacao DESC
)
WHERE ROWNUM <= 7;
Por que a subconsulta é necessária? Se você fizesse isto (forma incorreta):
SQL
-- !! Cuidado: Isto NÃO é o TOP 7 !!
SELECT
nome_da_coluna,
outra_coluna
FROM
sua_tabela
WHERE
ROWNUM <= 7
ORDER BY
coluna_de_ordenacao DESC;
O Oracle pegaria as primeiras 7 linhas que ele encontrar (em ordem aleatória de armazenamento), e depois as ordenaria. Você não obteria o "top 7" real.
Bônus: Equivalente ao TOP 7 WITH TIES
Se você precisar do equivalente ao TOP 7 WITH TIES do SQL Server (que inclui todas as linhas que empatam com a 7ª posição), a sintaxe FETCH do Oracle 12c+ também suporta isso:
SQL
SELECT
nome_da_coluna,
outra_coluna
FROM
sua_tabela
ORDER BY
coluna_de_ordenacao DESC
FETCH FIRST 7 ROWS WITH TIES;
Resumo:
Se você usa Oracle 12c ou mais recente: Use FETCH FIRST 7 ROWS ONLY.
Se você usa Oracle 11g ou mais antigo: Use a subconsulta com WHERE ROWNUM <= 7.