前言:
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);