1、order by 与 group by 的用法
order by是排序,默认升序(asc) desc 降序 order by 子句总是select语句的最后一个字节 可以使用索引号排序:
SELECT * FROM employee ORDER BY 1 ASC,2 DESC;
oracle排序会过滤null值:
null值在前面显示(nulls first) 在后面显示:nulls last
SELECt * FROM employee ORDER BY 1 ASC,2 DESC NULLS First;
在order by 排序时可以根据函数排序:
以下语句使用ORDER BY子句中的UPPER()函数来区分客户名称的大小写
SELECt department_id, last_name
FROM employees
ORDER BY UPPER( last_name );
group by 分组
在group之后不能使用where 可以使用having
2、存储过程与触发器
存储过程可以说是一个记录集,由一组sql语句组成,可以对但表或多表进行增删改查的操作,将这组sql语句起一个名字,我们需要的时候调用他就可以了,
存储过程是提前预编译过的,所以执行效率是优于sql语句的,
存储过程分为:
IN : 输入参数
OUT :输出参数
IN OUT :输入输出参数
总之存储过程是一次编译,多次运行,大大提高了运行的效率
触发器:
触发器是也提前预编译的语句,触发器是不需要调用的,他是由一个触发事件触发执行的sql语句
触发器语句的组成:
监视的表
监视动作:insert update delete
监视时间(之前或之后)
触发的事 :触发之后执行的sql
triger 关键字
3、数据库的三范式
1、数据的每一向都是不可分割的、原子性
2、不能存在非关键字段对关键子段键的部分函数依赖,必须是完全函数依赖
3、非主键列不能传递依赖于主键属性(每一个表都不能包含其他表的非主关键子学习)
4、数据库的优化
使用预编译
有外键约束会影响插入和删除的性能(如果可以保证数据的完整性,可以去掉外键)
sql语句全部大写
在经常查询列上面使用索引
如果可以不链接表查询,就经量不要链接表
5、数据库的分页
Mysql分页:
mysql分页公式:
page (第几页)
rows (拿几条)
从第几条开始拿 (page-1)* rows
SELECT * FROM EMPLOYEE LIMIT 0,3
Oracle分页:
使用rownum 第一种使用一个子查询不需要排序。第二种使用俩个子查询 使用order by 排序
Oracle分页公式
从第九条开始拿 (page-1)* rows
小于多少条 page * rows + 1
6、索引
7、为什么要用 ORM? 和 JDBC 有何不一样?
orm是一种思想,是将Object转换成数据库中的记录,或是将数据库中的记录转换为Object,我们可以使用Jdbc实现这一思想,现在有许多的orm工具,他们底层使用jdbc来实现orm,现在使用较多的orm工具是Hibernate
8、Class.forName的作用?为什么要用?
Class是通过Java的反射机制按参数中指定的字符串形式的类名去搜索加载相应的类,如果该类的字节码已经被加载过,则返回该字节码对应的Class实例对象,否则,按类加载器的委托机制去搜索和加载该类,如果所有的类加载器都无法加载到该类,则抛出ClassNotFoundException异常,然后使用可以使用Class字节码的newInstance方法去创建该类的实例对象,
有时候我们在程序中使用的具体类在开发时无法确定,只有在程序运行时才能确定,这时候就需要Class.forName动态的加载该类,
例如Spring的IOC 中每次依赖注入的具体类就是这样配置的
9、用 JDBC 如何调用存储过程
package com.zxl.mysql;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql:///test", "root", "root");
CallableStatement call;
ResultSet rs;
String sql = "{CALL proc_queryUser(?)}";
call = conn.prepareCall(sql);
call.setString(1, "张");
rs = call.executeQuery();
List> list = new ArrayList>();
while (rs.next()) {
List
10、注册 Jdbc 驱动程序的三种方式
这里注册jdbc驱动程序的三种方式分别是Java反射机制的获取class对象的方式
分别是:
Class.forName()
类名.class
对象.class Object的方法



