oracle基础知识

Posted xiren88

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle基础知识相关的知识,希望对你有一定的参考价值。

1.安装oracle教程 

    Oracle 11g服务器安装详细步骤——图文教程 : https://jingyan.baidu.com/article/363872eccfb9266e4aa16f5d.html?qq-pf-to=pcqq.group

2.SQL语言的组成
  DDL(数据定义语言):维护(定义、修改、删除)SQL模式对象.
  DML (数据操纵语言) :包括数据查询和数据更新(增、删、改,查).
  DCL (数据控制语言) :对数据的访问控制(授予权限、取消权限).
  TCL (事务控制语言) :对事务的控制(提交、回滚、保存点)

  注意:Truncate Table和Delete的区别

    1、截断表是将表中所有记录删除,但保留表结构,并且不写日志
    2、trancate table 是DDL语言 清空表不可回滚,delete from  table_name 是DML语言可带条件 可回滚

 

3.数据类型 包括字符、数值、日期时间、RAW 和 LOB 等

  注意:varchar和varchar2 区别 varchar2 一般是2个字节 更加适合扩展,varchar 是中文2个字节,英文数字1个字节

  Oracle 中伪列就像一个表列,但是它并没有存储在表中
    伪列可以从表中查询,但不能插入、更新和删除它们的值
      常用的伪列有ROWID (表中行的存储地址,该地址可以唯一地标识数据库中的一行,可以使用 ROWID 伪列快速地定位表中的一行)

    和ROWNUM(是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数)用于分页 oracle中无 limit关键字

4.数据完整性:

  实体完整性   约束方法:唯一约束、主键约束

  域完整性  约束方法:限制数据类型、检查约束、默认值、非空约束

  引用完整性  约束方法:外键约束

  自定义完整性  约束方法:规则、存储过程

--scott解锁
alter user scott account unlock;
alter user scott identified by 123456;
--获取当前系统日期
select sysdate from dual;
select systimestamp from dual; 
--查询所有数据
select * from emp;
--查询伪列
select rowid,emp.* from emp
select rownum,emp.* from emp
--创建表
create table java10182(
       jid int primary key,--主键约束
       jname varchar2(10) not null,--非空约束
       jsex char(5) check(jsex in(‘男‘,‘女‘)),--检查约束
       jaddress varchar2(30) default ‘山东淄博‘,--缺省(默认值)约束
       jbirth date
       
)
create table grade2(
      gid number primary key,
      jid int,
      math number,
      foreign key(jid) references java10182(jid)--外键约束
)
--新增数据
insert into java10182 values(1,‘小红‘,‘男‘,‘山东济南‘,to_date(‘1989-02-28‘,‘yyyy-mm-dd‘));
insert into java10182 (jid,jname,jsex)values(4,‘小绿‘,‘女‘);
select *from java10182;
update java10182 set jname=‘xiao‘where jid=3;
--添加约束
ALTER TABLE  java10182  Add  constraint  uk_jname Unique(jname);
--复制表结构
create table emp0201 as select *from emp where 1=2;
select *from emp0201;
select *from emp0202;
--插入来自其他表中数据
insert into emp0201 select *from emp where deptno=20;
--复制表的部分数据
create table emp0301 as select empno,ename,job,sal,comm from emp order by sal;
select *from emp0301;
--用系统管理员身份创建用户
create user xiaolv identified by 123456;--创建用户名
--赋予用户连接数据库权限
grant connect,resource to xiaolv;
select *from scott.java1018;
--赋予权限
GRANT SELECT ON  scott.java1018
     TO xiaolv   WITH  GRANT  OPTION;
--取消权限
REVOKE  SELECT ON  scott.java1018
     FROM xiaolv;
--内连接查询
select *from dept;
select *from emp;
select *from dept join emp on emp.deptno=dept.deptno;
select *from dept , emp where emp.deptno=dept.deptno;
--给表起别名
select *from dept d , emp e where d.deptno=e.deptno;
--左外连接
select *from dept d left join  emp e on d.deptno=e.deptno;
--右外连接
select *from  emp e right join dept d  on d.deptno=e.deptno;
--全外连接
select *from  emp e full join dept d  on d.deptno=e.deptno;

 5.基本SQL查询 和MySQL差不多

  注意:利用现有的表创建表
语法:
          CREATE  TABLE <new_table_name> 
          AS
          SELECT column_names  FROM  <old_table_name>;

--复制表结构
create table emp0201 as select *from emp where 1=2;
select *from emp0201;
select *from emp0202;

mysql中可用 create table 表名1 like 表名2
--插入来自其他表中数据
insert into emp0201 select *from emp where deptno=20;
--复制表的部分数据
create table emp0301 as select empno,ename,job,sal,comm from emp order by sal;
select *from emp0301;

 

 6.操作符及SQL函数

SQL 支持的操作符包括算术、比较、逻辑、集合和连接操作符
SQL 函数可大致分为:
单行函数:日期、字符、数字、转换、其他
聚合函数
分析函数

算术操作符包括加(+)、减(-)、乘(*)、除(/)

