Oracle--01

1.数据管理的发展史

手工管理阶段:一个应用程序对应一组数据,也就是说把数据在程序中固定好

文件管理阶段:一个应用程序对应一组或一个文件,文件中保存的数据。

数据管理阶段:就是通过专门的数据管理软件进行数据的管理。

2.关系型数据库就是说由行和列组成的表格。

3.数据库相关的概念

数据:指的就是交流过程中产生的信息

数据库:指的是存储数据的仓库

数据库管理系统(DBMS):一套能够管理数据的软件

4.oracle数据库简介

5.oracle数据库安装

见安装文档

sys 超级管理员

scott 示例用户

6.使用客户端登录Oralce数据库

在DOS命令下登录Oralce数据库的语法:

sqlplus 用户名/密码

注意:如果是超级管理员需要加上as sysdba

在win系统中DOS命令行一定是以管理员身份打开

sqlplus scott/oracle

sqlplus sys/oracle as sysdba

还可以使用Oracle自带的客户端来登录

作业:

1.安装oracle数据库

2.测试登录是否成功

3.写一个java程序验证用户输入的用户名是否合法,合法的条件:用户名只能以字母开头,必须有字母和数字组成,不能有特殊字符,而且长度一定是6-18位,

如果不符合条件,则提示相关的信息,并让用户重新输入。

Oracle--02

1.基础查询之基本语法:

SELECT *[|列名[[AS]别名],列名2...] FROM表名[[AS]别名];

select * from emp;

2.使用||做连接:

Oracle中的字符串用单引号。

例:SELECT '姓名:'||ename||'月薪'||sal FROM emp;

3. 使用DISTINCT可以消除重复内容

在查询单列时才更有效。

select ename,job from emp;

select distinct job from emp;

4.WHERE子句:

使用WHERE指定的条件对数据进行筛选,返回符合条件的记录(行)。

SELECT *[|列名[[AS]别名],列名2...]

FROM 表名[[AS]别名]

WHERE 条件;

1) WHERE 子句可以包括运算符,使用(),常量,列,函数,SQL操作符。

5. 运算符:

1) 算术:+ - * /

2) 比较:> >= ),

ANY(值1,值2...) ALL(值1,值2...)不能单独使用,要配合>,>=,

3) 逻辑:AND OR NOT

6. SQL操作符:

1) IN(值1,值2...)

select * from emp where job in('CLERK','MANAGER');

2) LIKE '模式字符串':_代表任意一个字符,%代表0到n个字符

select * from emp where job like('%M%');

3) BETWEEN 数值1 AND数值2:不仅可用于数值,还可以用于日期时间

select * from emp where sal between 1000 and 3000;

4) IS NULL,IS NOT NULL:匹配空值,非空值。对于空值一定不能用=或!=

select * from emp where comm is not null;

5) IS NAN:非数字。IS NOT NAN:数字。Oralce特有

select * from emp where sal is not nan;

select * from emp where comm is not nan;

7. Oracle特有的伪列:

1) ROWID: Oracle内部对每个表的每一行都有一个唯一的标识。物理存储所有地址

select rowid from emp;

★2) ROWNUM: Oracle对每次查询结果集的每一行记录都有一个行号。

select rownum from emp;

select * from emp where rownum<5;

对结果集的数据进行标识。不能对ROWNUM直接使用>,>=,!=,between..and

怎么来获取第5条到第10条的记录呢?子查询,连接查询

8.对结果进行排序:

ORDER BY 排序列名[别名] [ASC|DESC],排序列名[别名] [ASC|DESC]...

select * from emp order by hiredate asc;

select * from emp order by hiredate;

select * from emp order by hiredate desc;

9.SQL函数:数据库管理系统(DBMS)提供的一些功能封装。

不同的数据库产品所提供的函数不尽相同。

1) 单行函数:同时只能对一行进行操作,且对于每一行返回一个值。

