zoukankan      html  css  js  c++  java
  • 数据库基础一

    数据库:
             关系型数据库
                     select * from 表名

             非关系型数据库(做不到复杂查询)
                     以对象的形式进行存储

                     {"aaa":"ccc"}---键值对

    oracle基础

           表空间:

                       Oracle数据库对数据的管理是基于表空间的概念来的, 各种数据的以及存储数据的优化, 实际上也是通过优化表空间来实现的

            

          表空间分类:
                        久表空间
                                    用来存放表的数据, 视图, 存储过程或者函数等需要永久保存的对象的空间
                        临时表空间
                                    用来存放查询结果等临时数据的空间
                        UNDO表空间
                                     用于存放回滚数据, 已经删除数据等对象的表空间
            用户:
                                sys: 超级管理员
                                system: 次超级管理员
                                scott: 普通用户

    oracle基础数据类型:

           4类:                 

                            字符型:字符串
                                             char(最大2000)--->固定长度,
                                             nchar(最大1000, 支持unicode)--->固定长度
                                             varchar2(最大4000),
                                             nvarchar2(最大2000, 支持unicode)--->可变长度

                                             oracle中字符串的表示使用单引号
                                                           '字符串'

                        数字类型
                                               包括整数和小数
                                                   number(有效数字, 总位数)---最大11;
                                                   number
                                                   number(8)
                                                   number(5,2)---总位数5位, 小数点后2位
                                                   ?float--->存储二进制类型的数据, 1-126位0.30103
                         日期类型:时间
                                                   date:取值范围:公元前4712年1月1号---公元9999年12月31号, 可以直接精确到秒
                                                  timestamp(时间戳: 更精确的数据, 可以精确到毫秒)
                         其它类型:大文本, 文件
                                                   blob: 最大4g, 以二进制的形式来存放数据
                                                   clob: 最大4g, 以字符串的形式存放

    oracle运算符和表达式                   

                       表达式类似于java, 可以是常量, 可以是变量, 也可以是表中的一个字段

                       算术运算符(+ - * / 注意这个地方没有取余的运算符, 取余使用mod函数)
                       比较运算符(> >= < <= = <>/!=)
                       逻辑运算符(and or not)
                       字符串连接符(||)

    sql语句四种类型:               

                       数据定义语言(ddl)、
                       数据操作语言(dml)、
                       数据控制语言(dcl)和事务控制语言(tcl)。

                       

                    data definition language(ddl)
                                      ddl 使我们有能力创建或删除表格。也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
                                      create database - 创建新数据库
                                      alter database - 修改数据库
                                      create table - 创建新表
                                      alter table - 变更(改变)数据库表
                                      drop table - 删除表
                                      create index - 创建索引(搜索键)
                                      drop index - 删除索引

                     data manipulation language(dml)
                                    供用户实现对数据的追加、删除、更新、查询等操作。
                                    select - 从数据库表中获取数据
                                    update - 更新数据库表中的数据
                                    delete - 从数据库表中删除数据
                                    insert into - 向数据库表中插入数据

                   data control language(dcl)
                                     grant - 授权
                                     revoke - 撤销授权
                                     deny - 拒绝授权

                    transaction control language(tcl)
                                      savepoint - 设置保存点
                                      rollback - 回滚
                                      commit - 提交

    oracle数据库约束:        

                定义规则
                                定义要输入的这个值是一个什么样的值, 或者是哪个范围内的值

                               作用: 确保完整性, 确保精确性

                1, 非空约束
                                 记录一条信息的时候如果用户名和密码没有被记录, 那么这条记录是没有实际意义的, 创建表的时候默认是可以为空的
                2, 主键约束
                                 确保表中每一行的数据的唯一性
                                 非空, 唯一
                                 一个表中只能有一个主键, 但是这个主键可以由多个字段(联合主键, 复合主键)来构成
                                 可以在建表的时候写上设置为主键的关键字, primary key
                                 或者写个表前约束设置
                                 constraint 主键名称 primary key(字段名1, 字段名2)

               3, 外键约束
                                唯一一个涉及两个表中的字段约束
                                插入数据的时候, 从表中的关联关系的字段, 要么是一个主表主键的关联, 要么是一个空值

               4, 唯一约束(unique)
                               保证字段值的唯一性
                               与主键的区别: 唯一约束可以为空值, 唯一约束可以有多个
                               使用语句创建唯一约束只能写多条语句, 类似于insert into
               5, 检查约束
                              作用: 使表当中的值更具有实际意义
                              比如定义一个值的范围
                              checks(sno>0 and sno<1000)

    常用关键字
                       insert into---插入数据

                                      Insert Into p_emp Values(sq_emp.nextval,'tom','clerk','job','sal',);

                      delete---删除数据
                                      Delete p_emp e Where e.empno=1;

                      update---更新一条数据
                                     Update p_emp e Set e.ename='tom3' Where e.empno=1;

                      select---实际工作中尽量不要写*
                      where---给执行的语句加限制条件

                      in---在某个范围内
                                     select * form 表名 t where t.列名 in(固定值);

                      like(%, _)---模糊查询, %表示任意个字符, _表示单个字符
                                     select * form 表名 t where t.列名 like 'T%'
                      select * form 表名 t where t.列名 like 'T_ _ _'明确字符数

                      order by---排序 (asc 升序 desc 降序) (列名或者写索引:1, 2)
                                     select * Form p_emp e Order By e.sal Asc
                                     select * Form p_emp e Order By 1,2 (按序列排序)

                      group by---按照某几列分组
                                     select e.sal Form p_emp e Order By e.sal

                      having---分组之后的过滤
                                      select e.sal Form p_emp e Order By e.sal having count(*)>2

                     case...when...---类似于分支
                                      select t.ename,
                                                 Case t.sex When 1 Then '男' When 0 Then '女' Else 'kk'
                                                 End
                                                 //Case
                                                      // When t.sex=1 Then
                                                                   // '男'
                                                     // When t.sex=0 Then
                                                                  // '女'
                                                     // Else
                                                                  // 'kk'
                                                    //End
                                    Form p_emp t;

                       set---设置某些属性
                       distinct---去除重复
                                      select distinct t.name form p_emp t

                      between...and(闭合区间, 即包括前面的数, 也包括后面的数)
                                       select * from p_emp t where t.sal between 2000 and 3000;


                      all---表示一个集合中所有的元素
                                       select * from p_emp t where t.sal >=all(select t2.sal from p_emp t2)
                     any/some---表示一个集合中任意一个元素


    常用函数
                     to_char---转换成字符型数据
                                      Select to_char(t.hiredate,'yyyy-mm-dd hh24:mi:ss') From p_emp t

                     to_date---转换成日期型数据 form dual(虚拟表)
                                       Select to_tate('1995-09-07','yyyy-mm-dd') From dual

                                       Select to_tate('1995-09-07','yyyy-mm-dd')-Sysdate from dual //相差天数

                                      Select * From p_emp Where t.hiredate > to_date('19820101','yyyymmdd')

    分组函数:


                      mod---取余函数
                                      Select * form p_emp t Group By t.job

                      avg---平均数函数
                                      Select t.job,Avg(t.sal) form p_emp t Group By t.job

                      sum---求和函数
                                      Select t.job,Avg(t.sal) form p_emp t Group By t.job

                      count---计数函数
                                      Select t.job,count(t.ename) form p_emp t Group By t.job


                      decode---类似于分支语句的函数
                                      Select decode(t.sex,1,'男',2,'...',0,'女','sss') From p_emp t

                      substr---分割字符串 substr(t.name,)
                                     Select Substr(t.ename,1) From p_emp t      

                      max---取最大值函数 

                      min---取最小值函数       
                                      Select Max(t.sal) From p_emp t
                                 
       Select Min(t.sal) From p_emp t


                      trunc---取整函数            trunc(12.234) 12
                      ceil---向上取整函数            ceil(12.234) 13
                      floor---向下取整                   floor(12.734) 12
                      trunc---日期取整                   Select Trunc(t.hiredate) From p_emp t //时间消失

                      nvl---过滤空值函数             nvl(t.comm,0)只能写数字
                      nvl2---过滤空值函数2               nvl(t.comm,'为空','不为空')为空显示第一个不为空显示第二个

                      lower---将字母全部改为小写
                      upper---改为大写
                                   Select Lower(t.ename) From p_emp t

                      concat---连接两个字符串                 concat('aaa','bbb')
                      ? wm_concat---列转行函数(也属于分组函数)
                                   Select wm_concat(t.ename) From p_emp t

     复制表
               create table 表名 as select * from 表名
               create table 表名 as select * from 表名 Where 1=2 //复制一个空表

     删除表中数据
               delete 表名;
               truncate 表名;
               (truncate 关键字 慎用(楷体 加粗 大写 下划线 红色 爆闪 抖动效果)!!!!!!!!!!)


     将excel的表贴到oracle

              在excel中选中一部分数据, 记住第一列前面多选中一列
              将查询结果导出excel
              对查询结果全部选中, 右键有 copy to excel

    序列的创建
               序列的作用: 一般用来作为一个自增长的主键

    oracle查询, 高级查询
                简单查询
                       order by 1,2
                       group by 增强版
                                语法: select p.toma, p.ptype, sum(p.lastcou) from product p group by rollup(p.toma, p.ptype)
                                高级查询(多表连接查询)


                                Update p_emp e Set e.job = Decode(e.job,
                                            'clerk','职员',
                                           'salesman','推销员');


    笛卡尔积的概念
                分类:
                          等值连接
                          不等值连接
                外连接(啥也不写就是内连接, 直接写两个表名)---左外连接, 右外连接

                            内连接: select * from 表一 ,表二 where 表一.编号=表二.编号
                            左外链接: select * from p_emp e Left Join p_dept d On e.deptno = d.deptno Where e.sal<200
                            右外链接: select * from p_emp e Right Join p_dept On e.deptno = d.deptno

                            (+)修饰符的使用 //放到查询数量少的那边
    数据字典的使用


                             自连接(自己骗一下自己)
                                        select e1.ename,e2.ename From p_emp e1,p_emp e2 Where e1.empno=e2.mgr

                             层次查询
                                         connect by prior 连接条件 start with 开始条件
                                         select e.*,level From p_emp e Connect By Prior e.empno=e.mgr Start With e.ename='king'
                                                  Order by level         //level 是个伪列
                              伪列:
                                           level
                                           rownum
                                           使用rownum分页
                                                 

                                                  Select *
                                                  From (Select t.*,Rownum rnum From P_emp t Rownum<=10 ) R
                                                  Where R.rnum>5

                                    子查询(sql语句的执行顺序)
                                                  单行子查询
                                                  多行子查询
                                                  exists关键字的使用

                                                  存储过程和函数

     

     

     

                 

  • 相关阅读:
    【锁】java 锁的技术内幕
    【BlockingQueue】BlockingQueue 阻塞队列实现
    【多线程】获取多个线程任务执行完事件
    【spring cloud】源码分析(一)
    【spring boot】FilterRegistrationBean介绍
    【FAQ】服务下线
    解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)...
    实现人民币大写代码解析
    application.yml使用@符合问题:'@' that cannot start any token. (Do not use @ for indentation)
    Maven常见异常及解决方法---测试代码编译错误
  • 原文地址:https://www.cnblogs.com/jgjk/p/7308675.html
Copyright © 2011-2022 走看看