Oracle 笔记

1. Linux 环境变量生效
    . !$ 
    . ~/.bash_profile
    source ~/.bash_profile
2. 匿名登录(使用最高权限所有者登录数据库,用户名:sys)
    //没有库该用户就已经存在了
    sqlplus / as sysdba;
3. 解锁用户
    alter username identified by password account unlock;
4. 使用其它用户
    conn 用户名【/密码】;
5. 格式化显示
    set linesize 100 //设置行宽
    set pagesize 100 //设置多少行分页
    col colname form/for  a大小 //设置列宽
6. 使用 sql 文件执行
    ed 【文件名】  //记事本编写 sql 语句,不添加文件名会自动生成一个文件名
    @文件名      //执行编写的 sql 语句
    host Linux 命令
7. 不使用用户登录 sqlplus
    sqlplus /nolog  //登录 sqlplus 后使用 conn 命令切换到指定用户
8. sqlplus 使用 sys 用户登录必须添加 as sysdba ,其它用户可以不用添加
9. in 、 not in 和 not columntname in 注意点
    in: in 后面可以有 null 值
    not in 和 not columentname in: in 后面不能有 null 值,否则没有数据显示
10. like 模糊匹配
    _:匹配任意一个字符
    %:匹配 0、1、任意多个字符
    like 支持任意数据类型,但往往会在字符串上使用
    select * from emp where sal like '3%' or job like '%A' or hiredate '%81';
    columentname like '%%':表示所有数据;
11. 修改输入形式
    &input:执行 sql 语句时手动输入条件
    select * from emp where ename=upper('&input');
12. substr()函数
    字符串索引是从1开始,即使设置为0也会从1开始
    substr(字符串,下标)
    substr(字符串,下标,长度)
    下表为负数时从后倒数开始截取到最后
13. 字符串函数
    round(列 | 数字【,保留小数位】):四舍五入
    trunc(列 | 数字【,保留小数位】):直接截取
    mod(列 , 数字):求模(取余)
14. 日期函数
    sysdate:伪列
    systimestamp:伪列
    三种计算模式:
        1. 日期 + 数字 = 日期(若干天之后的日期)
        2. 日期 - 数字 = 日期(若干天之前的日期)
        3. 日期 - 日期 = 数字(两个日期之间的天数)
    计算两个日期间所经历的月数总和
        months_between(日期1,日期2
        select trunc(months_between(sysdate,hiredate)/12) year from emp;
    add_months(日期,数字)
    last_day(日期)
    计算下一个指定的星期(西方日期是从星期天开始为一周的第一天)
        next_day(日期,星期几/(1-7))
        select next_day(sysdate,1) from dual;
    计算两个日期之间的天数
        select sysdate-add_months(hiredate,months_between(sysdate,hiredate)) from emp
15. 转换函数
    语法: 字符串 to_char(列 | 日期 | 数字,转换格式)
    转换格式:
        日期转换成字符串:年(yyyy)、月(mm)、日(dd)、时(hh,hh24)、分(mi)、秒(ss)
        数字转换成字符串:任意的一位数字(9)、货币(L,本地货币)
        用来获取日期中的年、月、日
    to_char()
    to_date()
    to_number()

    判断程序慢两个方法:程序算法慢(CPU占用率高)、数据库数据量大(内存占用率高)
16.自然连接(内连接)
    字段名相同: select * from emp natural join dept;
    字段名不相同: select * from emp join using(deptno); //两张表有多个字段名相同
                  select * from emp e join dept d on e.deptno=d.deptno;  //两张表没有字段名相同
17. 数据集合操作
    union、union all :并集
    intersect : 交集 
    minus : 差缉
18. 统计函数
    count():
        count(*):可以准确返回表中的全部记录数
        count(1):和count(*)一样
        count(字段):统计不为 null 的所有数据量
        count(distinct 字段):消除重复数据之后的结果
    avg():
    min():
    max():
    sum():
19. group by
    约束条件:
        如果查询不使用 group by 子句,那么 select 子句中只允许出现统计函数,其它任何字段不允许出现
        如果查询中使用 group by 子句,那么 select 子句中只允许出现分组字段、统计函数,其它任何字段不允许出现
        统计函数允许嵌套,但是嵌套之后的 select 子句里面只允许出现嵌套函数,而不允许出现任何字段,包括分组字段
20. where 子句和 having 子句区别
    where 子句是在 group by 分组之前进行筛选,指的是选出那些可以参与分组的数据,并不允许使用统计函数
    having 子句实在 group by 分组之后执行的,可以使用统计函数
21. 子查询(需要使用())
    where 子句:子查询返回单行单列、单行多列(where(列1,列2)=(select 列1,列2 from table))、多行单列
    having 子句:子查询返回单行单列,而且需要使用统计函数过滤
        having avg()=(select avg() from table)
    from 子句:子查询返回的是多行多列
        多表查询存在有性能问题,而子查询主要的目的是解决多表查询性能问题而存在的
    select 子句:一般返回单行单列,并且需要某些查询的时候使用
            目的:行列转换
    多行单例:in、any、all
        in、not in:not in 子查询不能存在 null 值,否则没有数据显示
        any:
            =any:和 in 相同
            >any:比子查询中返回最小的值大的数据
            <any:比子查询中返回最大的值小的数据
        all:
            >all:比子查询中返回最大的值大的数据
            <all:比子查询中返回最小的值小的数据

        exists()判断:
            子查询只要有数据返回(不管什么数据)就表示条件满足,那么就可以显示出数据,否则不显示数据;

        in 主要是进行数据的判断,exists 主要是进行是否存在数据行的判断,因此exists()性能高,因为不关心具体的数据。
21. 伪列
    列本身不存在,但是却可以使用的列
    ROWID、ROWNUM、sysdate....
    rownum:动态生成
        取得第一行数据 // select * from table where rownum = 1;
        取得前 N 行数据 // select * from table where rownum <= 5;

    分页:
        select * from (select rownum rn 列 from tablename where rownum < curpage*linesize) a where a.rn > (curpage -1)*linesize; 
    not in 里面不能有 null原因:
        NOT IN(NULL) 如果某一列上的内容没有 null,那么就表示查询全部,not in 本事是用来过滤数据,结果由于自身的数据错误,导致查询全部,那么遇到数据量很大的时候就是灾难了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值