聚合函数:同时对多行进行操作,这多行只返回一个值。

2) 单行函数:

a) 字符串:lower(char),upper(char),length(char),initcap(x)

select lower('HELLO') from dual;

b) 数字:round(number,n)

select round(23.435,2) from dual;

c) 日期时间:sysdate返回数据库所在操作系统的当前日期时间。

select sysdate from dual;

systimestamp 返回数据库所在操作系统的当前时间戳。

select systimestamp from dual;

last_day(d) 返回指定日期当月的最后一天的日期时间

select last_day(sysdate) from dual;

trunc(d[,unit]) 截断日期时间,unit: 'year', 'month', 'day'

select trunc(sysdate,'year') from dual;

select trunc(sysdate,'month') from dual;

select trunc(sysdate,'day') from dual;

截断日期时间:当年,月,日的第一天

d) dual表是Oracle提供给任何用户的一个表,常用在没有目标表的SELECT语句中。

Oracle--03

1.高级查询之聚合函数:

对多行(组)进行操作,多行返回一个结果。分组函数。

2. 常用的:

1) count(x) 建议使用count(rowid)效率更高

2) sum(x)

3) avg(x)

4) max(x)

5) min(x)

3. 分组统计:

SELECT * FROM 表名

WHERE 过滤条件

GROUP BY 分组条件

ORDER BY 列名,..;

1) SELECT的列没有出现在聚合函数中,就必须出现在GROUP BY子句中。

2) 聚合函数不能出现在WHERE子句中。

4. 分组过滤:

SELECT * FROM tablename

WHERE condition --过滤条件

GROUP BY condition --分组条件

HAVING codition -- 组过滤条件

ORDER BY colName; -- 排序条件

5.多表查询:

使用单个SELECT语句从多个表中取出相关的数据。(外键引用关系)

1) 内连接:列出所有连接表中与连接条件相匹配的数据行。(等值连接,非等值连接)

SELECT ... FROM 主表名 别名

[INNER] JOIN 从表名 别名ON连接条件

WHERE 条件...;

[SELECT ... FROM 表名1,表名2 WHERE连接条件and过滤条件]

特点:只查询出多个表中符合连接条件的数据。

2) 外连接:

a) 左外连接:不仅列出所有连接表中与连接条件相匹配的数据行,还列出左表中符合WHERE过滤条件的数据行。

SELECT ... FROM 主表名 别名

LEFT [OUTER] JOIN 从表名 别名

ON 连接条件

WHERE 条件...;

特点:

会把主表中所有的数据都查询出来,从表中只查询符合连接条件的数据。

b) 右外连接:RIGHT JOIN ... ON ...

特点:

会把从表中所有的数据都查询出来,主表中只查询符合连接条件的数据。

c) 全外连接:FULL JOIN ... ON ...

特点:

会把两个表中所有的数据都查询出来。

3) 交叉连接:产生笛卡尔积。

SELECT ... FROM 主表CROSS JOIN从表;

[SELECT ... FROM 表名1,表名2]

特点:

多个表中记录数相乘即为最后查询的结果。

4) 自连接:参与连接的表都是同一张表。(通过给表取别名虚拟出)

Oracle--04

1.多表查询92标准

内连接

SELECT [DISTINCT] *|[列名 别名,…]

FROM 主表名 别名,从表名 别名

WHERE 主表名.列名=从表名.列名AND WHERE过滤条件;

左连接

SELECT [DISTINCT] *|[列名 别名,…]

FROM 主表名 别名,从表名 别名

WHERE 主表名.列名=从表名.列名(+) AND WHERE过滤条件;

右连接

SELECT [DISTINCT] *|[列名 别名,…]

FROM 主表名 别名,从表名 别名

WHERE 主表名.列名(+)=从表名.列名AND WHERE过滤条件;

交叉连接(产生笛卡积)

SELECT * FROM 主表,从表;

