暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

面试题:如何从 Oracle、MySQL 和 SQL Server 中的表中查找前10条记录?

原创 小小亮 2022-12-14
6496

查找前 10 条记录是使用表和数据库的程序员的常见需求。无论是课程、汽车、板球、球员等。这个列表是永无止境的。但是如何从数据库中选出TOP记录呢?因为这是在后端发生的事情。所以,如果您也在寻找这个问题的答案,请查看这篇文章并了解更多信息。我们将通过实际示例了解如何从不同的数据库中选择 TOP 10 记录。

如何在表中查找前 10 条记录

那么,还等什么?让我们开始选择 TOP 记录,看看考虑所有不同数据库的结果。


1. SQL Server SELECT TOP 10 记录

SELECT TOP 条件允许您限制问题结果集中返回的行数或列的级别。


由于存储在表中的元组的顺序是未知的,所以 SELECT TOP 命令经常与 ORDER BY 子句结合使用。因此,结果集仅限于请求的主要 N 行数。


语法


SELECT TOP (expression) [PERCENT]

[WITH TIES]

FROM

table_name

ORDER BY

column_name;


TOP 子句之后是一个表达式,它确定要返回的列数。如果使用 PERCENT,则表达式被评估为浮动值,否则,它完全转换为 BIGINT 值。


PERCENT 关键字显示查询返回元组的主要 N 百分比,其中 N 是表达式的结果。WITH TIES 允许您返回更多行,这些行的值与受限结果集中的最后一列匹配。请注意,WITH TIES 可能会返回比您在表达式中确定的行数更多的行。


例如,如果您需要退回最昂贵的商品,您可以使用 TOP 1。尽管如此,如果至少有两个商品的成本与最昂贵的商品相似,那么您将错过结果中的其他最昂贵的商品放。为了避免这种情况,您可以使用 TOP 1 WITH TIES。它将包含主要的昂贵项目以及后续的项目等。


示例


让示例数据库架构如下:



1) 使用具有常数的 TOP

查询


SELECT TOP 10

product_name, list_price

FROM

production.products

ORDER BY

list_price DESC;


输出



2.使用TOP返回前N百分比的Tuples

附带的模型使用 PERCENT 来确定结果集中返回的项目数。生产。products 表有 321 行,因此,321 的百分之一是一个分数值 ( 3.21 ),SQL Server 将它收集到下面的整数,对于这种情况是四 ( 4 )。



查询


SELECT TOP 1 PERCENT

product_name,

list_price

FROM

production.products

ORDER BY

list_price DESC;

输出



3. 使用 TOP WITH TIES 包含与最后一个元组中的值匹配的元组

查询


SELECT TOP 3 WITH TIES

product_name,

list_price

FROM

production.products

ORDER BY

list_price DESC;


输出



2.Oracle数据库

在此模型中,第三个成本较高的项目的缩减成本为 6499.99。由于断言使用了 TOP WITH TIES,因此它返回了另外三个项目,其缩减成本与第三个项目相同。

甲骨文

句法:


(1) 对于 Oracle 12 版本:


SELECT column_name(s)

FROM table_name

ORDER BY column_name(s)

FETCH FIRST number ROWS ONLY;


number ⇒ n (number) 输出中需要的行


(2) 较旧的甲骨文版本:


SELECT column_name(s)

FROM table_name

WHERE ROWNUM <= number;


ROWNUM ⇒ 行号,number ⇒ 输出中需要的 n(行数)


示例


考虑以下数据库:



(a) 获取前 3 行


查询


SELECT * FROM Customers

FETCH FIRST 3 ROWS ONLY;


输出



(b) 从“Customers”表中获取前 50% 条记录的 SQL 语句


查询


SELECT * FROM Customers

FETCH FIRST 4 PERCENT ROWS ONLY;


输出



3. MySQL 和 PostgreSQL

使用前 N 个问题意味着您需要将结果限制在特定行数。这些用于从结果集中获取最佳或最新的列。


语法


SELECT column_name FROM table_name LIMIT N;


N → 输出中需要的元组数

例子:


考虑表“客户”如下:



⇒ 获取表中前3条记录,语法如下:


查询


SELECT * FROM客户LIMIT 3 ;


输出



⇒ 我们需要得到三个最年轻的客户,并对其进行细分以进行预测。可以看附带的代码测试。


查询


SELECT * FROM customer ORDER BY customer_age ASC LIMIT 3;


输出


首先,将请求有关 customer_age 的表信息。最年轻的客户将在顶部,而更成熟的客户将在底部。


然后从排列信息的结果集中选择主要的 3 行。



⇒考虑您需要选择从偏移量 3 开始的主要 4 行的可能性。


查询


SELECT * FROM you_table_name ORDER BY column_name ASC LIMIT offset,row_count;


输出



结论:

我们假设我们可以根据风险先决条件限制结果集中的行数。在 MySQL/PSQL (PostgreSQL) 中,我们可以选择前 N 行数或从 M 开始的前 N 行数,而且我们发现 LIMIT 规定可以在有/没有 ORDER BY 的情况下使用。

在 SQL Server 中,我们可以使用 TOP 子句来获取前 N 个元组或前 N% 的元组,以及我们可以获得前 N 个有关系的元组。而在 ORACLE DB 中,我们使用 FETCH 子句来获取所需的输出。


原文标题:How to find top 10 records from a table in Oracle, MySQL, and SQL Server? Examples

原文链接:https://www.sqlrevisited.com/2022/08/how-to-find-top-10-records-from-table.html

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论