一、配置数据名称的时候 有个SID 这个是ServiceID,服务ID,网络链接使用的。建议数据名称与SID一致。
安装oracle时候字符集选择utf-8,示例方案打钩。
为全部帐户使用相同口令。设置口可能不符合要求不要紧。//OracleServiceORCL和OracleOraDb11g_home1TNSListener 设置为手动,每次都须要启动的服务。
二、SYS:超级管理员 system:普通管理员 scott:普通用户 sh:
三、sqlplus命令,做为oracle客户端使用。sqlplus命令是有不少的。
四、select *from emp;发现命令行输出很难看,标题出现换行的状况。能够设置每行显示的数据长度:SET LINESIZE,设置分页 set pagesize 100 (这个就属于格式化操做,这个格式化没什么意义。) ,以上两个页面是总体页面的格式化操做,也能够对某一列设置操做(col job for a8)。
五、使用ed命令:ed hello 若是hello不带后缀则默认打开 hello.sql,若是没有则会建立(建立的位置在c盘用户目录下)。执行使用@hello程序员
六、显示当前用户 show user;不用用户的切换:conn scott[/密码], 若是是切换到sys超级管理员 须要使用as sysdba,conn sys/密码 as sysdba,在sys下访问emp表提示没有试图或表错误,由于emp是scott的表,可使用select *from scott.emp;
七、sqlplus 也能够无用户访问 使用 sqlplus /nolog,使用这个后 show user 显示为空。
八、cmd 复制文件 使用copy 文件路径 被复制的文件路径。若是要在sqlplus里使用copy 必需要加上host :host copy 文件路径 被复制的文件路径。//sql
数据表结构:
sql:结构化的查询语言。
DML:数据操做语言 :数据更新查询操做 (select,from,insert。。。。等),开发中主要以DML为主
DDL:数据定义语言 :数据表,约束,索引,等。//数据库设计的时候使用。
DCL:数据库控制语言:数据库权限操做。
在scott用户下使用select *from tab
BONUS TABLE//工资表,此表如今没有任何数据,下面表都有数据。
DEPT TABLE//部门表
EMP TABLE//雇员表
SALGRADE TABLE//工资等级表
九、select *from //这里的顺序是 先from 在select。
select sla*12 from emp//支持表达式
select empno||1 from emp// ||字符链接
select empno||emname from emp 和 select empno||'hello' from emp;//程序中双引号,数据库中字符串所有使用单引号
十、distinct:若是后面接了多个行这是对多个列的组合删选。
十一、select * from where (from先执行,where第二,select最后执行),不等于符号 != 和 <>
使用<* and >* 使用between and 区别:前者使用了关系和逻辑运算符,后者只是用了逻辑运算符,因此后者性能更高。
between and 取日期区间的时候 日期使用的是字符串 例如:where between '01-1月 -81' and '01-1月 -91'
where ename=null //关系数据库中 null不是空也不是0,无法判断,要使用 is null 关系表示。null不是0,null是特殊的运算符,必须用 is null判断。
IN操做符:根据一个指定的范用围查询,in操做符 能够用or or 来实现,可是性能in更高,由于in是执行一次操做而or or 是有几个or就执行几回判断。in中的条件能够有空,不影响返回值,可是not in里若是有空则无数据返回。
like;“_”:任意一位 “%”:任意多位 ,like不分数据类,任何数据类型都支持like,例如: int like '%1%' date like'%2%'
:'_A%' 表示第二位是A字符后面任意。
十二、order by:order by是在select后面执行,因此可使用select 列定义的别名,这也是where后面不可使用的缘由,由于where在select以前执行
1三、oracle有一个虚拟表为了作函数测试的,dual表 select lower('Hello') from dual;//upper();大写
1四、select *from emp where empID=‘&inputName’//这里输入变量值
select *from emp where eName=upper('&inputname')
1五、单行函数:lower,upper,initcap,length,replace(对象,被替换对象,替换的值),substr(),函数能够嵌套使用,由于各个函数返回也是字符串,注意substr下标是从1开始,。
负数索引设计:只有oracle中才有,例如像截取name的后三位字符,substr(name,-3),也能够写成 substr(name,length(name)-2).
数值函数:针对数字进行处理,round(),trunc(),mod()。
round(数值)//返回四舍五入值
round(数值,2)//返回四舍五入值
round(数值,-2)//返回四舍五入值
trunc()与round差很少参数,直接去掉小数点后面的。若是数据后还有参数,小数后在取位数,若是这个参数是负数,则跟round差很少意思。
日期函数(oracle本身特点):伪列,不在表的列中确能使用查询语句的列值获取。有sysdate,systimestramp。
日期+数字:若干天以后
日期-数字:若干天以前
日期-日期:两个时间的天数 //没有日期+日期:由于太大。。。
由于使用日期减去日期返回的数值没有什么意义,因此才有日期函数的出现。
计算两个日期间所经历的月数的总和:months_between(),add_months(日期,月数),last_day(日期)//日期本月的最后一天日期,next_day(sysdate,'星期二')//
1六、转换函数 to_char(),能够将日期类型进行格式化输出,to_char(sysdate,'yyyy-mm-dd')//oracle中这个格式化不区分大小写。其实这个是没什么用的,只是在输出的时候能够格式化因此能够经过这个函数得到日期的单独年,月,日(to_char(sysdate,'yyyy'))。to_char(372787874837483,'9999,999,99,99')//对数字的转换,9是表明数字不是意义上的9数字to_char(372787874837483,'L9999,999,99,99')//这里返回本地货币格式。
to_date('1999-01-18','yyyy-mm-dd')//字符串转日期函数,基本用不到
to_number(字符串)//字符串转化为数字 select to_number('1')+to_number('2') from dual 等价于: select ‘1’+‘2’from dual//oracle有一个在可行的范围内自动转换的功能。
1七、通用函数(oracle本身特点)
Oracle里提供有两个简单的数据处理函数 :nvl():nvl(comm,0), decode()
一、处理Null:select ename,(sale+comm)*12 from emp//当sale或者comm里面有一个null的值时候 (sale+comm)这个返回0,使用nvl(comm,0),表示comm为空的时候使用默认值0,这是oracle的特点函数其余数据库没,谨慎使用。
二、decode()// decode(列名,'匹配内容1','显示内容1','匹配内容2','显示内容2','默认值使用')//使用性别的显示时候,0替换成女,1替换男场景使用。数据库
1八、多表查询:
若是后面没有条件,量表查询出现的结果是量表的数量积(笛卡尔积),事实上笛卡尔积是一直是存在的,即便使用关联关系消除了一些笛卡尔积,可是仍是存在,它对珍格格程序的影响是巨大的。
oracle中有一个sh用户,这个用户下的数据表都是大数据的。
1九、消除笛尔积的方式有 内联 和 外联,where属于内联,外联分为左外 右外 全外链接(量表之和的数据显示出来)。
20、数据集合操做:
union, union all,intersect,minus。
union:集合合并在一块儿取消重复元素。select *from emp union select *from emp where deptNo=10
union all:取并集,与上面相反。
intersect:交集
minus:减集 //若是前表的数据小于后表则没有数据返回,由于集合中不存在负数。
在集合操做之中有一件很是重要注意的事项,因为集合表要求这若干个查询结果所返回的数据结构必须相同,意思就是或者相同的表,并且查询的列必须一致。网络
2一、统计函数的使用:经常使用的:count(),sun(),min(),avg(),max()。
当表中没有数据的时候 只有count会返回数据即0,其余几个统计函数都没有返回值。
count(*),count(列) count(distinct 列)
2二、分组统计:group by后select后面要么使用分组函数和group by的列,若是一条sql语句中没有使用group by则select后面只能出现分组函数。若是出现嵌套的分组函数则该select后面不能出现任何列,原理同样,由于group by后返回的是行列的集合也就是一个表,此时该表查询是没有使用group by语句的而嵌套后说明select后面使用统计函数,若是使用统计函数则不可以使用其余列。
2三、oracle中的2个伪列:rownum,rowid
rownum:select *from emp where rownum=1 // rownum只能获取第一个 他不能获取一个范围的值,例如想获取6-10行 不能够用 rownum between 6 and 10,可是可使用rownum<6
若是要获取6-10行,则这个是典型的一个分页案例,可使用子查询的方式,select *from (select rownum from emp rownum<currentPage*linePage) temp where temp.rownum>(currentPage-1)*linePage //linePage是一页显示的数据数量。
rowid:rowId是oracle为每一个数据分配的一个物理路径标识,相似一个索引,格式都是每一个区域的地址标识。oracle里能够有重复且如出一辙的数据,可是该数据的rowid确定是不一样的,因此若是要删除重复几条数据,只保留一条最早插入的数据(理论上物流地址的插入都是自增的,由于永远不知道有多少数据插入,天然不多是自减的方法) 则可以下实现:delete from emp where rowid not in(select min(rowid) from emp e where e.id=xx group by e.id)
2四、having:使用having的地方必定是有group by,由于having就是配合group by 使用的,having后面出现的是统计函数,由于where后面是无法使用统计函数的,这个跟sql的执行顺序有关。where是在select后面的列以前执行,因此where后面没法使用group by,可是having是在select后面的列以后的因此可使用 统计函数,而且在使用后select后面还可使用其余列。
2五、数据数据类型:
number:通常存储数据类型,若是不想区分数据就使用这个,可是oracle充分考虑程序员的习惯还推出一个int,这个就是保存整数的数据,number(m,n)//n:小数位的长度,m-n为整数位的长度
varchar2:oracle是这个通常表明字符串,通常小于200的长度都用这个,其余数据库通常就叫varchar
clob:大型文字信息 最大4G
blob:保存图片,音乐,电影等 最大4G
date:日期类型,通常数据库可能date只是日期,而datetime才是日期时间。
2六、建立表oracle案例:
create table member(
m_id number,
m_name varchar2(20) default '无名氏',
m_date date default sysdate
)
注意:设置默认值,若是在默认值上插入null,则以插入时候的数据为准,建立表的最后一个不用逗号。数据结构