zoukankan      html  css  js  c++  java
  • MySQL中如何实现select top n ----Limit

    Mysql中limit的用法详解
      在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。
      
      LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1):

      mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15
      为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
      mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.
      如果只给定一个参数,它表示返回最大的记录行数目:
      mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行
      换句话说,LIMIT n 等价于 LIMIT 0,n。

    用惯了access mssql server的朋友,可能在用mysql查询前N条记录时,习惯的使用select top n 形式的语句,在这里说明一下,mysql没有此语法,mysql用limit来实现相关功能,而且功能更加强大,GOOD。以下是limit在mysql中的使用详解: 

    语法:

    1 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

    LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。
    如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
    初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。

    1 --举例:
    2 
    3 select * from table limit 5; --返回前5行
    4 
    5 select * from table limit 0,5; --同上,返回前5行
    6 
    7 select * from table limit 5,10; --返回6-15行

    如何优化limit

    当一个查询语句偏移量offset很大的时候,如select * from table limit 10000,10 , 最好不要直接使用limit,而是先获取到offset的id后,再直接使用limit size来获取数据。效果会好很多。

    如:

    select * From customers Where customer_id >=(
    select customer_id From customers Order By customer_id limit 10000,1
    ) limit 10;

    MS SqlServer TOP子句

    语法:

    SELECT TOP number|percent column_name(s) FROM table_name;

    举例:

    1. 选取表中前2条记录

    select top 2 * from table;

    2. 选取表中50%的记录

    select top 50 persent from table;

    3. 从数据库中检索第10—20条记录

    SELECT TOP 10 *
    FROM TestTable
    WHERE (ID NOT IN
    (SELECT TOP 20 id
    FROM TestTable
    ORDER BY id))
    ORDER BY ID;

    Oracle分页

    语法:

    SELECT column_name(s) FROM table_name WHERE ROWNUM <= number

    举例:

    1. 选取前5条记录

    SELECT * FROM Persons WHERE ROWNUM <= 5

    分页:

    --从数据库表中第M条记录开始检索N条记录
    SELECT * FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2
    where t2.r >= M
    
    --如:从表Sys_option(主键为sys_id)中从第10条记录开始检索20条记录,语句如下
    SELECT * FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2
    Where t2.R >= 10
     
     
     
     
  • 相关阅读:
    个人冲刺二(7)
    个人冲刺二(6)
    个人冲刺二(5)
    个人冲刺二(4)
    对称二叉树 · symmetric binary tree
    108 Convert Sorted Array to Binary Search Tree数组变成高度平衡的二叉树
    530.Minimum Absolute Difference in BST 二叉搜索树中的最小差的绝对值
    pp 集成工程师 mism师兄问一问
    17. Merge Two Binary Trees 融合二叉树
    270. Closest Binary Search Tree Value 二叉搜索树中,距离目标值最近的节点
  • 原文地址:https://www.cnblogs.com/panchanggui/p/10652356.html
Copyright © 2011-2022 走看看