zoukankan      html  css  js  c++  java
  • Oracle数据库学习笔记

    Oracle数据库学习笔记

    ---------

    Oracle数据库简介:
    Oracle:甲骨文
    Oracle 10g
    Oracle 11g
    ---------------------------
    Oracle 数据库的安装
    Oracle对于个人学习使用的时候是不收费的,用在商业上
    www.oracle.com 下载,将下载的两个文件夹复制到一个文件夹中,合并文件
    安装的时候,关闭防火墙,关闭360这些的杀毒软件:这些东西阻止了它认为的组阻止的内容,就像它给你电脑清理垃圾的时候有时候会删除很多文件,删除的都是它认为不好的文件,就删除了

    Oracle数据库里很多的代码是用java写的所以安装的时候启动会比较慢

    安装Oracle 11g 数据库:
    卸载oracle 11g 数据库:
    1.卸载正常安装完成后的Oracle 11g数据库:
    >使用oracle提供的卸载程序
    >重新启动电脑,进入到安全模式(重启的时候按F8键即可)
    >找到系统上对应的安装oracle的时候的磁盘的路径,并且删除
    >运行注册表命令"regedit.exe",Ctrl+F 搜索oracle相关的然后全部删掉
    >再次重新启动电脑后就可以重新执行安装了
    >
    2.卸载安装的时候失败了的oracle 11g 数据库
    >重新启动电脑,进入到安全模式(重启的时候按F8键即可)
    >找到系统上对应的安装oracle的时候的磁盘的路径,并且删除
    >运行注册表命令"regedit.exe",Ctrl+F 搜索oracle相关的然后全部删掉
    >再次重新启动电脑后就可以重新执行安装了
    >

    如果这两种方法都不能正常安装oracle数据库的话,重新刷一个新的windows操作系统,再来安装oracle数据库

    --------------------------------
    安装前的检查环境的时候出现错误的时候,选择忽略

    Oracle安装成功后的样子

    -------------------
    Oracle数据库安装完成后 口令管理的设置:
    超级管理员:sys / change_on_install
    普通管理员:system / manager
    普通用户:scott / tiger oracle数据库的创始人中有一个叫scott 养了一只喵叫tiger
    大数据用户: sh / sh
    --------------------------
    作为程序员,能使用命令行完成的就不要用图形化界面点点点
    =============
    sqlplus 命令行:Win+R 后输入sqlplus命令来登录Oracle
    或者用明文的账户和密码登录
    cmd 后输入:sqlplus scott/tiger
    ==============
    SQL中的命令是不区分大小写的,不过固定的搭配尽量使用大写,自定义的可变的用小写
    数据库的组成是数据表,每一张数据表包含有多条数据记录,
    11.格式化指令:
    SET LINESIZE 300; 设置每行显示的数据长度
    SET PAGESIZE 30; 设置每页显示的数据行数
    -------------------------
    SELECT * FROM emp;

    ed 文件名 默认创建的.sql结尾的sql记事本文档
    @文件名称使用创建的sql记事本文档,默认找的是.sql结尾的记事本文档
    --------------
    11.sqlplus切换用户:
    CONN 用户名/密码 AS SYSDBA
    CONN system/manager
    CONN sys/change_on_install AS SYSDBA

    emp表属于scott用户的
    show user;

    echo 哎靠命令
    -------------------
    11.调用本机的命令:
    在oracle数据库中调用windows自己的命令,HOST命令用来在Oracle数据库中调用本机的命令
    HOST echo helloworld
    复制一个文件
    HOST copy d: est.mp4 d:hello.mp4

    -----------------------
    11.什么是SQL
    SQL:SQL是指结构化的数据库查询语言

    Oracle数据库是第一个支持SQL语法的数据库,
    ---------------
    11.SQL的语法:
    SELECT
    FROM
    WHERE
    GROUP BY
    HAVING
    ORDER BY
    INSERT
    UPDATE
    DELETE
    CREATE
    DROP
    ALTER
    GRANT
    REVOKE
    ---------------------------
    11.SQL的类型
    DML:数据操作语言,开发中使用的部分:数据库的查询和更新操作,
    DDL:数据定义语言,开发前的设计:数据对象的创建(表和用户)
    DCL:数据控制语言:权限管理的操作(DBA的内容)

    --------------------------
    11.SCOTT 用户表的结构
    scott用户一共有4张数据表

    1.查询一个用户下的所有数据表;
    SELECT * FORM 表名
    2.查询一个表的结构
    DESC 表名称

    一个中文等于2个字符
    oracle中3个字符表示一个中文
    ------------------------------------------
    11.简单查询:简单查询指的是,查询一张数据表中所有数据行的内容,

    [] 中括号中内容表示可选项
    SELECT [DISTINCT] * ,列名,列名,,,FROM 表名称

    第一个执行的是from,第二个执行的是select
    from子句用来确定数据的来源,
    SELECT * FROM emp;

    查询员工编号,姓名,职位,工资
    SELECT empno,ename,job,sal FROM emp;

    查询所有的职位信息
    SELECT job FROM emp ;

    查询所有的职位信息,且查询的内容中没有重复信息
    SELECT DISTINCT job FROM emp ;

    11.SQL中的四则运算:执行先乘除后加减
    查询员工的编号,姓名,基本年薪
    SELECT empno,ename,sql*12 FROM emp;

    11.定义SQL查询中的别名
    查询每个员工的编号,姓名,年薪(每年可领15个月工资,每个月有200元的餐补,100元车费补贴,100元电话补贴,每年有5个月的高温补贴500元)

    给年薪取了个别名income
    SELECT empno,ename,
    (sal*15+(200+100+100)*12+200*5) income FROM emp;

    11.SQL中的常量:
    >常量是字符串,使用单引号声明,字符串需要写在单引号之间 'helloword'
    >常量是数字,直接编写即可
    >常量是日期,按日期的格式编写:‘日-月-年’

    SELECT '常量字符串',empno,ename FROM emp ;

    11.将两个列的数据合并为一个列
    SELECT empno||ename FROM emp ;

    SQL查询中别名不需要声明,直接编写即可
    查询员工编号,姓名,员工的年薪
    SELECT '员工编号:'||empno ||', 姓名 :'||ename||',年薪收入:'||sal info FROM emp ;

    11.SQL中的单行的简单查询:
    >简单查询是将一张 数据表中所有数据行的内容都显示出来;
    >在查询语句之中先执行的是FROM子句来确定数据源(控制的是行和列,也就是查询一张数据表的全部内容),SELECT 子句可以控制需要显示的数据列,
    >如果出现数据的重复,可以使用DISTINCT来消除重复的数据显示行
    >SELECT子句可以进行四则运算
    >SELECT子句可以直接输出常量的内容,对于字符串的输出使用英文的单引号来声明,日期按照字符串格式编写
    >|| 用来进行把查询的输出内容进行连接
    >

    ---------------------------
    =====>>>限定查询:
    SELECT [DISTINCT] *,列名,列名[列别名],,,
    FROM 表名称 [表别名]
    WHERE 过滤条件

    执行顺序:先执行FROM子句来确定数据来与,再执行WHERE子句来确定满足条件的数据行,最后再执行SELECT子句来控制要显示的数据列
    -------------------
    11.SQL中的运算符
    关系运算符:>,< ,>=, <= ,<>,!= 进行大小比较操作使用
    逻辑运算符:AND,OR,NOT
    范围运算符:BETWEEN..AND
    谓词范围:IN,NOT IN
    空判断:IS NULL,IS NOT NULL
    模糊查询:LIKE
    ------------------------
    查询出所有基本工资高于1500的员工的信息
    SELECT *
    FROM emp
    WHERE sal>1500;
    ----------------------
    查询出zhangsan 员工的信息
    SELECT *
    FROM emp
    WHERE ename='zhangsan' ;
    ------------------------------
    Oracle数据库中的数据内容是区分大小写的

    查询工资是5000的员工的基本信息
    SELECT * FROM emp WHERE sal=5000 ;

    Oracle中所有的运算符的运算中不分区数据类型直接使用
    ----------------
    查询职位不是销售人员的,员工编号,姓名,职位
    SELECT empno,ename,job FROM emp WHERE job!='salesman' ;
    SELECT empno,ename,job FROM emp WHERE job<>'salesman' ;
    ---------------
    11.逻辑运算符
    >与连接:所有的判断条件都需要满足
    >或连接:很多个条件中只要有一个符合即可
    >
    >
    查询出工资在1500到3000之间的员工的信息
    SELECT *
    FROM emp
    WHERE sal>=1500 AND sal<=3000 ;
    -----------------
    查询工资大于2000或者是职位是程序员的所有员工的信息
    SELECT *
    FROM emp
    WHERE sal>2000 OR job='programmer' ;
    ---------------
    非:如果条件为真,结果为假的,如果条件是假的,结果则是真的

    查询所有工资小于2000的员工的所有信息
    SELECT *
    FROM emp
    WHERE sal<2000 ;

    非逻辑:
    SELECT *
    FROM emp
    WHERE NOT sal>2000 ;
    ------------------------------
    11.范围查询:BETWEEN最小值的数字或日期..AND最大值 查询结果中包含了满足条件的最小值也包含了满足条件的最大值

    查询工资在1500到2000之间的员工,且包含了1500和2000
    SELECT *
    FROM emp
    WHERE sal>=1500 AND sal<=2000;

    SELECT *
    FROM emp
    WHERE sal BETWEEN 1500 AND 2000;
    --------------
    查询所有在1981年入职的员工的信息
    SELECT *
    FROM emp
    WHERE hiredate BETWEEN '01-1月-1981' AND '31-12月-81';
    ----------------
    11.空判断:不确定的内容,
    查询出工资不为空的员工的所有信息
    SELECT * FROM emp WHERE Money IS NOT NULL;

    SELECT * FROM emp WHERE NOT Money IS NULL;

    不为空的两种写法:
    IS NOT NULL 等同于 NOT IS NULL
    --------------
    11.IN 操作符的范围是指定的可选的范围,

    查询出员工编号是7369,7566,7788,9999的员工的信息
    SELECT * FROM emp WHERE empno ='7369' OR empno ='7566' OR empno ='7788' OR empno ='9999' ;

    SELECT * FROM emp WHERE empno IN(7369,7566,7788,9999);

    不再指定的范围中使用NOT IN
    查询出员工编号不是7369,7566,7788,9999的员工的信息
    SELECT * FROM emp WHERE empno NOT IN(7369,7566,7788,9999);

    SELECT * FROM emp WHERE NOT empno IN(7369,7566,7788,9999);
    -----------------
    SQL在执行数据库查询时,程序是通过把数据抓取到内存中读取的
    计算机起源于:冯诺依曼的计算机数学公式
    -------------
    NOT IN 是为了查询部分数据行,如果有了NUL(因为某些数据永远不可能为空,)就变成了查询全部,
    所以NOT IN 不能直接出现,在有空的查询的时候,

    数据库的设计理论来源于:数学集合中的交叉并补
    --------------------
    11.模糊查询:LIKE
    下划线 _ 匹配任意的一位字符
    百分号 % 匹配任意的位数的字符,零位,一位,多位

    查询姓名是以字母A开头的员工的信息
    SELECT * FROM emp WHERE ename LIKE 'A%';

    查询姓名中的第二位是字母A的员工的信息
    SELECT * FROM emp WHERE ename LIKE '_A%';

    查询姓名中含有字母A的员工的信息
    SELECT * FROM emp WHERE ename LIKE '%A%';
    LIKE模糊查询的时候,如果不设置查询的关键字,那么表示查询数据表中的全部内容
    SELECT * FROM emp WHERE ename LIKE '%%';

    SELECT * 查询效果和速度都比 LIKE的WHERE子句的不设置关键字的查询要好
    ---------------
    >WHERE子句控制着显示数据行的操作,
    >SELECT子句控制着显示数据列的操作,
    >WHERE子句中不能使用和定义别名
    >使用LIKE实现模糊查询的时候,如果不设置关键字('%%')表示的是查询数据表中的全部内容
    >使用NOT IN 查询时,查询范围里面不允许出现null(空值),否在执行的SQL查询语句不会返回任何的查询结果
    >
    ========================
    ====>>>SQL中的排序查询
    SELECT [DISTINCT] *,列名,列名[别名],,,
    FROM 表名称 [别名]
    ORDER BY 字段[ASC][DESC],字段[ASC][DESC] ;

    先执行FROM子句,后执行WHERE子句,再执行SELECT子句,再执行ORDER By子句
    因为ORDER BY子句是在SELECT子句之后执行的,所以ORDER BY子句可以使用SELECT子句定义的别名

    ASC 默认的查询排序,按照升序的方式排列
    DESC 按照降序的方式排列

    查询所有的员工信息,要求按照工资由高到低排序
    SELECT * FROM emp ORDER BY sal DESC ;
    查询所有销售员工的信息,要求按照入职日期由早到晚排序 数字的值由小到大排序,也就是升序排序
    SELECT * FROM emp WHERE job='salesman' ORDER BY sal DESC ;

    按照工资由高到低排序,如果工资相同,则按照雇佣日期由早到晚排序
    SELECT * FROM emp ORDER BY sal DESC ,hiredate ASC ;

    SELECT * FROM emp ORDER BY sal DESC ,hiredate ;
    ----------------
    ORDER BY 子句在SELECT子句之后执行,所以可以使用SELECT子句定义的别名
    查询员工的员工编号,姓名,年薪,并按照年薪由低到高排序,有小到大从左到右,从上到下
    SELECT empno,ename ,sal*12 income FROM emp ORDER BY income ASC;
    ----------------
    >在整个SQL查询语句中只有ORDER BY子句可以调用SELECT子句定义的别名
    >ORDER BY 是最后一个执行的查询子句
    >ORDER BY 子句有两种排序方式:ASC和DESC
    >ORDER BY 子句是唯一一个可以使用SELECT子句中定义的别名的子句
    >
    >
    SQL中的子句:
    ---------------

    简单的基础查询
    查出部门30中的所有员工
    SELECT * FROM emp WHERE deptno=30;

    查询所有办事员CLERK的姓名,编号和部门编号
    SELECT ename,empno,deptno FROM emp WHERE job='CLERK';

    找出佣金高于薪资60%的员工
    SELECT * FROM emp WHERE comm >sal*0.6;

    找出部门中所有的经理MANAGER和部门20中所有的办事员CLERK的信息

    SELECT * FROM emp WHERE (deptno=10 AND job='MANAGER') OR (deptno=20 AND job='CLERK');

    找出部门中所有的经理MANAGER和部门20中所有的办事员CLERK的信息,既不是经理又不是办事员但薪资大于等于2000的所有员工的详细资料
    SELECT * FROM emp WHERE (deptno=10 AND job='MANAGER') OR (deptno=20 AND job='CLERK') OR (job NOT IN ('MANAGER','CLERK') AND sal>=2000);

    找出收取佣金的员工的不同工作
    SELECT DISTINCT job FROM emp WHERE comm IS NOT NULL ;

    找出收取佣金或收取的佣金低于100的员工
    SELECT * FROM emp WHERE comm IS NULL OR comm<100;

    显示不带有R的员工的姓名
    SELECT * FROM emp WHERE ename NOT LIKE '%R%';

    显示姓名字段的任何位置包含"A",的所有员工的姓名,显示的结果按照基本工资由高到低排序,如果基本工资相同,则按照雇佣年限由早到晚排序,如果雇佣日期相同,则按照职位排序
    SELECT * FROM emp WHERE ename LIKE'%A%' ORDER BY sal DESC ,hiredate ASC ,job;


    一般项目的开发过程:
    >获取需求阶段
    >需求分析与业务设计
    >数据库设计
    >程序开发与业务实现
    >程序的测试
    >程序的运维
    >

    主键
    外键
    自动增长

     ------------------------------

    游标是一个指向上下文的句柄或叫指针handle
    1.定义游标
    2.打开游标
    3.提取游标数据
    4.关闭游标


    SQL书写中的注释
    -- 我是注释

    表示尊重和理解
    很多东西都是积累的过程
    powerdesigner 用来实现数据库ER图用的,是sybase开发的数据

    优秀的人注定是特别的,普普通通注定是平庸的

    DBMS选择哪个数据库管理系统

    会创造的,会模仿的,模仿的多了就会了,多写几次结果自然就出来了(肯德基和麦当劳)


    学到了什么,收获了什么,有什么感受

    ==============================

    附录:学习中想到的一些乱起八糟的

    ./install


    信手拈来的东西都是我多年实践沉淀积累下来的
    ------------------
    学习中心里想到的一些乱七八糟:
    MySQL数据库是跟PHP最匹配的

    看视频为什么要整理成笔记:因为视频上讲解和解释的废话太多了,看过之后把重要的记录更新到博客里面去

    UDP协议发送的消息不可靠,它只管发个消息给你,你接收或是不接收它不管你
    TCP/IP 非要建立三次握手后才可以,发送的消息很可靠

    电脑上的防火墙尽量关了
    交换机堆叠:也就是把两个交换机当做一个交换机来用,看作是一个交换机
    交换机冗余:就是用两个交换机实现相同的功能,两个交换机配置完全相同,也就是备份交换机

    Nginx :N吉克斯
    ---------------------
    有的时候该有的自信,还是要有的

    睡觉是我最大的敌人,我睡觉不是因为无聊而是我真的累了

    自己有问题请别人帮忙解决,肯定是想办法跟别人搞好关系,
    -------------------------------
    让别人讲解技术,记不住就偷偷的录屏或是录音,偷师学艺
    只要你对它足够熟悉:你会有自信,所以你要很熟,熟都每个步骤都要记得

    我有心想把事情做好,你们自己不配合,不想提高不怪我,因为懒啊,都是些平庸之辈,所以人和人之间是有差距的
    ----------------------
    就像电影被嫌弃的松子的一生一样,生而为人,不管什么时候,自己永远要放在第一位,自己活着永远只为自己活着,活着是自己的,人生是自己的,所有的痛苦和快乐都是自己的,如果你连自己的不爱,你连自己都不依靠你真的不配活着
    活着所有的感受都是自己的,难受就是难受,不开心就是不开心,不喜欢就是不喜欢,没有任何人可以给你分担也永远都不可能让别人替你活着,活着永远都是自己一个人的事情
    --------------------------------

    ----------------------------------

  • 相关阅读:
    小程序-自定义组件
    51Nod
    CodeForces
    JSON、闭包和原型----透视Javascript语言核心
    转载:动态规划法总结
    to初学者:从汉诺塔问题深入理解递归算法思想
    不知‘时间复杂度’所云的看过来
    盲点流水账记录
    常用序列化协议总结
    排序——了解总体以及插入排序
  • 原文地址:https://www.cnblogs.com/GaoNa/p/9848177.html
Copyright © 2011-2022 走看看