javaweb-Oracle_1

一、数据的存储

1.Java程序中存储数据:
1.1使用变量存储
1.2使用数组和集合存储
1.3使用对象存储
注意: 以上存储数据的方案不能保证数据的持久存储。 都是基于内存存储,属于瞬时数据,伴随着程序运行的终止而消失。

2.使用文本文件存储数据:
存在的缺陷:
-对于数据的类型没有明确的划分。
-安全性的问题。 没有提供完善的数据备份和恢复机制。
-对于查找指定条件的数据,操作很麻烦。
-在多用户并发访问的时候, 容易造成数据的混乱。

二、DBMS(数据库管理系统- DataBase Management System)
1、 数据库管理系统主要是用于组织和管理我们存储的数据的。
2、数据库的分类:
2.1 关系型数据库:

  • 关系型数据库,通常是以一张二维表的形式存储数据。表与表之间的数据会存在交叉引用的关系。
  • 主流的关系型数据库: Oracle、DB2、Mysql、Sql Server 、Postgresql 等等

2.2 非关系型数据库:
-非关系型数据库(Nosql), 存储数据的结构和形式根据不同的非关系型数据库产品的设计不同,大致可以分为:
① 基于键值对存储 : 比如 redis
② 基于文档存储 : 比如 mongodb
③ 基于列存储 : 比如 Hbase

三、Oracle数据库
1、Oracle数据库的管理形式: 基于多用户的验证访问来管理的。 支持多用户的访问。
在这里插入图片描述
2、 Oracle数据库中的基本概念讲解:

2.1 table(表): 表是存储数据的基本单元, 也叫做实体集[ entitySet].
2.2 row(行): 一行数据代表了一条完整的事物的信息。 也叫做实体(entity)。
2.3 column(列): 列是每一条完整事物信息的一个属性。也叫做字段(field)。
2.4 主键: 主键主要是用于唯一的标识表中的一行数据的。 值不能为空。
2.5 外键: 外键的主要作用是与其他表的数据产生相应的关系。

3、 安装Oracle数据库
注意事项: 安装目录不能有中文和空格。 建议放在根目录。
在这里插入图片描述
4、 手动操作Oracle的服务
4.1 进入操作系统的服务目录 : 开始–》运行 输入 services.msc
在这里插入图片描述
服务一: OracleServiceXE : 是我们oracle数据库的核心服务。
服务二: OracleXETNSListener : 是远程通过网络访问Oracle的监听服务。

4.2 当发现Oracle的客户端连接不上Oracle数据库时, 可以进入系统服务目录, 检查以上两个服务是否正常启动。 如果发现服务没有启动, 启动则可以。 如果返现服务是启动状态,但是还不能访问,可以手动重新启动以上两个服务。
PS: 先重启监听服务,再重启核心服务。

5、专业卸载方式: 使用oracle的安装包操作 或 进入系统的控制面板进行操作。
6.、访问Oracle数据库的方式:
6.1 使用Isqlplus访问: 这种访问方式是Oracle 10g版本提供的基于客户端浏览器的访问方式。 11g版本之后不再提供。
登录系统账户: 解锁我们学习使用的账户 (hr)
在这里插入图片描述
6.2 使用sqlPlus访问: 这种方式是Oracle数据系统提供的基于命令行的访问方式。 进入sqlPlus命令行:

  • 可以在开始的菜单中点击进入。

  • 在开始运行中,输入sqlplus 进入 命令行客户端。

alter  user  hr account   unlock;//解锁hr用户

输入用户名密码,不要超过3次。

6.3 使用第三方的软件 plsqlDeveloper 访问:

在这里插入图片描述
书写命令: 点击文件 – 新建 – sql窗口 ==》 然后在新创建的编辑窗口处书写命令
修改字体大小: 点击工具 – 首选项 – 用户界面下的字体 进行设置

7、几个简单的命令:
7.1 查看一个表的结构: desc 表名;
7.2 基于命令行解锁账户: alter user hr account unlock; – 只有管理员账户能执行
7.3 修改账户的密码: alter user hr(账户名) identified by 新的密码; – 只有管理员账户能执行

四、Sql(Structured Query Language) - 结构化查询语言
1、 Sql是关系型数据库的标准查询语言。 在不同的关系型数据库当中, 存在的微小的差异。

五、简单的查询
1.语法: select 字段名,字段名 … from 表名;

  • 说明:
    from 用于确定从那张表查询数据
    select 后指定字段名
    -书写简单查询的思路: 先明确从那张表查询数据, 然后明确查询那些字段的信息

