数据库了解:是按照数据结构来组织,存储和管理数据的仓库;
操作表
创建表:CREATE TABLE;
删除表:DROP table_name;
修改表名:REANME old_name TO new_name
增加列:ALTER TABLE table_name ADD();
删除列:ALTER TABLE table_name DROP()
修改列:ALTER TABLE table_name MODIFY()
操作表中数据
向表中插入新数据:INSERT INTO table_name ()VALUES();
修改数据:UPDATE table SET gender='F' WHERE id=1;
删除操作:DELETE FROM table_name WHERE name='jakk';
SQL基本操作:
1)oracle字符串操作
查询指定表的所有字段所有记录:SELECT * FROM table_name
查询指定表指定字段的所有记录: SELECT col1,col2 FROM table_name
查询指定表指定字段的满足条件的记录:SELECT ename,job,sal FROM emp where job=‘MANAGER’;
字符串函数:拼接:SELECT CONCAT(ename,':',sal) FROM emp;
常用:SELECT ename || ':' || sal;
LENGTH():返回字符串的长度;
UPPER():大写;LOWER():小写;INITCAP():第一个字母大写,其它字母变为小写;
TRIM('e' from 'eelistee'):截取字符串; LTRIM():去除左边字符串;RTRIM():去除右边字符串;
LPAD();RPAD(sal,6,''):左右补位函数;sal补位的字符串,6是位数,最后一个参是原来的参数;
SUBSTR():截取字符串;
INSTR(str1,str2,[m,n]):查找位置 查找str2在str1中的位置,m从第几个字母开始找默认1,n:查找第几次出现默认1;
2)oracle数值操作
ROUND(n,m):四舍五入 m表示保存小数后多少位;
TRUNC(n,m):截取字符串,m表示保存小数后多少位,取整;
MOD(m,n):求余数,用m除以n求结果, n为0直接返回m;
CELL(n):向上取整;
3)orcale 日期操作
SYSTIMESTAMP:返回当前系统时间和日期,精确到毫秒;
SELECT SYSDATE-1 FROM dual :日期计算;
SYSDATE-HIREDATE:计算天数
TO_DATA():字符串转换为DATE格式;
TO_CHAR():将DATA按指定格式转换为字符串;
RR使用:SELECT TO_CHAR(TO_DATE('89-05-01','RR-MM-DD'),'YYYY-MM-DD') FROM dual
LAST_DAY(date):返回给定日期所在月的月底;
ADD_MONTHS(date i):对指定的日期累加指定的月数,若i为负数,则是减去指定的月数;
MONTHS_BETWEEN(data1,date2):计算两个日期相差的月。date1-date2;
NEXT_DAY(date i):返回的是距离给定日期是最近的还没有过的周几,i表示周几;
LEAST(),GREATEST():求最小值与最大值;
EXTRACT(date FROM datetime):获取给定时间中对应时间分量值;比如年、月、日、小时、分钟等等;
4.orcale 空值操作 null
在数据库中不能使用‘=’ 判断null,而应当使用IS NULL或者IS NOT NULL;
NULL与字符串拼接等于什么也没做,NULL与数字运算,结果还是NULL;
NVL(exp1,exp2):将一个null替换为非null值,若exp1为null,函数返回exp2,否则返回exp1的值;
NVL(exp1,exp2,exp3):若exp1不为null,则返回exp2,若为null返回exp3的值;
5.sql查询
别名:SELECT ename,job,salx12 AS "Annual Salary" FROM emp;
使用 >,< ,>=,<=,!= ,<>,
使用AND ,OR AND:必须满足多个条件, OR:满足多个条件之一;
AND优先级高于OR ,提高优先级加括号;
LIKE:用于模糊匹配字符串,支持两个通配附"%","_", "%"表示0~多个字符串,_:表示1个字符串;
IN(List):判断是非等于列表中之一, NOT IN(list):不能是列表中的内容; IN和NOT IN用于子查询中;
BETWEEN.....AND:查询符合某个值域范围条件的数据;
当判断大于这类操作时,若后面是一个列表时,可以使用ANY和ALL;
>ANY(list):大于列表中之一即可(大于最小);
>ALL(list):大于列表中所有的(大于最大的);
DISTINCT:去除重复行,必须跟在SELECT后面;可以多字段去重,这些字段值的组合没有重复的; ORDER BY:用于排序结果集,必须写在SELECT语句最后,可以指定的字段进行升序或者降序排序; 升序:ASC 可不写,默认; 降序:DESC 多序排序:先按照第一个字段排序,第一字段值相同才按第二个字段排; 聚合函数:又称多行函数,分组函数, 作用:用来统计使用; MAX与MIN:求给定字段的最大值,最小值; AVG与SUM:求平均值的总和; 聚合函数忽略NULL值; COUNT():函数用于统计记录条数,而不关系具体字段的值 ; GROUP BY:数据的细分,GROUP BY子句可以根据其后定制的字段相同的看做一组,当SELECT中出现 聚合函数,那么凡不在聚合函数中的单独字段必须出现在GROUP BY 子句中。后面也可以指 定多个字段; HAVING:该子句必须跟在GROUP BY 子句中; 6.关联查询 多张表联合查询,关键在于连接条件,数据库根据满足连接条件的记录在表之间建立联系,从而进行关联查询, 连接条件应当与过滤条件同时成立;字段有命名冲突时,要指定表名,而表名可以使用别名避免复制度过高; 内连接:SELECT e.ename.e.sal,d,dname FROM emp e JOIN deptt d ON e.depton=d.depton WHERE d,ename='SALES'; 外连接:外连接的作用是在关联查询中将不满足连接条件的记录也查询出来, 不满足条件的用null; 左外连接:LEFT OUTER JOIN.....ON; 右外连接:RIGHT OUTER JOIN......ON; 全外连接:FULL OUTER JOIN......ON; 自连接:用于解决相同类型数据,但是有存在父子关系,层级不确定时使用; SQL高级查询: 1子查询:子查询时嵌套在其它sql之中,也可以在DML,DDL中使用, 子查询根据查询的结果分为: 单行单列子查询:查询结果就是一个值; 单行多列子查询,查询结果为多个值;配合IN, ALL ,ANY使用 多行多列子查询,查询结果多个字段;配合EXISTS 子查询可以在WHERE,FROM和SELECT中查询; 子查询EXISTS:需要引用到主查询的字段数据,EXISTS后边的子查询至少返回一条数据,则整个条件返回true; 2.分页查询:将表中的数据分段查询; orcale中分页是基于ROWNUM实现的; ROWNUM是一个伪劣; 计算行号的返回公式:page:当前页数; pageSize:每页显示的条目数; eg:page=2,pageSiez:5; start=(page-1)x pageSize+1; end=pageSize x page; 3.DECODE函数 DECODE(expr,search1,result1,search2,result2):用于比较参数expr的值,如果匹配到哪个search条件就返回 对应的result;和DECODE语句相似的有CASE语句,类似if -esle; 4.排序函数 ROW_NUMBER() OVER(PARTITION BY col1ORDER BY col2):根据col1分组,在分组内部根据col2排序,此 函数计算内的值就表示每组内部排序后的顺序编号,组内连续且唯一; RANK():生成组内不连续也不唯一,跳跃排序; DENSE_RANK():生成组内连续但不唯一的数字; 5.集合操作 并集:UNION, UNION ALL 交集:INTERSECT 差集:MINUS 6.高级分组函数 ROLLUP(),GROUP BY ROLLUP(a,b,a):参数逐个递减到一个都没有; CUBE(),GROUP BY CUBE(a,b,c):CUBE统计的是2的参数个数次方; GROUPING SETS():可以按照指定的分组方式,进行分组并将结果并在一个结果集里显示; 数据库对象包括:表,视图,序列,索引 7.视图 在SQL语句中体现的样子是一张表, 作用1.重用子查询,简化sql复制度; 2.限制数据的访问; 1.视图中对应的查询语句的字段若含有表达式,函数等操作时,对该字段加别名; 对视图进行DML操作:对简单视图操作,复制视图不能进行DML操作; DELETE不会删除视图不可控数据; 对视图添加检查选项后,可以避免视图污染基表数据; 插入数据:只能插入视图看的到的数据; 更新数据:更新视图数据后视图必须对其可见; WITH CHECK OPTION:通过视图所做的修改,必须在可见的返回; WITH READ ONLY:将视图设置为只读后,不能进行DML操作; 和视图相关的数据字典:USER_OBJECTS,USER_VIEWS,USER_TABLE,USER_UPDATE_COLUMNS; 2.序列:可以按照指定的规律生成数字,通常使用的序列生成的数字作为表的主键使用; 序列有两个伪劣:NEXTVAL:获取序列下一个值(当前值加步长得到); CURRVAL:获取序列当前的值; 3.索引(树形结构查询) 提高查询效率,排序时的效率使用。数据库会自动使用可利用的索引; 4.约束 非空约束:NOT NULL修饰; 唯一性约束:UNIOQUE修饰; 主键约束:从功能上看是非空且唯一的组合; 外键约束:定义在两个表的字段或一个表的两个字段上,用于保证两个字段的关系; 检查约束:强制在字段上的每一个值都要满足Check定义的条件; 什么是事物:事物是访问数据库的一个操作序列,数据库应用系统通过事物集来完成对数据库的存取,事物的 正确执行使得数据库从一种状态转换成另一种状态; SQL概述 数据定义语言(DDL):CREATE(建表),ALTER(修改表),DROP(删除表),TRUNCATE(删除表数据,保留表结构) 数据操作语言(DML):INSERT(插入数据),UPDATE(更改),DELETE(删除数据,表中的数据) 事物控制语言(TCL):COMMIT(提交),ROLLBACK(回滚),SAVEPOINT(保存点) 数据查询语言(DQL):用来查询所需要的数据,SELECT JDBC java访问数据库 一组接口,规定了java访问数据库的规定,提供了一系列用于操作数据库的方法,是访问所有数据管理系统的规范; 所有的实现都由数据库厂商实现 JDBC提供了统一的访问数据库操作界面 JDBC工作原理:1.加载驱动,建立连接; 2.创建语句对象; 3.执行SQL语句; 4.处理结果集; 5.关闭连接; Connection接口; Statement接口; ResultSet接口:执行查询sql语句后返回的结果集; 处理方式:遍历,判断是否有结果(登录) 连接池(接口):实现由厂商来完成,取连接使用完后不再关闭,而是归还; 确保连接池中最小的连接数策略:动态检查:定时检查连接池,一旦发现数量小于最小连接数,则补充相应连接, 保证连接池正常运转; 批量更新API: addbatch(String sql):Statement类的方法,添加多条sql语句; addBatch():preparedStatement类方法:将多条预编译的sql语句添加; executeBatch():把statement或PreparedStatement对象语句列表中的sql语句发送给数据库进行处理; clearBatch():清空当前SQL语句列表; 连接池 定义方法的思路 1.确定方法的返回类型;确定功能是否有运算结果,如果有,结果的类型即为方法的返回值类型,如果没有,使用 void关键字; 2.确定方法的参数列表,功能中是否有不确定的数据参与运算; statement:查询操作一定使用executeQuery(); 增删改操作一定使用executeUpdata(); statement只用来执行静态SQL 1.可读性差; 2.需要拼接JAVA变量,会出现注入现象; 3.批量执行语义相同,内容不完全相同的效率差; PreparedStatement:预处理语句对象,是statement的子接口; 1.不会出现sql注入; 2.批量执行相同语义不同内容的sql性能高; 3.执行动态sql,使用?代替;