Oracle笔记--Sql语句
1、SQL的三种类型语句:
--1)DML(Data Manipulation Language)数据操纵语言
--2)DDL(Data Definition Language):数据定义语言
--3)DCL(Data Control Language):数据控制语言
2、DML相关语句:
--INSERT:增
--UPDATE:删
--DELETE:改
--SELECT:查
3、DDL相关语句:
--Create Table:创建表
--Alter Table:修改表
--Drop Table:删除表
--Create Index:创建索引
--Drop Index:删除索引
4、DCL相关语句:
--Grant:授权
--Revoke:收权
--Commit:提交事务处理
--RollBack:事务处理回滚
--SavePoint: 设置保存点
--Lock:对数据库特定部分进行锁定。
5、SQL语句与SQL*Plus命令:
--SQL是一种语言, SQL*Plus是一种环境;
--SQL是ANSI标准,SQL*Plus是Oracle的特性之一;
--SQL关键字不能缩写,SQL*Plus可以缩写;
--SQL使用语句控制数据库中的表的定义信息和表中的数据,SQL*Plus命令不能改变数据库中的数据的值;
6、转义字符的使用举例:select * from employees where last_name like '%\_%' escape '\'
7、常用单行函数:
--字符函数:1)lower('str'):将字符串全部转换为小写
2)upper('STR'):将字符串全部转化为大写
3)initcap('str'):将字符串中的每个单词首字母转换为大写
4)concat('str1', 'str2'):连接字符串
5)substr('str', 1, 2):获取字符串指定位置后指定长度的子串
6)length('str'):获取字符串长度
7)instr('str', 's'):获取's'在'str'中首次出现的位置,若不存在则为0
8)lpad(xx, len, '*'):向左填充'*'至指定长度(rpad一样)
9)trim('a' from 'abcdefg'):去除字符串首尾字符'a'
10)replace('aabbccdd', 'c', 'e'):将字符串中的'c'替换为'e'
--数字函数:1)round(123.456, 2):四舍五入(保留两位小数)
2)trunc(123.456, 2):截断(小数点保留两位)
3)mod(1600, 300):取余
--日期函数:1)months_between(sysdate, nowdate):获取两个日期之间相差几个月
2)add_months(sysdate, 3):向指定日期中加上若干个月
3)next_day(sysdate, '星期四'):指定日期的下一个星期对于的日期
4)last_day(sysdate):本月的最后一天
5)round(sysdate, 'month'):日期按照月份四舍五入
6)trunc(sysdate, 'hh'):日期按照小时截断
--转换函数:1)隐式转换(vaerchar2 or char -> number、varchar2 or char -> date、number -> varchar2、date -> varchaar2)
2)to_date('2015-11-4', 'yyyy-mm-dd'):将字符串类型按指定格式转换为date类型
3)to_number():
4)to_char(sysdate, 'yyyy-mm-dd'):将date类型按指定格式转换为字符串类型
5)to_char(12345678, '$999,999,99'):将number类型按指定格式转换为字符串类型('L', '$', '9', '0', '.', ',')
--通用函数:1)nvl(expr1, expr2):将空值转换成一个已知的值
2)nvl2(expr1, expr2, expr3):expr1不为NULL时返回expr2,为空时返回expr3
3)nullif(expr1, expr2):expr1与expr2相等时返回NULL,不等时返回expr1
4)coalesce(expr1, expr2, ...., exprn):若前一个表达式为空,则返回下一个表达式。
8、条件表达式:
--在SQL语句中使用IF-THEN-ELSE逻辑
--两种方法:1)CASE表达式;2)DECODE函数。
9、内连接:
--1)
select employee_id, d.department_id, department_name from employees e, departments d where e.department_id = d.department_id;
--2)
select employee_id, d.department_id, department_name from employees e join departments d on e.department_id = d.department_id;
10、左外连接:查询满足条件的记录和不满足条件的左表的记录
--1)
select employee_id, d.department_id, department_name from employees e, departments d where e.department_id = d.department_id(+);
--2)
select employee_id, d.department_id, department_name from employees e left outer join departments d on e.department_id = d.department_id;
11、右外连接:查询满足条件的记录和不满足条件的右表的记录
--1)
select employee_id, d.department_id, department_name from employees e, departments d where e.department_id(+) = d.department_id;
--2)
select employee_id, d.department_id, department_name from employees e right outer join departments d on e.department_id = d.department_id;
12、满外连接:查询满足条件的记录和不满足条件的左、右表的记录
select employee_id, d.department_id, department_name from employees e full outer join departments d on e.department_id = d.department_id;
13、分组函数:
--组函数:1)avg(expr):求expr这一列平均值
2)count(expr):统计expr这一列不为空的记录数
3)max(expr):求expr这一列的最大值
4)min(expr):求expr这一列的最小值
5)stddev(expr):求expr这一列的样本偏差
6)sum(expr):求expr这一列的样本总和
--不能在where条件中使用组函数,必须使用having.
14、常见的数据库对象:
--1)表:基本的数据存储集合,由行和列组成
--2)视图:从表中抽出的逻辑上相关的数据集合
--3)序列:提供有规律的数值
--4)索引:提高查询的效率
--5)同义词:给对象起名
15、建表的两种方式:
--1)
CREATE TABLE emp1( id number(12), name varchar2(12) )
--2)从已存在的表中选取属性创建新表并获取相应的数据
CREATE TABLE emp2 AS SELECT id, name FROM emp1
16、数据库事务:一组逻辑操作单元使数据从一种状态变换到另一种状态
--数据库事务由一个或多个DML语句、一个DDL语句、一个DCL语句组成;
--事务以第一个DML语句的执行作为开始、以下面的其中之一作为结束:
--1)COMMIT或ROLLBACK语句;
--2)DDL语句;
--3)用户会话正常结束;
--4)系统异常终止。
17、提交或回滚前的数据状态:
--其他用户不能看到当前用户所做的改变,知直到当前用户结束事务;
--DML语句所涉及到的行被锁定,其他用户不能操作。
18、提交后的数据状态:
--数据的改变已经被保存到数据库中;
--改变前的数据已经丢失;
--所有用户可以看到结果;
--锁被释放,其他用户可以操作涉及到的数据;
--所有保存点被释放。
19、视图:从表中抽出的逻辑上相关的数据集合
--视图是一种虚表;
--视图建立在已有表的基础上,视图赖以建立的这些表称为基表;
--向视图提供数据内容的语句为SELECT语句,可以将视图理解为存储起来的SELECT语句;
--视图是向用户提供基表数据的另一种表现形式;
--优点:1)控制数据访问;2)简化查询;3)避免重复访问相同的数据。
20、Top-N分析:分析查询一个列中最大或最小的n个值。(使用ROWNUM)
--对ROWNUM只能使用<或<=,而用=、>、>=都不会返回任何数据。
21、序列:可供多个用户用来产生唯一数值的数据库对象
--自动提供唯一的数值
--共享对象
--主要用于提供主键值
--将序列值装入内存可以提高访问效率
create sequence seq increment by 10 --每次增长10 start with 10 --从10开始 maxvalue 100 --最大值为100 cycle --需要循环 nocache --不需要缓存登录
select seq.nextval from dual;
select seq.currval from dual;
22、索引:一种独立于表的模式对象,可以存储在与表不同的磁盘或表空间中
--索引被删除或损坏不会对表产生影响,只是影响查询的速度
--通过指针加速Oracle服务器的查询速度
--创建索引
create index idx on table_name(column1, column2, ..., columnn);
--以下情况可以创建索引:1)列中数据值分布范围广;2)列经常在where字句或连接条件中出现;3)表经常被访问而且数据量很大,访问的数据大概占数据总量的2%到4%。
23、同义词(synonym):
--方便访问其他用户的对象;
--缩短对象名字的长度。
--创建同义词
create synonym new_name for table_name