2.案例:
2.1 查询部分字段的信息

  • 查询员工表的编号、名、姓、工资
    select employee_id,first_name,last_name,salary
    from employees;
    PS: sql语句以分号结束。 书写sql命令不区分大小写, oracle数据库系统在执行时会将sql转换成大写的执行。
    2.2 查询全部字段的数据
    select employee_id,first_name,last_name,email,phone_number,
    hire_date,job_id,salary,commission_pct,manager_id,department_id
    from employees; - 手动指定所有字段

    select * from employees; - 通过的方式查找
    PS: * 的方式,数据库在执行的时候,需要将
    转换成表中所有的字段,再执行, 低效。 开发中建议使用手动指定所有的字段 。
    2.3 oracle允许对查询结果中的数据进行算数运算 : + - * /
    -查询员工的编号、名字、年薪
    select employee_id,last_name,salary*12 from employees;
    PS:
    -数值类型可以做算数运算。
    -日期类型也可以做 + - 的算数运算/以天为单位,不能做 * 和 /的运算。

2.4 oracle中的字符串拼接 : str1||str2 ==> str1str2
-查询员工的编号、姓名(Steven_King的形式展示)
select employee_id,first_name||’_’||last_name
from employees;
PS: 拼接的字符串需要使用单引号包含。

2.5 字段起别名 : 字段名 as 别名

  • 查询员工的编号、姓名、年薪 | 要求: 展示 编号 姓名 年薪作为字段名
    select employee_id as 编号,first_name||’_’||last_name as 姓名,salary*12 as 年薪
    from employees;
    PS: 字段的别名可以加双引号, 当加上双引号后别名严格区分大小写。

六、条件查询 - where 【重点】

  1. 语法: select 字段名,字段名… from 表名 where 条件 ;
  2. 条件查询案例:
    2.1 等值查询: =
  • 查询工资为12000的员工信息
    select *
    from employees where salary=12000;
    2.2 不等值查询: != (<>)
  • 查询工资不为12000的所有员工信息
    select *
    from employees where salary!=12000;
    等效写法
    select *
    from employees where salary<>12000;
    2.3 关系比较查询 : > >= < <=
  • 查询工资高于12000的员工信息
    select *
    from employees where salary>12000;

2.4 逻辑运算查询 : and or

  • 查询工资高于8000 并且小于12000的员工信息
    select *
    from employees where salary>8000 and salary<12000;

2.5 区间查询 : between 条件 and 条件

  • 查询工资高于8000并且小于12000的员工信息【包含边界值】
    select *
    from employees where salary between 8000 and 12000;

2.6 枚举查询: in (条件1,条件2,条件3)

  • 查询工资是2200,6000,8000,24000的员工信息
    select *
    from employees where salary in (2200,6000,8000,24000);
    PS: in 后面枚举条件的个数最多1000个。

2.7 模糊查询 : like 条件 【重点】
① 模糊查询中几个条件字符 : _[匹配一个字符] %[匹配0到n个字符]

  • 查询first_name 是由5个字符组成的员工信息
    select *
    from employees where first_name like ‘_____’;
  • 查询first_name 是由5个字符组成 并且 是以大写S开头的员工信息
    select *
    from employees where first_name like ‘S____’;
  • 查询first_name 包含字母s的员工信息
    select *
    from employees where first_name like ‘%s%’;
  • 查询last_name不包含字母s的员工信息
    select *
    from employees where last_name not like ‘%s%’;

2.8 对于null 的判断

  • 查询没有提成的员工信息
    select *
    from employees where commission_pct is null;
  • 查询有提成的员工信息
    select *
    from employees where commission_pct is not null;

七、排序查询 - order by 【重点】

  1. 语法: select 字段名, 字段名 … from 表名 where 条件 order by 排序的字段 asc/desc;
  • 说明: asc 升序【默认】 desc 降序
  1. 案例:
    2.1 查询员工的信息 按照工资从低到高的顺序展示

select *
from employees order by salary asc;
2.2 查询员工的信息,按照工资从高到低的顺序展示,如果工资相同 按照员工编号的升序展示
select *
from employees order by salary desc,employee_id asc;

PS: 排序条件可以是多个字段,多个字段之间使用逗号分隔, asc/desc关键字作用于前面的字段。

2.3 查询员工信息,按照提成的从高到低顺序展示
select *
from employees order by commission_pct desc; ERROR! .
PS: 在oracle数据库系统中null值最大。
-nvl函数 :
nvl(字段名,值) 结果是 : 如果指定字段的值为null,则为指定值。 如果不为null取字段本身的值。

  • 查询所有员工的提成,没有提成多少直接展示为0
    select nvl(commisson_pct,0) from employees;

使用nvl函数解决排序中null值最大的问题:
select *
from employees order by nvl(commission_pct,0) desc;
八、查看系统当前时间

  1. oracle数据库系统为了维护sql语句的完整性,提供了一个哑表(dual), 这张表默认是一行一列的。
    select sysdate from dual; - 显示当前系统时间
    select systimestamp from dual; - 时间会精确到秒后面6位小数
    九、单行函数: 单行函数作用于每一行数据产生一个结果 。
  2. 日期类型处理函数
    1.1 to_char : 将日期类型转换成字符展示
    -使用方式: to_char(日期, 格式化字符串)
    -常用的格式化字符串:
    年 yyyy
    月 MM
    日 dd
    时 hh
    分 mi
    秒 ss
    星期 day
  • 案例: 查询今天是星期几
    select to_char(sysdate,’day’)
    from dual;

