java入门->数据库基础知识

数据库了解:是按照数据结构来组织,存储和管理数据的仓库;

    操作表

        创建表: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,使用?代替;

 

你可能感兴趣的:(java基础知识,sql语句)