sql select *在确切的行数之间

时间:2010-09-03 12:35:59

标签: sql database

我想知道我是否可以使用select语句检索行的确切位置。例如235和235之间的行这可能吗?

提前致谢, 沙市

8 个答案:

答案 0 :(得分:24)

我不知道一般的方式..但每个数据库都有办法。例如,在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

答案 1 :(得分:3)

如果你使用mySQL,你可以使用limit命令,例如:

SELECT * FROM TableName LIMIT 235, 15

第一个数字是起始索引,第二个是要返回的行数。

答案 2 :(得分:3)

这可以在SQL Server 2012中轻松完成。使用OFFSETFETCH的新功能。这将帮助您在已排序/排序的结果集中提取所需的行。

请参阅以下示例:

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 这将从0行开始仅显示5行。

答案 3 :(得分:2)

不,该数据库设置的不是序列,这意味着您没有任何特定的订单。

但是当指定顺序时,一切都要简单得多。

<强>的Oracle

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

在这种情况下,您必须使用rownum

  

rownum是一个伪列。它号码   结果集中的记录。首先   符合where标准的记录   在一个select语句中给出   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,我不知道引擎如何处理这个问题。

答案 4 :(得分:1)

在SQL Server中,

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

它将第21行视为第1行,并从第21行中获取接下来的40行。

答案 5 :(得分:1)

我们可以通过多种方式做到这一点。

  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语句。

    Select * from Table_Name where Column_Name Between 235 and 250

它也会获取相同的结果。

希望这会有所帮助。

答案 6 :(得分:0)

如果您使用的是Microsoft SQL(2005&gt;),则可以使用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;

答案 7 :(得分:0)

以下是我在oracle的工作

select * from (select rownum serial,sp.* from sample_table st) sam 
where sam.serial > 10 and sam.serial <= 20;