我想知道我是否可以使用select语句检索行的确切位置。例如235和235之间的行这可能吗?
提前致谢, 沙市
答案 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中轻松完成。使用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
这将从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)
我们可以通过多种方式做到这一点。
我们可以借助offset-fetch子句进行操作。
select * from Table_Name order by Column_Name offset 234 rows fetch next 16 rows only
它将获取235-250之间的记录。因为它将跳过前234行,然后再获取下16行。
我们可以在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;