分页
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