JAVA001

本文介绍了Oracle和MySQL中实现数据分页的方法,包括使用Oracle的伪列ROWNUM及MySQL的LIMIT关键字。此外,还详细讲解了如何通过视图简化复杂查询,以及视图在实际工作中的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分页

Oracle:使用伪列rownum实现分页

select  sid,cid,score,rownum from  sc;

每页3条,第三页7 ~ 9

select sid,cid,score from sc where rownum

between 7 and 9;

 

select  sid,cid,score 

(select  sid,cid,score,rownum rn

from  sc)

where  rn between 7 and 9 ;

 

mysql:分页使用 limit

select * from sc;

select * from sc  limit 3,6;

 

 

Oracle的rowid伪列,rowid给每条数据编了一个唯一的号

 

SQL>有表zsls(a int,b int),表有如下数据

a

b

1

1

2

2

1

1

2

2

3

3

 

要做哪些操作,可以实现表中数据如下

a

b

1

1

2

2

3

3

对所有数据库都适用

第一步:将zsls中不同的数据备份出来zsls_bak

第二步:删除zsls中所有数据

第三步:将zsls_bak中的数据增加到zsls中

第四步:删除表zsls_bak;

 

利用Oracle的rowid伪列实现

 

SQL>select  a,  b,  rowid  from zsls;

SQL>select  max(rowid),min(rowid)  from  zsls  group by a,b ;
SQL>delete  from  zsls  where  rowid  not  in(

  select  max(rowid)  from  zsls  group by a,b

);

 

视图view:查看表,就是将某个查询(查询结果要符合第一范式)定义为一个视图

 

统计每个人不同等级的数量,显示学号,姓名,等级,数量

等级划分:A【>=90】 B【>=75 <90】 C【>=60  <75】 D【<60】

 

 

实际工作中遇到此类问题,我们一定会创建视图

SQL>select  sid,cid ,‘A’ dj  from sc  where  score>=90

union

select  sid,cid,‘B’   from sc  where  score>=75 and score<90

union

select  sid,cid ‘C’   from sc  where  score>=60 and score<75

union

select  sid,cid ‘D’   from sc  where  score<60;

 

SQL>create  view  sc_dj  as  查询语句;

SQL>select *  from  sc_dj;

针对成绩sc_dj视图【sid,cid,dj】

统计学号1和学号4的B等级和C等级的数量,显示学号,姓名,等级,数量

方法一:

SQL>     from  student a ,sc_dj  b

         where  a.sid=b.sid  and (a.sid=1 or  a.sid=4 )  and (b.dj=’B’  or  b.dj =’C’ )

         group by a.sid,sname,dj;

方法二:也可以把1和4查出来,做union(不推荐)

    

统计每个人不同等级的数量,显示学号,姓名,等级,数量

SQL>     from  student a ,sc_dj  b          where  a.sid=b.sid

         group  by  a.sid,sname,dj;

创建一个stu_tj视图: 学号sid,姓名sname,总分zf ,平均分pj

 

每个人检查jdk 的环境和IDE工具

主机命令行,运行一个java程序

在IDE(eclipse或idea)创建一个java工程,创建一个java文件,并运行

 

编程语言(高级语言):

按照运行方式分

编译语言,解释语言【javascript】

java先编译javac后解释java

java编译后生成的不是计算机可以直接识别的代码,生成的是JVM可以解释的代码

 

浏览器访问Oracle数据库的时候,界面会显示你可以输入PL/SQL

 

按照组织代码的方式分

面向过程语言  : 函数是组织代码的基本单位,比如C

面向对象语言:   类是组织代码的基本单位,比如java

过程+对象:  C++ 

 

java是90年代出现,sun公司开发出来的,java取名于印度尼西亚的java岛(爪哇岛)

如果用16进制编辑器,打开class文件,会看到文件头是咖啡宝宝

 

在大数据分析概念炒作之前,java可以做两类应用

终端应用:现在就是android平台

企业应用:  做最流行的软件结构是B/S

 

有了大数据分析后,还可以做大数据分析

 

不管用java做什么应用,必须掌握的API是J2SE部分的API

API特指每个语言提供的可以直接使用的代码,比如C的库函数,C++的标准模板库,java的SE/EE类,还有很多第三方提供的解决某类问题的代码

 

命令行javac   -version   java  -version

 

sun公司提供了三种API:

J2ME(android平台未出现之前,会有一些应用,现在跟我们没有任何关系)

J2SE (通常安装的JDK,这个里面的常用的类是要会用的) 

J2EE (jsp/servlet/filter/listener……..做企业应用相关的类)

 

Oracle收购了sun公司,所以现在java属于oracle,sun公司的服务器solaris也属于Oracle,sun的mysql数据库也属于Oracle

 

 

C

java

 

基本数据类型

char/short/int/float/long/double

 

byte/boolean/char/short/int/float/long/double

 

C:大范围的数据给小范围的数据,无需强制转换,java要强制转换

C数组越界不会报异常

Java数组越界会报异常

C基本数据分有符号和无符号

Java的都是有符号的

 

C定义指针,必须指定是什么类型的指针,指针存储内存编号

