Oracle的监听服务:OralceOraDB12Home1TNSListener 需要通过程序链接数据库进行开发的时候,此服务必须打开,如果只是在本机使用,此服务可不启动
Oracle 的实例服务:OracleServiceORCL,默认启动
运行SQL Plus,输入用户名和密码。
如果需要解锁账户,打开cmd,输入sqlplus / as sysdba。在SQL提示符后面输入alter user system identified by root;alter user system account unlock;
再次输入用户名和密码,显示成功。
访问oracle的web端:https://localhost:5500/em/login
如果需要登录sys用户,用户名输入sys /as sysdba。
这样,就建立了虚拟机上的oracle连接。
oracle文件中,后缀名为ora或dbf的表示数据文件,为ctl的是控制文件,为log的
是日志文件。
Oracle数据库指的是一个库。
一个oracle实例有一系列的后台进程和内存结构组成。一个Oracle数据库可以有多个实例。
用户是建立在实例下的,不同的实例可以创建相同名字的用户 。
表空间是oracle对物理数据库上相关数据的逻辑映射,一个数据库在逻辑上可以被划分为一个或者若干个表空间,每一个表空间包含了在逻辑上相关的一组结构。
每一个数据库实例至少有一个表空间(system表空间),每一个表空间有同一磁盘上的一个或多个文件组成,这些文件叫数据文件,一个数据文件只能属于一个表空间。
数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中,实际是在一个或者多个数据文件中。一旦数据文件被加入到某一个表空间后,就不能删除这个文件。
如果要删除某个数据文件,只能删除其所属的表空间才可以删除表的数据,是由用户放入某一个表空间的,而这个表空间会随机的把这些数据放到一个或者多个数据文件中。
oracle数由用户和表空间对数据进行管理和存放的。表不是由表空间查询的,而是由用户去查询。
oracle数据库对实例:一对多
表空间和用户隶属于实例。
用户对表空间:多对一
表空间对数据文件:一对多
表对数据文件:多对多
登录客户端,新建命令窗口。
-- 创建scott用户
create user scott identified by tiger;
--为scoot赋予权限
Grant connect,RESOURCE,UNLIMITED TABLESPACE TO scott;
--设置用户使用的表空间
ALTER USER scott default tablespace users;
--设置用户的临时表空间
Alter user scott Temporary tablespace temp;
create user 用户名 identified by 密码;
grant xxx to 用户名;xxx可以是连接权限,资源权限,无限制的表空间权限。如果没有分配无限制表空间,则必须制定一个值。
alter user 用户名 default tablespacce 默认表空间名。
alter user 用户名 temporary tablespacce 暂时表空间名。
前提:该用户必须具备创建表的权限。
oracle的数据类型
varchar2(size) 可变长字符串
char(size) 定长字符串
number(p,n) 可变长数值类型
date 日期型
long 可变长字符数据,最大可达2G
clob 字符数据,最大可达4G
blob 二进制数据,最大可达4G
修改表:alter table
追加列:add(列名 列类型 限定条件);
修改列:modify(列名 列类型 限定条件);
删除列:drop column列名;
重命名列:rename column 原来列名 to 新列名;
删除表:
drop table 表名;
清空表:
delete from 表名;
truncate table 表名;
delete和truncate的区别:delete删除的数据在未提交之前,可以回滚,不释放占有的空间和资源;truncate删除的数据,删除之后不可回滚,释放占有的存储空间和资源。
重命名表:
rename 表名 to 新表名;
SQL是一门语言 :结构化查询语言
SQL是最重要的关系型数据库操作语言,是所有的关系型数据库管理系统的标准语言。
关系型数据库: oracle mysql sqlserver
nosql : redis mongdb Hbase
SQL 语言是一种非过程化语言,只需要提出做什么,而不需要指明怎么
SQL语言的作用:
1 可以对数据库的数据进行增删改查操作(CRUD)
2 数据库的对象进行创建 修改 删除操作。
3 用户赋权限 取消权限 角色赋权限 取消权限 给用户关联角色
4 事务控制
DML:数据操纵语言
DDL:数据定义语言
DCL:数据控制语言
DML 用于查询与修改数据记录 包括:
用于定义数据看的结构 比如创建 修改或删除数据库对象。包括:
用来控制数据库的访问,包括:
1 使用大小写规范提供词义的识别能力
2 使用空格提供良好的语言标记区分
等号的两边要使用空格
在逗号的后面使用空格
3 使用缩进提高语句的逻辑层次表达能力
4 使用垂直空白提供关键字和参数的区分能力
5 注释:
单行注释:–
多行注释:/* */
mysql中的注释是:#
select *| { [ditinct] columnname|expression [alias],..} from tablename;
SELECT 标识选择的列
FROM 标识从那个表查询
SELECT * FROM dept;--* 表示查询所有的列
SELECT deptno,dname,loc from dept;
SELECT empno,ename,job,sal from emp;
注意:
数字和日期使用的算术运算符: + - * /
-- 查询所有的员工的姓名 职位 薪资 为每个员工涨薪1000元
SELECT ename, job, sal, sal + 1000 FROM emp;
+ - * /
--查询所有的员工的姓名 职位 薪资 为每个员工涨薪1000元 并计算涨薪后的年薪
SELECT ename,job ,sal, (sal + 1000) * 12 FROM emp;
-- 查询所有的员工的姓名 职位 薪资 和奖金
SELECT ename, job, sal,comm FROM emp;
-- 查询所有的员工的姓名 职位 薪资 和奖金 以及年收入(薪资 * 12 ) + 奖金
SELECT ename,job,sal,comm, sal * 12 + comm FROM emp;
包含空值的数学表达式的值为空值
别名紧跟列明之后,之间需要保留一个空格。也可以在别名和列明之间加入关键字 AS 别名可以使用双引号,以便在别名中包含空格或特殊的字符 并区分大小写
--查询所有的员工的姓名 职位 薪资 和奖金 以及年收入(薪资 * 12 ) + 奖金
SELECT ename AS name, job,sal salary,comm, sal *12 AS "year salary" FROM emp;
--查询所有员工的姓名 职位 薪资 作为员工的个人基本信息 拼接在一起
SELECT ename || '-' ||job || '-' ||sal AS "Employee info" FROM emp;
拼接后的值成为一列
--查询EMP表中所有雇员的部门编号 distinct
SELECT distinct deptno from emp;
SQL:一种语言 控制数据库中的数据和结构的定义
SQL *PLUS 一种环境,提供了sql语句执行的一个环境
字符和日期 要包含在单引号中
字符大小写敏感的 日期格式敏感
默认的日期格式 :DD-MON月-RR
–查询20部门的所有雇员信息
select * from emp where deptno=20;
-- 查询姓名为SMITH的雇员的基本信息 此时的字符串的匹配 是严格匹配大写小的
select * from emp where ename='SMITH';
-- 查询入职日期为17-12月-80的雇员信息
SELECT * FROM emp WHERE hiredate='17-12月-80';
与java中的关系运算符类型,注意相等判断是=。
between … and 介于…之间
in(值1,值2,值3,…) 等于其中的任意一个
like 模糊查询 匹配查询
is null 值为空
and 且
or 或
not 非
sql语法中没有短路与和短路或
算术运算符 < 连接符 < 比较符 < is null 、like ,in < BETWEEN AND < NOT ORDER BY子句 ASC:升序 从小到大 DESC: 降序 从大到小 order by 子句在select 语句的结尾 函数就是java中的方法 :函数有输入有输出 输入就是参数 输出就是结果 而且输入可以是多个 输出的结果只有一个 SQL函数分为:单行函数和多行函数 单行函数:**只能对一行进行变换,每行返回一个结果。可以转换数据类型 在使用的时候 还可以嵌套。**参数可以是一列或一个值。 单行函数: 字符 数值 日期 转换 通用 控制大小写: LOWER UPPER INITCAP 字符的控制函数: CONCAT SUBSTR LENGTH TRIM LTRIM RTRIM LENGTHB INSTR、INSTRB、LPAD、RPAD REPLACE SOUNDX、TRANSLATE ASCII CHR add_months last_day months_between next_day new_time round trunc extract localtimestamp new_time(dt1,c1,c2):给出时间c1时区的dt1时间,对应c2时区的日期和时间 round():给出日期d1按期间(参数c1)四舍五入后的期间的第一天日期 trunc(d1[,c1]):返回日期d1所在期间(参数c1)的第一天日期,c1可以是day,month,q,year等等。 localtimestamp:返回会话中的日期和时间 extract(c1 from d1):日期/时间d1中,参数c1的值。比如 current_time current_date sysdate dbtimezone sessiontimezone interval to_char函数对日期的转换:to_char(date,‘format_model’) 必须包含单引号 其中的format_model是大小写敏感 可以包含任意的日期格式 数值型转换为字符型 to_char:to_char(123.45,’$999,999.00’)->¥123.45 9 表示数字 0 表示0 $ 表示美元 L 表示本地货币 .表示小数点 avg sum stddev variance count max min 注意事项 在组函数中使用nvl函数 count(nvl(comm,0)) ,会将被忽略的null值转化为数值参与运算 去重统计count(distinct deptno) sum(exp)over(分区/排序):连续求和,只有最后一行的值才是sum()。第二行就是第一行+第二行。 rank()over(条件/排序/分区) dense_rank()over(条件/排序/分区) dense_rank在并列关系是,相关等级不会跳过。rank则跳过。 row_number()over(排序):先执行排序,再返回排序后的行号 按照名字分区,再按照seqno升序排序得到排名id,只返回id前2的结果,最终返回过滤id后的结果 lag(expr,offset,default) lead(expr,offset,default) lag(列):取上一个该列值作为值 lead(列):取下一个该列值作为值 OFFSET是缺省为1 的正数,表示相对行数。希望检索的当前行分区的偏移量 default是超出范围时自动返回的值,默认是null DUMP greatest least nvl nvl2 user uid userenv nullif coalesce rownum bfilename vsize decode case…when…then…end decode(条件,值1,翻译值1,值2,翻译值2,…值n,翻译值n,缺省值) decode (条件, 值1,翻译值1, 值2,翻译值2,… 值n,翻译值n, 缺省值) case [<表达式>] case有两种形式,一种是提前列名,case 列名,when后面只有值。另一种是case后面接when when后面是表达式 列名=值 sys_guid sys_context dbms_random 获取主机名和IP地址 utl_inaddr包: 多表查询要克服笛卡尔积的问题,需要使用where设置关联条件。 等值连接:where后面的逻辑运算符是=。 非等值连接:where后面使用其他逻辑运算符。 内连接:结果集中只包括匹配且关联列不为null的行。 外连接:结果集中也可以匹配关联列为null的行。 外链接的实现:(1)关键字left outer join /right outer join/full outer join (2)在where子句的列后面加上’(+)’,表示这个表可以有null,另一个表全部显示 全部显示的表是主表,另一个表是从表。 (+)在左边是右外连接。 (3)join 关键字后面用on不用where。(+)前面只能用where 叉集:cross join 得到笛卡尔积 自然连接:natural join 以表中具有相同名字的列作为条件,创建等值连接。 使用using子句创建连接:using(列名),using与join连用,不需要给表取别名 使用on子句创建连接:on与join连用,可以进行多表连接 子查询:where后面的子句是另一个查询的结果,称为子查询 子查询优先于父查询执行 多行子查询 子查询修饰符:7排序
8 SQL函数
8.1单行函数
8.2字符函数
8.3数值函数
8.4日期函数
select
extract(hour from timestamp '2001-2-16 2:38:40 ' ) 小时 from dual;
8.5转换函数
8.5.1 to_char详细使用
8.6聚组函数(多行函数)
8.7分析函数
还可以加上BETWEEN AND 形式,例如row between m preceding and n following
8.7.1 sum(…) over(…)
8.7.2 rank() dense_rank()
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。8.7.3 row_number()
select name,seqno,description
from(select name,seqno,description,row_number() over (partition by name order by seqno) id
from table_name) where id<=3;
8.7.4 lag() lead()
8.8其它函数
when <表达式条件值1> then <满足条件时返回值1>
[when <表达式条件值2> then <满足条件时返回值2>
……
[else <不满足上述条件时返回值>]]
end
9多表查询
10子查询