数据库基础(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);

posted @ 2020-04-14 13:47  阿德(*^_^*)  阅读(635)  评论(0编辑  收藏  举报