• Oracle和MySql的分页查询区别和PL/SQL的基本概念


    Oracle和MySql的分页查询区别:
     
      Oracle的分析查询,之前Oracle的分页是使用伪列 ROWNUM 结合子查询实现,mysql的分页更简单,直接使用 LIMIT 关键字就可以实现了。
    要实现分页查询需要知道两个参数:
    currentPage: 表示当前页(cp)
    lineSize:表示每页显示的数据量(ls)
    oracle的分页示例:
    显示第一页,每页显示三条数据
    SELECT *
      FROM (SELECT ROWNUM rn,empno,ename,job,mgr,hiredate,comm,deptno
      FROM emp
      WHERE ROWNUM<=3) temp
      WHERE temp.rn>=1;
    显示第二页,每页显示三条数据
    SELECT *
      FROM (SELECT ROWNUM rn,empno,ename,job,mgr,hiredate,comm,deptno
      FROM emp
      WHERE ROWNUM<=6) temp
      WHERE temp.rn>=4;

    显示第三页,每页显示三条数据

    SELECT *
      FROM (SELECT ROWNUM rn,empno,ename,job,mgr,hiredate,comm,deptno
      FROM emp
      WHERE ROWNUM<=9) temp
      WHERE temp.rn>=7;

    通过以上三个例子我们可以总结出知道了当前页(cp)和每页显示的数据量(ls),就可以计算出要从数据库中第m条查询到第n条数据的公式:

    m=(currentPage-1) * lineSize+1

    n=currentPage * linesSize

    //***************************************分割线**********************************************//
    mysql的分页查询:
    SELECT* FROM emp LIMIT m,ls
     
    查询第一页,每页显示三条数据
    SELECT * FROM emp LIMIT 0,3
    查询第二页,每页显示三条数据
    SELECT * FROM emp  LIMIT 3,3
    查询第三页,每页显示三条数据
    SELECT * FROM emp LIMIT 6,3
    根据上面的结果可以总结出公式:已知当前页 currentPage和每页显示的数据量 lineSize
      m = (currentPage - 1) * lineSize
      ls = lineSize
    总结:
    mysql 的分页查询是很容易实现,基本的语法
    SELECT * FROM 数据表 LIMIT m,n
     
    mysql 数据表中的数据索引是从0开始的。
    通过上面的示例可以总结出公式:已知当前页currentPage,和每页显示的数据量lineSize
    startrow=(currentPage-1) * lineSize
    ls=lineSize
    //************************************************分割线**********************************************************//
    PL/SQL的基本概念
      PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。使用PL/SQL语句块中的SQL语句更加高效,原因主要是这样做可以大幅降低网络流量,应用程序也会变得更加高效。
      PL/SQL是Oracle数据库对SQL语句的扩展,在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算,PL/SQL只有Oracle数据库有。

    优化性能:

      PL/SQL以整个语句块发送给服务器,这个过程在单次调用中完成,降低了网络拥挤。而如果不使PL/SQL,每条SQL语句都有单独的传输交互,在网络环境下占用大量的服务器时间,同时导致网络拥挤。

    可重用性:

    PL/SQL能运行在任何ORACLE环境中(不论它的操作系统和平台),在其他ORACLE能够运行的操作系统上无需修改代码。

    模块化:

      每个PL/SQL单元可以包含一个或多个程序块,程序中的每一块都实现一个逻辑操作,从而把不同的任务进行分割,由不同的块来实现,块之间可以是独立的或是嵌套的。

    示例:第一个pl/sql程序
    BEGIN --表示开始过程
      NUULL; --过程代码
    END; --过程结束
    /

    输出 ‘hello world’

    --开启打印功能
    
    SET SERVEROUTPUT ON;
    
    BEGIN --表示开始过程
    
    DBMS_OUTPUT.put_line('hello world'); --过程代码
    
    END; --过程结束
    
    /

    定义变量

    DECLARE
    
    v_num NUMBER; --声明一个全局变量
    
    BEGIN --表示过程开始
    
    DBMS_OUTPUT.put_('变量的值是:'|| v_num); --过程代码
    
    END; --过程结束
    
    /

    字符串的连接使用的不是‘+’而是‘||’

    全局变量的声明放在DECLARE关键字之后

    如果声明了变量但是没有赋值则默认是空

    为变量赋值:

    DECLARE
    
    v_num NUMBER; --定义了变量
    
    BEGIN --表示过程开始
    
    v_num:=30; --为变量赋值
    
    DBMS_OUTPUT.put_('变量的值是:'|| v_num); --过程代码
    END;  --过程结束
    /

    上面为变量赋值代码可以在DECLARE后面声明变量的时候给出默认值,如果在BEGIN 之后没有为变量赋新的值,则按照默认值输出。

    下方是一个完整代码示例:

    根据雇员的编号查询出雇员的名字,要求编号从键盘输入。

    DECLARE 
    v_empno NUMBER; --保存雇员编号
    v_ename VARCHAR2(100); --保存编号
    BEGIN --表示开始过程
    --在键盘输入雇员编号
    DBMS_OUTPUT.put_line('请输入编号:');
    v_empno:=&empno;
    --开始查询
    SELECT ename INTO v_ename
    FROM emp
    WHERE empno=v_empno;
    DBMS_OUTPUT.put_line('编号是:'||v_empno || ' 名字是:'||v_ename); --过程代码
    END; --过程结束
    /

    //*********************************************分割线***************************************************//

    
    
    
    
    
     
  • 相关阅读:
    P1182 数列分段`Section II`
    算法整理:Floyd_多源最短路
    【FBI WARNING】递归(高级数据结构的基础)
    【FBI WARNING】DP 从看透到看开
    两个例题
    结构体
    环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)
    生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)
    猜数字游戏的提示(Master-Mind Hints, UVa 340)
    回文词(Palindromes, UVa401)
  • 原文地址:https://www.cnblogs.com/qinchangchuan/p/10914807.html
Copyright © 2020-2023  润新知