Oracle数据库完整笔记

Oracle数据库的安装

基础概念

数据库:能够长期保存,支持多用户共享,通过数据模型尽可能的减少冗余的数据集合。

数据库管理系统:用来创建,维护,管理,运行数据库的软件。

数据模型:

概念模型:解决存什么问题

逻辑模型:解决怎么存问题

逻辑模型

层次模型

网状模型

关系模型(主流的模型)

物理模型:解决存在哪的问题

Oracle三大文件:数据文件, 重做日志文件,控制文件

基础命令

sqlplus  sys/1 as  sysdba;

//登录系统管理员身份

alter user scott account unlock;

//解锁

alter user scott identified by tiger;

//设置默认密码tiger

conn scott/tiger;

//连接scott用户

show user ;

//显示用户名称

select * from tab ;

//显示当前用户下表的情况

desc tabname ;

//显示表结构

select * from  tabname;

//显示表的内容

表结构

1、 部门表:dept

DEPTNO 表示部门编号,由两位数字所组成

DNAME 部门名称,最多由14个字符所组成

LOC 部门所在的位置

2、 雇员表:emp

EMPNO 雇员的编号,由四位数字所组成

ENAME 雇员的姓名,由10位字符所组成

JOB 雇员的职位

MGR 雇员对应的领导编号,领导也是雇员

HIREDATE 雇员的雇佣日期

SAL 基本工资,其中有两位小数,五倍整数,一共是七位

COMM 奖金,佣金

DEPTNO 雇员所在的部门编号

3、 工资等级表:salgrade

GRADE 工资的等级

LOSAL 此等级的最低工资

HISAL 此等级的最高工资

NSQL: not sql (大数据,内存数据库...)

SQL语句: 结构化查询语言

DQL:数据查询语言

DML: 数据操作语言(增加数据,修改数据,删除数据)

DDL: 数据定义语言

DCL: 数据控制语言(数据使用的权限)

TPL: 事务处理语言

简单的DQL语言:

select  查什么

from  从哪查

语法:

select [distinct] {*|{列名|表达式 [as] [列别名] [,...]}}

from 表名;

[]:可有可无可选项

{}:括号内自动为一组

*: 一个表的所有列

|:或者的意思

列名:列的名字

表达式:

算数表达式: 进行算数运算

字符串表达式:  '||'  拼接运算符, 两个字符串可以做拼接成一个字符串的运算

as: 列别名的关键字 (默认就存在)

列别名: 给列或者表达式换一个名字 ,如果名字中有特殊符号用双引号引起来

,...: 同一组内的内容可以重复出现,中间用 逗号隔开

distinct: 唯一,去重复

空值问题:空值和任何数据进行算数运算的结果都为空

限制查询和排序

语法:

select [distinct] {*|{列名|表达式 [as] [列别名] [,...]}}

from 表名

[where 条件表达式] ;

where 作用: 限制查询

条件表达式 =  关系表达式 [逻辑运算符...]

关系表达式 =  列名 |表达式  比较运算符  列名 |表达式 

变化后语法:

select [distinct] {*|{列名|表达式 [as] [列别名] [,...]}}

from 表名

[where  {列名 |表达式  比较运算符  列名 |表达式} [逻辑运算符...]] ;

比较运算符 :得到的结果一定是真假

普通比较运算符:> <  =  >=  <=  !=

特殊比较运算符:is null; between  and ;in ; like

isnull:

--查询没有奖金的人

select  ename , job ,sal,comm from emp

where comm is null

like:  通配符:

_:一个长度的任意字符

%:任意长度的任意字符

escape:转义字符

--查询一个名字中包含S的人员信息

select * from emp

where ename  like  '%S%';

--查询名字中倒数第二个字母是T的人员信息

select * from emp

where ename like '%T_';

between  and:

-- 查询工资在1000到2000之间的10部门人员信息

select * from emp

where deptno =10 and

sal between  1000 and 2000;

逻辑运算符: and 与  or 或  not 非

日期的比较: 语言问题?

select  ename, hiredate,  hiredate+1 from emp

where hiredate < '1-1月-17'

空值问题:

空值如果和任意数据进行比较运算的结果也为null值

逻辑运算:得到的结果一定是真假

and TRUE FALSE null

TRUE TRUE FALSE null

FALSE FALSE FALSE FALSE

null null FALSE null

or TRUE FALSE null

TRUE TRUE TRUE TRUE

FALSE TRUE FALSE null

null TRUE null null

排序

语法:

select [distinct] {*|{列名|表达式 [as] [列别名] [,...]}}

from 表名

[where 条件表达式]

[order  by 列名|表达式|列别名 |数字  [asc] [desc] [,...]];

多表连接:当发现所查数据不再同一表内的时候,需要使用多表链接来一次查询多个表的数据

--查询smith的姓名、工资和部门名称

语法:

select [distinct] {*|{列名|表达式 [as] [列别名] [,...]}}

from 表名

[where 条件表达式]

[order  by 列名|表达式|列别名 |数字  [asc] [desc] [,...]];