1.2 to_date: 将字符串转换成日期类型(格式是oracle系统默认的日期格式: dd-mmm-yy )
-使用方式: to_date(目标日期字符串,格式化字符串)
将2019年10月1日转换成日期格式
select to_date(‘2019-10-1’,’yyyy-mm-dd’) from dual;

-查询2019年的五月一日是星期几
① 将字符串转成oracle系统的日期类型
② 再将其按照指定的格式转换成字符串展示
select to_char(to_date(‘2019-5-1’,’yyyy-mm-dd’),’day’)
from dual;

小练习: 查询1997年入职的员工信息
select *
from employees where to_char(hire_date,’yyyy’)=‘1997’;

十、组函数: 组函数是针对于一组数据产生一个结果。
1.sum() : 求和 , 只能作用于数值类型
2.avg() : 求平均值 ,只能作用于数值类型
3.max(): 求最大值, 支持所有类型。
4.min() : 求最小值,支持所有类型。

  • 查询所有员工每个月工资的总和
    select sum(salary) from employees;
  • 查询最高工资、最低工资、平均工资
    select max(salary),min(salary),avg(salary) from employees;

5.count() : 统计查询 , 支持所有的类型。
-统计查询员工表一共多少条信息
select count(*) from employees; 等效写法 select count(1) from employees;

  • 根据指定字段统计查询 | 注意: 如果指定字段的值为空, 会自动忽略 .
    案例: 统计查询所有有提成人员的数量
    select count(commission_pct) from employees;
    十一、分组语句 - group by 【掌握】
    1.语法: select 字段名,字段名… from 表名 where 条件 group by 分组条件 order by 分组条件;
    2.说明:
    group by 后面跟分组条件字段
    3.案例:
  • 查询各个部门的平均工资 以及 部门的编号
    分析:
    ① 确定分组条件 : department_id
    ② 对分组后的数据求结果(平均值) : avg(salary)
    select department_id,avg(salary)
    from employees group by department_id;

-查询1997年各个月份入职的员工人数 以及 月份
① 根据条件初次筛选数据 : where to_char(hire_date,’yyyy’)=’1997’
② 确定分组条件: 月份 group by to_char(hire_date,’mm’)
③ 对分组后的数据进行统计 : count()
select to_char(hire_date,‘mm’),count(
)
from employees
where to_char(hire_date,‘yyyy’)=‘1997’
group by to_char(hire_date,‘mm’)
order by to_char(hire_date,‘mm’);

  1. group by语句书写注意事项:
    4.1 只有出现在group by语句后的字段,才能单独出现在select语句后 。
    4.2 如果要在group by语句中进行结果的排序, 那么排序字段也必须是group by后指定的字段,和结果中的字段。
    4.3 如果group by字距中的字段使用了某个单行函数,那么select子句中的字段也必须使用相同的单行函数。

十二、having语句 : 对分组后的数据再次进行筛选 。【了解】

  1. 语法: select 字段… from 表名 where 条件 group by 分组条件 having 条件 order by …;
  2. 案例:
    –查询1997年各个月份入职的员工人数、月份,要求展示入职人数大于3的月份
    select to_char(hire_date,‘mm’),count()
    from employees
    where to_char(hire_date,‘yyyy’)=‘1997’
    group by to_char(hire_date,‘mm’)
    having count(
    )>3 – 专门对分组后的数据进行筛选
    order by to_char(hire_date,‘mm’);
  3. 当使用where 或 having 都能满足一个需求时,优先选用where .
  • 查询60 80 90 号每个部门的平均工资
    ① 使用where实现:
  • 先筛选出60 80 90 号部门的信息
  • 确定分组条件 : group by department_id
  • 查询出60 80 90号部门的平均工资
    select department_id,avg(salary)
    from employees where department_id in (60,80,90)
    group by department_id;

② 使用having实现:

  • 确定分组条件: group by department_id
  • 对分组后的数据再次筛选: having department_id in (60,80,90)
  • 求出各个部门平均工资
    select department_id,avg(salary)
    from employees
    group by department_id
    having department_id in(60,80,90);

总结: select语句的执行顺序
select 字段… from 表名 where 条件 group by 分组条件 having 条件 order by …;

1. from 确定从那张表查询
2. where 进行初次筛选
3. group by 对筛选后的数据进行分组
4. having 对分组后的数据再次进行筛选
5. select 生成结果集
6. order by 对结果集进行排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值