Oracle学习
一、数据库的历史
1.1 数据库的发展
人工管理阶段---------->文件系统阶段------------------>数据库系统阶段
数据库的核心:数据模型
数据库系统阶段发展:
一代数据库:层级网状数据库管理系统
二代数据库:关系数据库管理系统(RDBMS)
三代数据库:有待发展
1.2 数据库特点
1) 数据共享
2) 减少数据冗余度
3) 数据独立
4) 数据集中控制
5) 数据一致性和可维护性,确保数据安全可靠
- 安全性控制:防止数据丢失、错误更新和越权使用
- 完整性控制:确保数据正确性、有效性和相容性
- 并发控制:同一时间周期内,允许数据实现多路存取,防止用户间不正常交互
- 故障的发现和恢复
6) 故障恢复
1.3 数据库对象
- 用户(user)
- 表(table)
- 视图(view)
- 索引(index)
- 触发器(trigger)
- 存储过程(procedure)
- 同义词(synonym)
- 序列(sequence)
1.4 SQL(Structured Query Language)
-
SQL(Structured Query Language),结构化查询语言,是专门操作关系型数据库的一种语言
-
SQL语言属于第四代编程语言
3) SQL语句的分类:
- DQL(数据查询语言),检索数据库数据,主要语句:SELETE
- DML(数据操作语言),改变数据库数据,主要语句:INSERT,UPDATE,DELETE
- DDL(数据定义语言),建立、修改、删除数据库对象,主要语句:CREATE,ALTER,DROP,TRUNCATE
- TCL(事务控制语言),维护数据一致性,主要语句:COMMIT,ROLLBACK,SAVEPOINT
- DCL(数据控制语言),权限授予和权限收回,主要语句:GRANT,REVOKE
- sql、sqlplus、pl/sql的区别:
- sql,结构化的查询语句,操作关系型数据库的语言
- sqlplus,oracle数据库软件自带工具,可以接收用户输入的sql语句,然后将sql执行结果显示出来
- pl/sql,程序化的sql语句,在sql语句的基础上加入一定的逻辑操作,如 if for 等
二、对Oracle的操作
1.数据查询select
1.1 对所有列进行查询
如:SELECT * FROM departments;
1.2 对特定列进行查询
如:SELECT dept_id FROM employees;
tip:
- SQL语言大小写不敏感
- SQL可以写一行或多行
- 关键字不能缩写和分行
- 子句一般分行和缩进,提高语句可读性
1.3 查询中加入算术运算符(+ - * /)
可对数字和日期使用
提出需求:这个月比上个月多发300工资
SELECT last_name,salary+300
FROM employees;
操作符优先级和数学运算符一致
提出需求:年薪多发10000工资
SELECT last_name,salary*12+300
FROM employees;
提出需求:每月补贴1000,计算一年薪资
SELECT last_name,(salary+1000)*12
FROM employees;
1.4 对表格中空值的理解
- 空值是无效的,未指定的,未知的或不可预知的值
- 空值不是空格或者0
- 包含空值的数学表达式的值都为空值
如查询提成,没有提出为控制:
SELECT last_name,12*salary*commission_pct
FROM employees;
1.5 对别名的使用(关键字 AS)
关键字as可写可不写,如:
SELECT last_name AS name,commission_pct comm
FROM employees;
(其中name和comm为别名)
tip:当别名是多个单词组成或指定了大小写时,应用双引号括起来(只有在此处出现双引号)
SELECT last_name AS “Name”,commission_pct “comm pct”
FROM employees;
1.6 连接符的使用(||)
用于列的合并,把两列的字符连接在一起。如:
SELECT last_name||first_name FROM employees;
select last_name||’`s job_id is’||job_id details
from employees;
1.7 字符串的使用
-
字符串可以是列表中的字符、数字、日期
-
日期和字符只能在单引号中出现
-
每返回一行时,字符串被输出一次
如:
SELECT last_name || ’ is a '||job_id
AS “Employee Details”
FROM employees;
1.8 行重复问题(distinct)
引子:
SELECT department_id FROM employees;
多个员工同属一个部门,出现重复行
去重复行使用关键字distinct,如:
SELECT DISTINCT department_id
FROM employees;
错误例子:
SELECT last_name,D