内部连接:不是外部连接的都是内部连接

等值连接: 连接条件只用等于号

不等值连接:连接条件不只用等于号

!!!!内部连接:

外部连接:不是内部连接的都是外部连接

+:在右边叫左外连接

+:在左边叫右外连接

N表关联最少需要n-1个条件

函数:一些提前准备好的代码(往往有固定的功能)

系统函数  + 自定义函数

系统函数:

单行函数:多行数据通过函数运算的结果还是多行数据

多行函数:多行数据通过函数运算的结果只有一行数据

单行函数:

函数语法:

使用场景:能使用列名或者表达式都可以使用函数

函数名( 入参)

入参规定数据的类型

字符函数:

字符转换:

Lower()

Upper()

initcap()

字符处理:

substr()  //字符串截取

length()  //字符的个数

concat()

instr()  //求某一个字符串在另一个字符串中的位置

lpad()  //填充

rpad()

trim()  //去掉前后空格

replace()//替换字符串

--要求查询名字中含有S的人员信息 ,不允许使用substr,like

select * from emp

where  instr(ename ,'S')>0;

select ename ,replace(ename,'S') from emp

where  ename != replace(ename,'S')

数字函数:

  abs: 绝对值

  round:四舍五入

  trunc:截取

  ceil:向上取整

  floor:向下取整

  mod:取余运算

  sign:判断正负数

日期函数:

sysdate:当前时间

months_between():求两个时间点之间差了几个月

add_months():指定日期过几个月后的日期

next_day():返回离当前日期最近的指定星期的日期

last_day():本月最后一天

转换函数:

通用函数:

nvl:处理空值

select ename ,sal ,comm,sal+nvl(comm,0)

from emp;

case:

decode:

例子1.:

-- 查询每个员工的姓名和部门名称

select ename,

      case deptno

        when 10 then

          'ACCOUNTING'

        when 20 then

          'RESEARCH'

        when 30 then

          'SALES'

        else

          'OPERATIONS'

      end

  from emp;

select ename,

      decode(deptno,

              10,

              'ACCOUNTING',

              20,

              'RESEARCH',

              30,

              'SALES',

              'OPERATIONS')

  from emp;

  例子2.:

select ename,

      case

        when sal < 1000 then

          '穷'

        when sal between 1000 and 2000 then

          '贫'

        when sal > 2000 and sal <= 3000 then

          '勉强能活'

        else

          '高富帅'

      end

  from emp;

select ename,

      decode(sign(sal - 1000),

              -1,

              '穷',

              0,

              '贫',

              1,

              decode(sign(sal - 2000),

                    -1,

                    '贫',

                    0,

                    '贫',

                    1,

                    decode(sign(sal - 3000),

                            -1,

                            '勉强能活',

                            0,

                            '勉强能活',

                            1,

                            '高富帅')))

  from emp;

转换函数:

to_char() !    'yyyy-mm-dd  hh24:mi:ss'

to_date() !

to_number()

多行函数:无论多少条数据,只有一个条结果,空值不参与任何统计

种类:Max,Min,Avg,Sum,Count

使用场景:select ,order by

求表内数据的行数:count(1),count(*)

函数名([distinct]列名|表达式)

分组语句:

group by

select [distinct] {*|{列名|表达式 [as] [列别名] [,...]}}

from 表名

[where 条件表达式]

[group by 列名|表达式 [,...]]

[having  条件表达式]

[order  by 列名|表达式|列别名 |数字  [asc] [desc] [,...]];

子查询:把多个有关联的查询组合成一个查询,其中部分先执行的查询用括号括起来。

使用位置:除了group by 都可以

分类:

子查询结果分类:

单行子查询:

子查询返回结果为1行

多行子查询:

子查询结果超过1行

使用 any all in

多列子查询:

子查询使用的位置分类:

where子查询: 子查询的作用是提供一个条件

from子查询: 作用1:可以自定义新的数据集合,经过自己的设计,完成更复杂的查询需求

作用2:提升某些运算的优先级

select子查询:

相关子查询:

所在,自己,同

DML: 一切皆是查询

  查询:

  增加:insert

  删除:delete

  修改:update

  删除:把查询语句的from保留,用delete替换掉select子句

  增加:insert into

  主数据插入:

    insert into dept values(60,'haha',null);

insert into dept(deptno ,dname) values(70,'xixi');  

  业务数据插入:

    insert into tabname select ...

  修改:

  update emp

set sal = 1000

where ename = 'SMITH'

相关update?

commit:提交

rollback:回滚

事务????

  DDL:数据定义语言

    create

    drop

    create :创造 

    create table Student (

    name char(100),

    age number(3),

    sex char(2)

    )

    数据类型:

    字符

    char :固定字符    ,效率高,容易浪费

    varchar2:不固定字符 ,效率慢,节省空间

    数字

    Number(所有数的位数,小数的位数)

    日期

    Date  timstamp 支持毫秒

    作业:oracle :5,6,7,9所有的题

    能力好一点的:5章尝试用子查询, 7,9尝试多表

          java:安装,配置

                2的10以内次幂

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容