Java的构造数据类型也称为引用数据类型,引用类型的变量存储的是内存地址

构造数据类型

数组、结构体、联合体、枚举

 

数组、类(接口)、枚举

局部变量

Java的局部变量一定要初始化,否则会报语法错误,C不初始化,不会报语法错误,但是好的习惯为局部变量赋初始值

 

运算符号

几乎一样,极个别不一样,比如sizeof    instance of

 

控制结构

C的java都可以使用,java还有自己的一些形式,按照C的风格写代码,java一定可以使用,(不考虑使用特定的API的情况下)

函数定义的时候,函数名称前面的关键字是返回类型,如果是void不返回任何类型,其他一定是具体的类型

函数

函数定义是一样的,c的函数定义,可以不指定返回类型(默认返回int),java一定要指定返回类型

不考虑java类的修饰符

代码分类

以头文件【有很多函数声明】

包【有很多类】

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C或java或数据库怎么表示一个人?

以C为例,求一个整形数组的和

typedef char*  String;

int  sumOfArr(int  a[],int  len){ 

int  s=0;   //s是局部变量:函数里面定义的变量

int  i=0;

for(;  i<len; i++){

  s=s+a[i];

}

return s;

}

void  main(String  zsls[]){

int   a[]={1,3,5};

printf(“%d\n”,sumOfArr(a,3));

}

java是面向对象,所有的代码要写到某个类中,切换到IDE,在某个工程下创建java文件a1.java编辑如下

修复api为调用java的api,运行程序,显示找不到函数入口main

将代码调整为符合java语法规则,具体含义先不用关注main是函数入口,必须公开且是静态的

 

程序解读

 

创建文件a2.java

创建文件a3.java

在JDK安装路径查看API源代码【src.zip中查看】

 

b1.c

 

typedef  char*  String;

int   main(int  argc,String  args[]){

   int  i=0;

   // for(  执行一次 ;  每次进行真假判断,真才执行循环体    ;  循环体执行完,再执行   )

   int s=0;

   for(  ;  i<argc ;i++)

    printf(“%s\n”,args[i]);

   for( i=1;i<100;i=i+2)

      s=s+i;

  printf(“%d\n”,s);

}

在RedHat  中运行 ./a.out   a   b   c

编写b1.java

class b1{

public  static  void   main(String  args[]){

   int  i=0;

   int  s=0;

   for(  ;  i<args.length ;i++)

     System.out.println(args[i]);

   for( i=1;i<100;i=i+2)

      s=s+i;

   System.out.printf(“%d\n”,s);

}

}

运行  java  b1   a   b   c

 

比较c和java的main形参args的区别?

 

用C和java输出乘法口诀表(要做到代码一样,除了输出api不一样,在linux中运行)

 

编辑java文件b2.java(可以在eclipse中编辑,编辑后保存,会生成class文件,在命令行无需再编译)

package  com.b2;

class   b2{

   public  static  void  main(String  …args){

      int i=2;

      System.out.println(i>1);    //大于运算符

      System.out.println(i & 3);   // 与运算符

      System.out.println(i | 3);   // 或运算符

java.lang.System.out.println(i ^ 3);    //异或运算符

   }

}

理解程序中二进制运算符 “与”  “或”  “异或”含义

命令行切换到bin路径运行 java  包名.类名,理解包的概念

 

编辑c文件b3.c【linux中运行】

typedef  char* String;

void  main(String  args[]){

        int  s=0;

        int  i=1;

        for(;;){

           i++;

           s=s+i++;

           if(i>=100)  break;

         }

       printf(“%d\n”,s);

}

 

编辑java文件b3.java【在eclipse中运行】

class  b3{

public  static  void  main(String  args[]){

        int  s=0;

        int  i=1;

        for(;;){   //for中不写表达式,表示死循环

           i++;

           s=s+i++;   //后加加,先用后加

           if(i>=100)  break;

         }

       System.out.printf(“%d\n”,s);

}

}

编辑b4.c

typedef  char* String;

void  main(String  args[]){

        int  s=0;

        int  i=2;

        do{

          s=s+i;

          i=i+2;

         }while(i<12);

       printf(“%d\n”,s);

}

编辑b4.java 

class b4{

public   static  void  main(String  args[]){

int  s=0;

        int  i=2;

        do{

          s=s+i;

          i=i+2;

         }while(i<12);

       System.out.printf(“%d\n”,s);

}

 

}

编辑b5.c

typedef  char* String;

void  main(String  args[]){

        int  s=0;

        int  i=2;

        while(i<12){   //while中条件为真,则执行循环体

          s=s+i;

          i=i+2;

         };

       printf(“%d\n”,s);

}

编辑b5.java

class b5{

public   static  void  main(String  args[]){

int  s=0;

        int  i=2;

        while(i<12){   //while中条件为真,则执行循环体

          s=s+i;

          i=i+2;

         };

        System.out.printf(“%d\n”,s);

}

}

 

在eclipse中截图5个代码错误提示,并解释错误原因

用16进制编辑器打开任意一个class文件,截图咖啡宝宝单词

明天抽查演讲:说说c和java

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值