一、 数据库分页大全 (oracle 利用解析函数 row_number 高效分页)
Mysq l 分页采用 limt关键字
select * from t_order limit 5,10; #返回第 6-15 行数据
select * from t_order limit 5; #返回前 5 行
select * from t_order limit 0,5; #返回前 5 行
Mssql 2000 分页 采用top 关键字 (20005以上版本也支持关键字 rownum)
Select top 10 * from t_order where id not in (select id from t_order where id>5 ); //返回第 6 到 15 行数据
其中10 表示取 10 记录 5 表示从第 5 条记录开始取
Oracle 分页
① 采用rownum 关键字 (三层嵌套 )
SELECT * FROM(
SELECT A.*,ROWNUM num FROM
(SELECT * FROM t_order)A
WHERE
ROWNUM<=15)
WHERE num>=5; --返回第 5-15 行数据
② 采用row_number 解析函数进行分页( 效率更高 )
SELECT xx.* FROM(
SELECT t.*,row_number() over(ORDER BY o_id)AS num
FROM t_order t
)xx
WHERE num BETWEEN 5 AND 15; --返回第 5-15 行数据
解析函数能用格式
函数() over(pertion by 字段 order by 字段 );
Pertion 按照某个字段分区
Order 按照勒个字段排序
二、数据库的设计范式的区别
I、关系数据库设计范式介绍
1.1 第一范式( 1NF ) 无重复的列
所谓第一范式(1NF )是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式( 1NF )中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
说明:在任何一个关系数据库中,第一范式(1NF )是对关系模式的基本要求,不满足第一范式( 1NF )的数据库就不是关系数据库。
1.2 第二范式( 2NF )属性完全依赖于主键 [ 消除部分子函数依赖 ]
第二范式(2NF )是在第一范式( 1NF )的基础上建立起来的,即满足第二范式( 2NF )必须先满足第一范式( 1NF )。第二范式( 2NF )要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。例如员工信息表中加上了员工编号( emp_id )列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。
第二范式(2NF )要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是属性完全依赖于主键。
1.3 第三范式( 3NF )属性不依赖于其它非主属性 [ 消除传递依赖 ]
满足第三范式(3NF )必须先满足第二范式( 2NF )。简而言之,第三范式( 3NF )要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号( dept_id )、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式( 3NF )也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。
三、 数据定义语言(DDL )
DDL:Create,Alter,Drop
四、 数据操作语言(DML )
DML:Insert,Update,Delete
五、 数据控制语言(DCL )
DCL: Grant,Revoke,Commit,Rollback
六、 用JDBC 连接各种数据库 (xxx 是数据库名 )
Oracle
Classe.forname("oracle.jdbc.dirver.OracleDirver")
URL="jdbc:oracle:thin:@192.168.0.1:1521:xxx"
Db2
Classe.forname("com.ibm.db2.jdbc.app.DB2Driver")
URL="jdbc:db2://127.0.0.1:5000/xxx"
SQL Server
Classe.forname("com.microsoft.jdbc.sqlserver.SQLServerDirver")
URL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=xxx"
Sybase
Classe.forname("come.sybase.jdbc.SybDirver")
URL="jdbc:sybase:Tds:localhost:5007/xxx"
Mysql
Classe.forname("com.mysql.jdbc.Dirver")
URL="jdbc:mysql://localhost:3306/xxx"
Informix
Classe.forname("com.informix.jdbc.IfxDirver")
URL="jdbc:informix-sqli://123.45.67.89:1533/xxx"
PostgreSQL
Classe.forname("org.postgresql.Dirver")
URL="jdbc:postgresql://localhost/xxx"
(注意 ) Mssql 2000 中没有 Intersect(交集 ) ,可以用 Exists 实现。它没有 Except( 合并 ) ,在 Oracle 中用 Minus 替代。它不支持 AutoCommit ,代替的是 Begin TransAction 。 Concat 用来连接字符串,但在 Mssql 中用‘ + ’,在 Oracle 用‘ || ’, CharIndex (在 Mssql ), Instr (在 Oracle ), Locate (在 Db2 ), Passtr 等都是用来确定某个字符串在一个字符串中的位置, Substr (在 Mssql 中用 Substring )来返回一个字符串的某个子串, Length (在 Mssql 中用 Len )得到字符串的字符数
七、 Mysq l 没有序列,但可以创建自动增量( auto_increment )