sql select * между точным количеством строк - PullRequest
6 голосов
/ 03 сентября 2010

Я хотел бы знать, могу ли я использовать оператор SELECT для получения точного положения строк.например, строки между 235 и 250. Возможно ли это?

Заранее спасибо, Шаши

Ответы [ 8 ]

24 голосов
/ 03 сентября 2010

Я не знаю общего пути ... но у каждой БД есть свой путь.Например, в Oracle вы можете сделать это с помощью вложенного выбора

Oracle:

select * from (
select a, b, c from table_foo
where id = 124
)
WHERE rownum >= 235
and ROWNUM <= 250

MSSQL

select * from 
    (select Row_Number() over 
     (order by userID) as RowIndex, * from users) as Sub
    Where Sub.RowIndex >= 235 and Sub.RowIndex <= 250

MySQL

SELECT * FROM TableName LIMIT 235, 15
3 голосов
/ 17 марта 2016

Это очень легко сделать в SQL Server 2012. Используя новые функции OFFSET и FETCH.Это поможет вам извлечь нужные строки в уже упорядоченном / отсортированном наборе результатов.

Пожалуйста, см. Приведенный ниже пример:

SELECT
             PP.FirstName + ' ' + PP.LastName AS 'Name'
            ,PA.City
            ,PA.PostalCode
FROM  Person.Address PA
            INNER JOIN
                        Person.BusinessEntityAddress PBEA
                                    ON PA.AddressID = PBEA.AddressID 
            INNER JOIN
                       Person.Person PP
                                    ON PBEA.BusinessEntityID = PP.BusinessEntityID
ORDER BY PP.FirstName
            OFFSET 0 ROWS
                FETCH NEXT 5 ROWS ONLY

Обратите внимание на OFFSET 0 and FETCH NEXT 5 написано выше.
Это будет отображать только 5 строк, начиная с 0 строки.

3 голосов
/ 03 сентября 2010

Если вы используете mySQL, вы можете использовать команду limit, например:

SELECT * FROM TableName LIMIT 235, 15

Где первое число - это начальный индекс, а второе - количество возвращаемых строк.

2 голосов
/ 03 сентября 2010

Нет, эта база данных не является последовательностью, это означает, что у вас нет определенного порядка.

Но при указании заказа все гораздо проще.

Oracle

SELECT * FROM ( SELECT * FROM TABLE ORDER BY COLUMN ) WHERE rownum BETWEEN 235 and 250

В этом случае вы должны использовать rownum

rownum - псевдостолбец. Это номера записи в наборе результатов. Первый запись, которая соответствует критериям где в утверждении выбора дается rownum = 1 и каждая последующая запись соответствие тем же критериям увеличивает ROWNUM.

MS SQL

WITH OrderedRecords AS
(
    SELECT ColumnA, 
    ROW_NUMBER() OVER (ORDER BY ColumnA) AS 'RowNumber'
    FROM Sales.SalesOrderHeader 
) 
SELECT * FROM OrderedRecords WHERE RowNumber BETWEEN 235 and 250
GO

Для этого Вам необходимо указать свой столбец заказа


Для MySQL я не знаю, как движок справляется с этим.

1 голос
/ 25 мая 2019

Мы можем сделать это несколькими способами.

  1. мы можем сделать с помощью предложения offset-fetch.

    select * from Table_Name order by Column_Name offset 234 rows fetch next 16 rows only

будет извлекать запись между 235-250. потому что он пропустит первые 234 строки и получит следующие 16 строк.

  1. мы можем использовать простой оператор выбора с предложением where.

    Select * from Table_Name where Column_Name Between 235 and 250

он также получит тот же результат.

Надеюсь, это поможет.

0 голосов
/ 24 мая 2019

В SQL Server,

select * from tablename order by columnname offset 20 rows fetch next 40 rows only

Он обрабатывает 21-ю строку как 1-ю строку и выбирает следующие 40 строк из 21-й строки.

0 голосов
/ 09 ноября 2017

После сработало у меня в оракуле

select * from (select rownum serial,sp.* from sample_table st) sam 
where sam.serial > 10 and sam.serial <= 20;
0 голосов
/ 03 сентября 2010

Если вы используете Microsoft SQL (2005>), вы можете использовать функцию ROW_NUMBER

USE AdventureWorks;
GO
WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
    FROM Sales.SalesOrderHeader 
) 
SELECT * 
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...