2.子查询:

把SELECT的结果当作另一个查询语句的一部分。

1) 子查询可以出现在主查询语句的任意位置。

2) 子查询效率比表连接查询低。

3) 表连接查询语句都可以替换成子查询语句,但反之不成立。

4) 单行单列子查询中可以使用的比较操作符:= !=  >=

多行单列子查询中可以使用的比较操作符:IN, ANY,ALL

多行多列子查询中可以当作一张表来使用。

3. 集合操作符

1) UNION : 并集,两个结果集合并,没有重复行

2) UNION ALL : 合集,两个结果集合并,包含重复行

3) INTERSECT : 交集,返回两个查询结果集中共有的行

4) MINUS : 差集,返回第一个结果集中减去第二个结果集中相同的行之后的结果。

4. ROWNUM实现分页查询:在有结果集后的行号。

1) 不能直接作为:> >= != between ..and..的条件

2) 不能以基表名或别名作为前缀引用。

3) 示例:

SELECT t.* FROM (SELECT ROWNUM r,e.* FROM emp e WHERE ROWNUM<=10) t WHERE t.r >=6;

1.DML包括INSERT INTO, UPDATE, DELTE

1) 新增:

INSERT INTO 表名[(列名[别名],列名2...)] VALUES(值1,值2...);

如果是字符串值一定要加单引号;如果是日期值,一定要用日期类型,可以使用to_date()函数进行转换;如果是空值使用null;

2) 更新:

UPDATE 表名SET列名=新值,列名2=新值2... [WHERE条件];

3) 删除:一行一行的删除。

DELETE FROM 表名[WHERE条件];

TRUNCATE TABLE 表名; --截断表,清空表中的数据,同时重置表空间

2.TCL:事务的ACID属性

1) SHOW AUTOCOMMIT; -- 查看Oracle数据库是否自动提交事务,默认不自动提交事务

SET AUTOCOMMIT ON|OFF;

2) 显示事务控制:

a) COMMIT; -- 提交事务

b) ROLLBACK [TO 回滚点]; --回滚事务

c) SAVE POINT 名;

3) 隐式事务控制:

a) 自动提交事务:DDL、DCL、SQL*Plus正常退出,JDBC正常关闭数据库连接

b) 自动回滚事务: SQL*Plus异常退出,连接异常中断

3.事务隔离级别:

多个事务同时操作同一数据行时,它们之间的隔离程度。

1) 并发数据库事务可能引起的问题:

a) 第一类丢失更新

b) 脏读:一个事务读到了另一个事务未提交的数据。

c) 不可重复读:一个事务两次读取同一行数据,两次的状态不同。

d) 第二类丢失更新

e) 幻读:一个事务中同一个SQL语句前后两次执行的结果不同。

2) SQL标准中有四种隔离级别:在隔离程度和并发性能两方面权衡考虑

READ UNCOMMITED: 读未提交 。可以避免第一类丢失更新。

READ COMMITED: 读已提交。可以避免第一类丢失更新和脏读。(Oracle,SQL Server默认)

REPEATABLE READ: 可重复读。可以避免第一类丢失更新,脏读,不可重复读,第二类丢失更新。(MySQL默认)

SERIALIZABLE: 串行化。可以避免所有的并发问题。 在执行财务数据更新时采用。

4 Oracle中的事务隔离级别管理:

只支持READ COMMITED和SERIALIZABLE。

set transactionisolation level SERIALIZABLE; -- 更改全局的事务隔离级别

alter session set isolation_level=SERIALIZABLE; --更改当前会话的事务隔离级别

Oracle--05

DCL语句

1.用户(user)管理。

以下操作者必须有相应的权限,本课程以sys登录。

1) 创建用户:CREATE USER用户名IDENTIFIED BY密码;

创建一个用户,默认也创建了一个缺省Schema(方案(数据库对象的集合)名与用户名相同)。

