Oracle的基本语法和操作
Posted lianxuan1768
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle的基本语法和操作相关的知识,希望对你有一定的参考价值。
ORACLE中的几大基本操作指令及其含义
数据定义语言(DDL):用于建立、修改、删除数据库的对象(对列操作)
1.CREATE:创建表或其他对象的结构
2.ALTER:修改表或其他对象的结构
3.DROP:删除表或其他对象的结构
4.TRUNCATE:删除表数据,保留表结构
数据操作语言(DML):用于修改表中的数据(对行操作)
1.INSERT:将数据插入到数据表中
2.UPDATE:跟新数据表中已经存在的数据
3.DELETE:删除数据表中的数据
事务控制语言(TCL):用来维护数据一致性的语句
1.COMMIT:提交,确认已经进行的数据改变
2.ROLLBACK:回滚,取消已经进行的数据改变
数据查询语言(DQL):用来查询需要的数据
1.SELECT:查询
数据控制语言(DCL):用于执行权限的授予和收回操作
1.GRANT:用于给用户和角色权限的授予
2.REVOKE:用于用户和角色权限的收回
3.CREATE USER:创建用户
常用的Oracle语句:
创建一张表:
CREATE TABLE employee(
id NUMBER(6),
name VARCHAR2(20),
gender CHAR(1),
salery NUMBER(6,2)
)
查看表结构:
DESC table_name;
修改表名:
RENAME old_name TO new_name;
增加列:
给表(emp)增加一列hiredate,并设置默认值为当前日期
ALTER TABLE emp ADD(
hiredate DATE DEFAULT sysdate );
删除列:
删除表emp的列hiredate
ALTER TABLE emp DROP(hiredate)
修改列:
修改表emp的列job,并增加默认值的设置
ALTER TABLE emp
MODIFY(job VARCHAR2(20) DEFAULT ‘CLERK‘)
插入一条记录:
INSERT INTO emp(id , name , job , salary)
VALUES(200 , ‘jack‘ , ‘SALEMAN‘ ,5500)
更改表中的数据:
更改职员ROSE的薪水为8500
UPDATE emp SET salary = 8500 WHERE name = ‘ROSE‘
删除表中的数据:(如果没有WHERE子句,则全表的数据都会被删除)
删除emp中职位为空的员工的记录
DELETE FROM empWHERE job is null
删除全表记录:
DELETE FROM emp (速度慢,可以回退)
TRUNCATE TABLE emp(速度快,立即执行,不可回退)
字符串函数:
CONCAT(char1 , char 2) 等价于连接操作字符 “||”
SELECT CONCAT(CONCAT(ename , ‘ :‘) , sal)
多个字符串连接,使用||更直观
SELECT ename || ‘ :‘|| sal FROM emp;
LENGTH(char1):返回字符串char1的长度
SELECT ename ,LENGTH(ename) FROM emp
UPPER(char)用于将字符串中每个字符转换为大写形式
LOWER(char)用于将字符串中每个字符转换为大写形式
INITCAP(char)用于将字符串中每个单词的首字母大写,其余字符小写,单词之间需要用空格或非字符分隔开
TRIM(c2 FROM C1)从c1的前后截去c2
LTRIM( c1 ,c2) 从c1的左边截去c2
RTRIM(c1 , c2)从c1的右边截去c2
LPAD、RPAD:补位函数,用于自字符串char1的左边或右边用char2补足到n位,char2可以重复多次
LPAD(char1, n , char2) 左补位函数
RPAD(char1, n , char2) 有补位函数
NVL(expr1 , expr2):如果expr1是NULL,则取expr2
NVL2(expr1 ,expr2,expr3):如果expr1不是NULL,则取expr2,如果expr1是NULL,返回expr3.
运算符:
>,<,>=,<=,!=,<>,= ,AND, OR
[NOT] LIKE:模糊查询
%:表示0到多个字符
-:表示单个字符
[NOT] IN(list)用来取出[不]符合列表范围中的数据
BETWEEN e1 AND e2
用来查询符合e1到e2范围条件的数据,包含e1和e2
IS NULL 和IS NOT NULL:判断字段中的数据是否为NULL
ANY 和 ALL:不能单独使用需要配合单行比较符> 、 >= 、 < 、<= 一起使用
> ANY:大于最小
.......
DISTINCT:过滤掉重复的数据 用法: DISTINCT colum-name
ODER BY : 按一定规则排序 ASC:升序排列,默认 DESC: 降序排列
聚合函数:
MAX() MIN() :用来取得列或表达式的最大值或最小值
AVG() SUM():用来统计列或表达式的平均值和总和
COUNT():用来计算表中的记录条数,忽略NULL值
聚合函数忽略NULL值,所以使用时一般会对空值使用NVL或NVL2进行处理
GROUP BY :分组查询,查询的出来结果是以组进行操作后的数据
HAVING子句:用来对分组后的结果进一步限制,比如按部门分组后,得到每个部门的最高薪水,可以继续限制输出结果
必须跟在GROUP BY后面,不能单独存在
——查询每个部门的最高薪水,只有薪水高于5000的记录才被显示出来——
SELECT deptno , MAX(sal) FROM emp
GROUP BY deptno HAVING MAX(sal) > 5000;
查询语句执行顺序:
1.FROM 子句,执行顺序为从后往前、从右到左
数据量少的表尽量放在后面
2.WHERE子句:执行顺序为自上而下,从右到左
将能过滤掉最大数量记录的条件写在WHERE子句的最右
3.GROUP BY:执行顺序为从左向右分组
最好在GROUP BY之前使用WHERE将不需要的记录在GROUP BY之前过滤掉
4.HAVING子句:消耗资源
尽量避免使用,HAVING会在检索出所有记录之后才对结果进行过滤,需要排序等操作
5.SELECT子句:少使用*号,尽量取字段名称
ORACLE在解析的过程中,通过查询数据字典将*号一次转换为所有的列名,消耗时间和内存
6.ORDER BY :执行顺序为从左到右排序,消耗资源
关联查询:
内连接:返回所有满足连接条件的记录
SELECT e.ename , d.dname
FROM emp e , dept d
WHERE e.deptno = d.deptno;
SELECT e.ename , d.dname
FROM emp e [INNER] JOIN dept d
ON(e.deptno = d.deptno);
左外连接:
emp表所为驱动表,以emp表为准
SELECT e.ename , d.dname
FROM emp e LEFT [OUTER] JOIN dept d
ON e.deptno = d.deptno;
右外连接:
emp表所为驱动表,以emp表为准
SELECT e.ename , d.dname
FROM emp e RIGHT [OUTER] JOIN dept d
ON e.deptno = d.deptno;
全外连接:左外连接和有外连接的查询结果的总和
SELECT e.ename , d.dname
FROM emp e FULL OUTER JOINdept d
ON e.deptno = d.deptno;
自连接:一种特殊的连接查询,数据来源是一张表,即关联关系来自于单表的多个列
以上是关于Oracle的基本语法和操作的主要内容,如果未能解决你的问题,请参考以下文章