比较操作符包括 =、!=、<、>、<=、>=、BETWEEN…AND、IN、LIKE 和 IS NULL等

逻辑操作符包括与(AND)、或(OR)和非(NOT),NOT通常和AND,OR联合使用

集合操作符将两个查询的结果组合成一个结果
union操作符返回两个查询的不重复的所有行。
intersect 操作符只返回两个查询的公共行。
minus 操作符返回从第一个查询结果中排除第二个查询中出现的行。

连接操作符用于将多个字符串或数据值合并成一个字符串||

SQL 操作符的优先级从高到低的顺序是:
算术操作符           --------最高优先级
连接操作符
比较操作符
NOT 逻辑操作符
AND 逻辑操作符
OR   逻辑操作符   --------最低优先级

SQL 函数(具体看下编代码)

SQL 函数可大致分为:
单行函数:日期、字符、数字、转换、其他
聚合函数
分析函数

--查询james的部门名称
select *from emp;
select *from dept
select dname from emp join dept on dept.deptno=emp.deptno where ename=‘JAMES‘;
select dname from dept where deptno in( select  deptno from emp where ename=‘JAMES‘);
--查询Smith的经理
select ename from emp where empno in( select  mgr from emp where ename=‘SMITH‘);
--查询emp表中平均工资
select deptno,avg(sal)as s from emp group by deptno
select max(s) from (select deptno,avg(sal)as s from emp group by deptno)
select deptno from (select deptno,avg(sal)as s from emp group by deptno) where s in(select max(s) from (select deptno,avg(sal)as s from emp group by deptno))
--分页
select rownum,emp.* from emp where rownum>=1 and rownum<=4;
select rownum,emp.* from emp where rownum>=5 and rownum<=8;
select *from(select rownum as s,emp.* from emp)where s>=1 and s<=4;
select *from(select rownum as s,emp.* from emp)where s>=5 and s<=8;
--当前页 r=(n-1)*条数+1 n*tiaoshu
--查询每个人的工资 (sal+2000)
select ename, sal+2000 as s from emp;
--连接操作符
select ‘姓名为‘||ename||‘工作为‘||job||‘的人的工资为‘||sal as Str from emp
--字符函数
--首字母大写
select initcap(‘nihao‘)from dual
--转小写
select empno,lower(ename),lower(job) from emp
--转大写
select upper(‘nihao‘)from dual
--ltrim 去掉左边开头有xyz组合的
select Ltrim(‘xadyminyxz‘,‘xyz‘) from dual
--lrtrim 去掉右边开头有xyz组合的
select rtrim(‘xadyminyxz‘,‘xyz‘) from dual
--逐值替换
select ename,decode(deptno,‘20‘,‘开发部‘,‘30‘,‘产品部‘,‘10‘,‘运维部‘)as deptno from emp
--截取当前系统日期的年份
select extract(year from sysdate) from dual;
select extract(month from sysdate) from dual;
select extract(day from sysdate) from dual;
--获取emp中每个人的工作年限
select lower(ename),extract(year from sysdate)-extract(year from hiredate)as edate from emp;

Select TO_CHAR(0.123,‘$0.9999‘) FROM DUAL;

SELECT TO_CHAR(sysdate,‘YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS‘)
FROM dual; 
SELECT lower(ename),TO_CHAR(hiredate,‘YYYY"年"fmMM"月"fmDD"日"‘)as edate FROM emp;
--求每个员工的总工资
select ename ,sal+nvl(comm,0) as 总工资 from emp;
select ename ,sal+nvl2(comm,1000,0) as 总工资 from emp;


select nullif(100,100) from dual;
select nullif(100,200) from dual;
select nullif(200,100) from dual;
--分析函数
select emp.*,Row_NUMBER()over(order by sal desc,comm desc )as enum from emp;
select emp.*,Row_NUMBER()over(order by sal desc,comm asc )as enum from emp;
select emp.*,Row_NUMBER()over(order by sal desc,comm)as enum from emp;
select emp.*,RANK()over(order by sal desc)as enum from emp;
select emp.*,dense_rank()over(order by sal desc)as enum from emp;
select deptno,sal,avg(comm) from emp group by deptno,sal;
select deptno,sal,comm  from emp;

  

技术图片

 

以上是关于oracle基础知识的主要内容,如果未能解决你的问题,请参考以下文章

Client / Server Interoperability Support Matrix for Different Oracle Versions (Doc ID 207303.1)(代码片段

Oracle 数据库 - 使用UEStudio修改dmp文件版本号,解决imp命令恢复的数据库与dmp本地文件版本号不匹配导致的导入失败问题,“ORACLE error 12547”问题处理(代码片段

android小知识点代码片段

[vscode]--HTML代码片段(基础版,reactvuejquery)

续:纠正:ubuntu7.04可以安装,而且完美的安装 ! for《Oracle-10.2.0.1,打补丁10.2.0.5:在 debian 版本4不含4以上,及 ubuntu 7.04不含(代码片段

Oracle-常用数据库对象笔记(片段)