• 数据库基础(Oracle)


    前言:

    1.认识Oracle
        oracle:商业运用第一的关系型数据库,实质上就是一种关系型数据库。
    2.数据库与关系型数据库
        数据库:数据存储的仓库
        关系型数据库:数据库中保存的对象之间可以存在一定的关联关系,并非完全独立。主要反映到以后学习的主外键.
        关系数据库是关系或二维表的集合:
           Orcale数据库
             /   
           table_1     table_2
        关系数据库是:
          由关系型数据库对象组成的。
          由关系操作管理。
          受数据完整性约束控制。
    3.三个名词
        (1) sql:结构化的查询语句,操作oracle数据库的语言   (Structured Query Language, SQL),第四代编程语言,之关心做什么,不关心怎么做,结构化查询,易学易用
        (2) sqlplus:oracle软件自带的终端可以输入sql,且将sql执行结果显示
                                    SQL*Plus
                                      ↓
        SQL*Plus: 如同操作系统中的SHELL,SQL——>Oracle,就是说在Oracle数据库执行SQL语句之前,需要SQL*Plus进行编译。
        (3) pl/sql:这是一种过程化语言,纯SQL中没有逻辑的控制,而在PL/SQL中存在逻辑控制:像存储过程函数就是一种典型的PL/SQL语言的实现
    4.数据库中的对象
       table:表格(实体OR关系),由行和列组成,列又称字段,每一行内容为表格的一条完整的数据。
       view: 视图,一张表或者多张表的部分或者完整的映射,好比表格照镜子,镜子里面的虚像就是view
       除去常见的table和view两种对象以外,oracle数据库还支持如下四种对象
       sequence:序列,生成主键值
       index:索引,提高数据的访问效率
       synonym:同义,方便对象的操作
       program unit:程序单元,pl/sql操作的对象
    5.五种分类
       sql的五大分类:
       数据查询(DQL):SELECT
       数据操作(DML): INSERT, UPDATE, DELETE (增删改) 需要commit
       数据定义(DDL): CREATE, ALTER, DROP, RENAME, TRUNCATE
       数据控制(DCL): GRANT, REVOKE
       事务控制(DTL): COMMIT(事务提交), ROLLBACK(事务回滚), SAVEPOINT(设置回滚点)
    6.delete,truncate区别:
      delete: 删除表中的一条或者多条记录,该操作需要提交事务
      truncate:清空表格,该操作不需要提交事务

    7.oracle数据库环境准备(一般现在使用mysql数据库的是一种趋势):
      三种登录方式:
        sqlplus "/as sysdba"
        sqlplus system/*******
        sqlplus username/password

    8.去重
      distinct关键词只能放在select关键词后面.
      如果distinct关键词后面如果出现多列,表示多列联合去重,即多列的值都相同的时候才会认为是重复的记录。

    7.select语句永远不对原始数据进行修改。

    8.加减乘除有优先级,加小括号可以改变运算的顺序

    9.字符串拼接select id,first_name||' '||last_name||','||title as name from s_emp;

    10.sqlplus 登录之后,可以使用buff(缓存)来存储/执行/修改要执行的sql语句
      这里的buff的特点:
      1.buff中只能存储一条sql语句(但是这条sql语句可能有很多行)
      2.每次放入新的sql语句,会把之前的覆盖掉
      3.每次执行sql语句,都会把这个sql语句放到buff里面

    11.sqlplus基础操作
      直接输入该行的行号就是定位
      l 查看缓存中的sql语句
      del 删除[定位]的那一行内容
      ! 后面接终端命令 !clear:清屏 windows中使用$符号 例如:$cls
      / 执行缓存sql命令
      clear buffer:清空当前缓存的命令
      save test.sql buff中的sql语句保存在test.sql文件中
      get test.sql 把test.sql中的内容在加载到buff中,但是没有运行
      导入:
        start test.sql 把test.sql中的内容在加载到buff中并且执行
        @test.sql 把test.sql中的内容在加载到buff中并且执行
        edit file_name 使用系统默认编辑器去编辑文件
      录制:

        spool file_name //将接下来的sql语句以及sql的运行结果保存到文件
        sql1
          result1
        sql2
          result2
        ...
        spool off 关闭spool功能
      exit:退出

    12.查询结果不好看

      通过column使我们的显示界面好看:COLUMN last_name FORMAT a15;  可以简写为:col last_name for a15;

    13.order by

      desc(降序) asc(默认升序),优先级最低

    限制查询:

    14.逻辑比较运算符:
      select col_name,...
      from tb_name  
      where col_name 比较操作表达式
      逻辑操作符 and or not
      col_name 比较操作表达式
      ...
    15.逻辑比较操作符 = > < >= <= !=

      不等于:三个都表示不等于的意思(经常用的是!=) != <> ^=

    16.注意:
      1.限制查询条件,使用where子句
      2.条件可以多个,使用逻辑操作符和()进行条件的逻辑整合
      3.where子句的优先级别最高
      4.比较操作表达式由操作符和值组成

    sql比较操作符:

    17.between and:在什么范围之内

    需求:查看员工工资在700 到 1500之间的员工id,和名字

    select id,last_name,salary
    from s_emp
    where salary between 700 and 1500;

    18.in(list):在一个列表中

    需求:查看员工号1,3,5,7,9员工的工资

    select id,last_name,salary
    from s_emp
    where id in (1,3,5,7,9);

    19.like:模糊查询,即值不是精确的值的时候使用
      通配符,即可以代替任何内容的符号
      % :通配0到多个字符
      _ : 当且仅当通配一个字符
      转义字符:默认为\,可以指定 指定的时候用escape 符号指明即可,转义字符只能转义后面的一个字符    

    eg:查看员工名字中包换一个_的员工id和工资

    select id,last_name,salary
    from s_emp
    where last_name like '%\_%' escape '';

    20.is null:对null值操作特定义的操作符,不能使用=
    eg:查看员工提成为为空的员工的id和名字

    select id,last_name,commission_pct
    from s_emp
    where commission_pct is null

    21.逻辑操作符,当条件有多个的时候使用
      and:且逻辑
      or:或逻辑
      注意:and逻辑比or逻辑要高
      not:非逻辑

    函数:
      单值函数
         1.字符函数 lower upper initcap concat substr length nvl
         2.日期函数 
         3.转换函数 to_char to_number to_date
         4.数字函数 round trunc mod
      分组函数
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    22.字符函数
      LOWER 把字符转为小写
      UPPER 把字符转换为大写
      INITCAP 把字符串首字母转换为大写
      CONCAT 把俩个字符串连接在一起(类似之前的||的作用)
        select concat('hello','world') msg from dual;
        select 'hello'||'world' msg from dual;
      SUBSTR 截取字符串
        select last_name,substr(last_name,3) from s_emp;第二个参数从1开始为正;(从前往后)
        select last_name,substr(last_name,-1) from s_emp;第二个参数从-1开始为负;(从后往前)
       第三个字符表示截取多少个:
         select last_name,substr(last_name,-3,2) from s_emp;
         select last_name,substr(last_name,3,2) from s_emp;
      LENGTH 获得字符串长度
        select length('world')from dual;
      NVL 替换列中为null的值
        select last_name,nvl(commission_pct,0)from s_emp;
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    23.数字函数
      ROUND 四舍五入
        select round(45.923,2) from dual;保留到小数点后面2位
        select round(45.923,0) from dual;保留到个位 (个十百千万...)
        select round(45.923,-1) from dual;保留到十位 (个十百千万...)
      TRUNC 截取到某一位
        select trunc(45.929,2) from dual;截取到小数点后面2位
        select trunc(45.923,0) from dual;截取到个位 (个十百千万...)
        select trunc(45.923,-1) from dual;截取到十位 (个十百千万...)
      MOD 取余
        select mod(10,3) from dual;把10和3进行取余 (10除以3然后获取余数)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    24.日期函数(sysdate关键字,表示系统的当前时间

       例如:显示时间:当前时间
       select sysdate from dual;
       注意:sysdate进行加减操作的时候,单位是天)

      MONTHS_BETWEEN 俩个日期之间相差多少个月(单位是月)
        select months_between(sysdate+30,sysdate) from dual;
        select months_between('01-2月-2019','01-2月-2019') from dual;
      ADD_MONTHS 返回一个日期数据:表示一个时间点,往后推x月的日期
        select add_months('01-2月-2019',2) from dual;
        select add_months(sysdate,4) from dual;
        注意:这个数字也可以是负数,表示往前推x月
      NEXT_DAY 返回一个日期数据:表示一个时间点后的下一个星期几在哪一天
        select next_day(sysdate,'星期五') from dual;
        select next_day('01-2月-2019','星期五') from dual;
        如果要使用'FRIDAY',那么需要把当前会话的语言环境修改为英文
        alter session set nls_language=english;
        alter session set nls_language='simplified chinese';
      LAST_DAY 返回一个日期数据:表示一个日期所在月份的最后一天
        select last_day(sysdate) from dual;当前日期所在月份的最后一天(月底) 15.16?
      ROUND 对日期进四舍五入,返回操作后的日期数据
        select round(sysdate,'MONTH') from dual;
        //这个写法是错误的
        //数字函数也有一个round
        //俩个ronnd函数有冲突
        //所以这里不能使用默认的日期格式
        select round('01-2月-2019','MONTH')
        from dual;
      TRUNC 对日期进行截取 和round类似,但是只舍弃不进位
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    25.四.类型转换函数
      TO_CHAR 把日期或数字转换为字符
      TO_NUMBER 把字符转换为数字
      TO_DATE 把字符转换为日期
    所以在日常的编程中若要向数据库中存一个日期,我们可以使用to_date函数
    若要将一个日期数据以字符串形式从数据库中取出,我们可以使用to_char函数。
    使用形式:fx(value,changed model);

  • 相关阅读:
    mysql错误:java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.
    MyBatis中id回填的两种方式
    springboot项目打war包流程
    Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include springcloudstarterloadbalancer?
    idea thymeleaf页面变量报错解决
    项目编码流程
    逻辑删除
    mysql 连接url中需要添加useUnicode=true&characterEncoding=UTF8
    【转】[wp7应用内截图]Taking a screenshot from within a Silverlight #WP7 application
    Wp7客户端与Webservice的数据传输,json的序列化与反序列化
  • 原文地址:https://www.cnblogs.com/Magic-Li/p/12697182.html
Copyright © 2020-2023  润新知