用户可以直接访问缺省方案中的对象。

用户要访问其它方案中的对象,必须有访问权限,且要使用“方案名.对象名”的形式。

2) 修改密码:ALTER USER用户名IDENTIFIED BY新密码;

锁定或解锁用户:ALTER USER用户名ACCOUNT [UN]LOCK;

3) 删除用户:DROP USER用户名;

2. 权限(privilege)管理。

1) 系统权限:DCL、DDL

授权:GRANT权限名,.. TO用户名;

回收:REVOKE权限名,.. FROM用户名;

2) 对象权限:对数据库对象的操作权力

授权:GRANT权限名,.. ON方案名.对象名TO用户名;

回收:REVOKE权限名,.. ON方案名.对象名FROM用户名;

3.角色(role)管理:一组权限的集合。

常用角色:CONNECT,RESOURCE

1) 授权:GRANT角色名,... TO用户名;

回收:REVOKE角色名,... FROM用户名;

4.使用Oracle 10g以上版本

提供的web方式的企业管理器(em)进行管理。

5. create user website identified by website;

grant connect,resource to website;

Oracle--06

DDL语句:数据库对象,表、约束、序列、视图、索引

1. 表管理

CREATE TABLE 表名(

列名 类型 [default默认值] [列约束],

列名 类型 [default默认值] [列约束],

[表级约束]

);

ALTER TABLE 表名ADD(列名 列类型[default默认值]);

ALTER TABLE 表名MODIFY(列名 列类型[default默认值]);

ALTER TABLE 表名DROP COLUMN列名;

DROP TABLE 表名;

TRUNCATE TABLE 表名;

2. 约束管理

a) NOT NULL 非空。列约束

b) UNIQUE 唯一。列约束,表级约束

C) CHECK() 检查。列约束,表级约束

d) PRIMARY KEY 主键。列约束,表级约束

e) FOREIGN KEY 外键。列约束,表级约束。表示表之间的关联关系

ALTER TABLE 表名ADD [CONSTRAINT约束名]约束类型(列名);

ALTER TABLE 表名ADD [CONSTRAINT约束名] FOREIGN KEY(列名) REFERENCES主表名(列名);

ALTER TABLE 表名DROP CONSTRAINT约束名;

3.序列管理:

序列是Oracle中特有的数据库对象,专门用来产生递增的数字。

CREATE SEQUENCE 序列名;

DROP SEUQENCE 序列名;

伪列:NEXTVAL(取下一个序列值), CURRVAL(查看当前的序列值)

insert into 表名(id) values(序列名.nextval);

4.索引管理:

用来提高查询效率的一个数据库对象

CREATE INDEX 索引名ON表名(列名); -- b树索引

DROP INDEX 索引名;

Oracle数据库会为表中指定为primary key或unique约束的列自动创建索引。

5、视图管理:虚拟表。

它的数据来源于其它真实表。为查询方便。更新视图的数据也会更新源表的数据。

CREATE OR REPLACE VIEW 视图名AS select查询语句WITH READY ONLY;

DROP VIEW 视图;

Oracle--07

1. E-R图:实体关系图

2. 映射基数:一对一(OneToOne),一对多(OneToMany),多对一(ManyToOne),多对多(ManyToMany)

3. powerdisgner 创建cdm --转成-->pdm

4. 数据库设计范式

1NF:确保每列的原子性。

2NF:确保每列都和主键相关。

3NF:确保每列都和主键列直接相关。

