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;