一、Oracle前置知识:
1. 相关服务启动: 运行 > services.msc
I. OracleServiceXE(ORCL):Oracle主(核心)服务,开启后才可通过本机访问数据库。
II. OracleXE(oraDb11g_home1)TNSListener:Oracle监听服务,对外提供连接访问,开启后才可通过应用程序或其他客户端进行访问。
2. 解锁HR用户:开始>运行 >cmd >
sqlplus /nolog > conn sys as sysdba > alteruser hr identified by 密码 account unlock;
登录:C: sqlplus hr/123456
登录:SQL> conn hr > 123456
查表:select table_name from user_tables;
3. 设置hr用户会话特权和操作权限:
<user test lacks create sessionprivilege logon denied> 缺少特权
I. grantconnect to hr;
II. grantresource to hr;
III. grantcreate session to hr;
一、现有的数据存储方式:
1. Java程序存储数据(变量、对象、数组、集合),数据保存在内存中,属于瞬时状态存储。
2. 文件(File)存储数据,保存在硬盘上,属于持久状态存储。
I. 缺点:
a. 没有数据类型的区分。
b. 存储数据量级较小。
c. 没有访问安全限制。
d. 没有备份、恢复机制。
二、数据库管理系统DBMS(Database Management System):
1. 网状结构数据库:美国通用电气公司IDS(integrated Data Store),以节点形式存储和访问。
2. 层次结构数据库:IBM公司IMS(informationManagement System)定向有序的树状结构实现存储和访问。
3. 关系结构数据库:Oracle、DB2、MySQL、SQL Server,以表格(Table)存储,多表间建立关联关系,通过分类、合并、连接、选取等运算实现访问。
4. 非关系型数据库:MongDB、Redis,使用哈希表,表中以键值(key-value)的方式实现特定的键和一个指针指向的特定数据。
三、Oracle数据库:
1. Oracle服务器:安装在操作系统中的关系数据库管理系统(RDBMS Relationship),并对外提供存储及访问的服务(增删改查)。
相关服务启动: 运行 > services.msc
I. OracleServiceXE(ORCL):数据库服务(实例),Oracle主(核心)服务,开启后才可通过本机SQL*Plus访问数据库。
II. OracleXE(oraDb11g_home1)TNSListener:Oracle监听服务,对外提供连接,开启后才可通过应用程序或其他客户端(PL/SQL)进行访问。
III. OracleJobSchedulerXE(ORCL):Oracle作业调度(定时器)服务。
2. Oracle客户端:对DBMS中数据的访问渠道。
I. SQL*Plus: DOS操作界面,运行-> cmd -> sqlplus 用户名/密码 | sqlplus /nolog -> conn 用户名; -> 密码
II. iSQL*Plus: Web操作界面,访问http://localhost:8080/apex
III. PL/SQLDeveloper:Oracle数据库集成开发工具。
四、结构化查询语言SQL(Structured Query Language):用于操作数据和管理关系型数据库系统的程序设计语言。
五、数据查询:
1. 基本查询:
I. 语法:select 列名 from 表名
II. 案例:
1). 查询部分列:
//查询员工表中的所有员工的编号、名字、邮箱。
select employee_id , first_name , email
from employees;
2). 查询所有列:
select * from employees;
注:生产环境下,优先使用列明查询,*的方式需要转换成全列明,效率低,可读性差。
3). 对列中的数据进行计算:+ - * /
//查询员工表中所有员工的编号、名字、年薪。
select employee_id , first_name , salary * 12
from employees;
4). 列的别名:
select employee_id as"工号" , first_name as "名字" , salary * 12 as "年薪"
from employees;
别名中如果有空格必须加“ ”
5). 拼接字符串:
//查询所有员工的编号和“姓名”
select employee_id , first_name || '.' || last_name
from employees;
注:SQL中的字符串使用 ' (单引号)表示;双引号在列明中使用,常用于定义别名。
6).
//查询员工表中所有经理的ID。
select distinct manager_id
from employees;
2. 排序:对查询后的结果数据进行排列。
I. 语法:select 列名 from 表名 order by 排序列(默认升序 asc | 降序desc)
II. 案例:
1). 依据单列排序
//查询员工表中编号、名字、薪资,按照薪资降序排序
select *
from employees
order by salary desc
2). 依据多列排序
select *
from employees
order by salary desc , employee_id desc
3. 条件查询:筛选符合条件的查询结果
I. 语法:select ... from ... where 布尔表达式
II. 案例:
1). 等值判断:(=)
//查询薪资是11000的员工信息
select *
from employees
where salary = 11000
字符串常量,日期格式要用‘ ’圈上,区分大小写
‘King’ 查日期都要用这种格式,不管表里格式是什么 '17-6月-1987' (年用后两位数字也可查询)
2). 多条件判断:(and、or)
//查询薪资是11000的员工信息,并且提成为0.30
select *
from employees
where salary = 11000 and commission_pct = 0.30
3). 不等值判断:(>= <= > < != <>)
//查询员工的薪资在6000~10000之间的员工信息
select *
from employees
where salary >= 6000 and salary <= 10000
4). 区间判断:(between and)
//查询员工的薪资在6000~10000之间的员工信息
select *
from employees
where salary between 6000 and 10000
取非:/查询员工的薪资不在6000~10000之间的员工信息
select *
from employees
where salary not between 6000 and 10000
5). null值判断:(is null、is not null)
//查询没有提成的员工信息
select *
from employees
where commission_pct is not null
6). 枚举查询:(in(v1,v2,v3)) or 的效率比in高
//查询部门编号为60、70、80、90的员工信息
select *
from employees
where department_id in(60,70,80,90)
//查询部门编号不为60、70、80、90的员工信息
select *
from employees
where department_id not in(60,70,80,90)
7). 模糊查询(%:任意长度的任意字符,_:长度为1的任意字符)like
//查询名字以"L"开头