oracle的groupby聚合函数效率,Oracle内容概述相关推荐

  1. oracle聚合函数wmsys,oracle 自定义聚合函数

    oracle提供了聚合函数的API可以让我们方便的自己定义聚合函数. 详细看oracle官方文档: http://docs.oracle.com/cd/B14117_01/appdev.101/b10 ...

  2. oracle中如何写函数【oracle技术】

    oracle中如何写函数[oracle技术] | 浏览:1377 | 更新:2014-04-29 23:14 | 标签:oracle 在oracle数据开发中函数是必不可少的.函数可以一般是可以完成某 ...

  3. oracle 聚合函数 日期,Oracle日期函数/字符函数/数字函数/转换函数/聚合函数

    Oracle日期函数: MONTHS_BETWEEN:返回两个日期之间月份的差值 MONTHS_BETWEEN('01-EP-95','11-JAN-94') ===>19.6774194 AD ...

  4. oracle 聚合函数 条件,Oracle PLSQL之HAVING后面的条件可由聚合函数构成,也可由GROUP BY后的字段构成...

    HAVING主要用于对分组后的数据进行过滤, 一般我们在其后接聚合函数(SUM,COUNT等), 除此之外我们还可以用GROUP BY后面的字段组成HAVING后的过滤条件. SQL> sele ...

  5. python dataframe group by_Python DataFrame.groupby()聚合函数,分组级运算

    pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个键(可以是函数.数组或DataFrame列名)拆分pandas对象.计算分 ...

  6. oracle怎么声明nvl函数,[转载]Oracle中的NVL函数

    Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...

  7. oracle中的存在函数吗,Oracle判断表是否存在的函数

    Oracle判断表是否存在的函数 函数定义: CREATE OR REPLACE FUNCTION is_table_exists( table_name_to_check VARCHAR2) RET ...

  8. oracle sql常用的函数,界别Oracle和SQL Server常用函数

    区分Oracle和SQL Server常用函数 一.数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) ...

  9. oracle判断空值的函数nvl2,Oracle nvl、nvl2、nullif、decode、case函数详解

    1.NVL函数 nvl(expr1,expr2),如果expr1为空,则返回expr2: 2.NVL2函数 nvl2(expr1,expr2,expr3),如果expr1为空,则返回expr3,否则返 ...

最新文章

  1. 独家 | 避免神经网络过拟合的5种技术(附链接)
  2. PKI/CA (3)CA功能细分
  3. 多文件编程 【多文件编程】(26)
  4. 075-SSH遇到不能登陆的情况
  5. html设置列表菜单,css 列表菜单的设计
  6. Linux vim使用心得--一些高级话题
  7. 集算器访问HTTP数据的代码示例
  8. c++11中的for简化用法
  9. ANSI,Unicode,UTF-8网页编码的区别【转】
  10. Ps 初学者教程,如何在图片中创建新背景?
  11. 【Henu ACM Round#18 F】Arthur and Walls
  12. 一个例子搞懂Nacos服务发现
  13. ubuntu18.04安装网卡驱动
  14. 液晶拼接大屏的日常维护与保养
  15. matlab取包络取得过细怎么解决,matlab如何求包络线
  16. dbeaver sql字体异常
  17. idhttp的socket error # 10054 错误的处理办法
  18. BAT春晚发红包,A、T宕机3年,为啥2019年百度挺住了?
  19. 数仓经典案例-各个视频平均完播率、平均播放进度
  20. Spring、Mybatis笔记

热门文章

  1. System.Runtime.InteropServices.COMException (0x8004E00F): COM+ 无法与 Microsoft 分布式事务协调程序交谈 (异常来自 HRESU
  2. 腾讯会议可以录屏吗?学习两个录制会议的好方法
  3. Realsense D435保存图像
  4. 解决ps打开图片错误:无法完成请求,找不到不知名或无效的JPEG标志符类型
  5. SPSS正版中文版 | SPSS软件下载安装| SPSS软件功能使用
  6. 华为笔记本matebook13_入手华为matebook13锐龙版笔记本一周使用感受
  7. Numpy学习之——np.zeros_like()函数
  8. HAL库之485+DMA通信(STM32F746)
  9. 关于时间格式的long与String的转化
  10. dp主机_HDMI和DP是什么?一文看懂两种接口的区别