数据库补充(一)

1,sql*plus(oracle的客户端)基本命令:

      set linesize 140; 设置显示结果的行

      set pagesize 140; 设置页的大小

      set timing on/off ;on是显示每次操作的执行时间,off相反

      set feedback on/off; on是显示每次操作所影响的行数,off相反

      host cls; 清屏

      desc 表名; 查看表的详细信息(每个字段的类型)     

2,sql语句知识点补充:

      null != null

      任何表达式和null进行运算的结果都是空的

      || 为连接符,‘aaa’|| ‘bbb’可以将前后的字符连接起来。

      where id in / not in (id0, id1, id2, ...) 注意候选式可以是null,注意是not in 的时候,结果永远是空的

      当选择的列与from后面的表没有关系时,使用虚表会使结果集精简(会去掉重复的部分)。

      先使用where过滤在分组比先分组在使用having过滤的效率高

      select 如果没有where删选条件,删选的是from各表中笛卡尔积的连接结果,where后面的条件是对笛卡尔积的结果进行筛选

      外连接技术的使用场景,就是把连接条件中,其中一个是null另一个不是null的数据也找出来。(+) =/= (+),那边没有加号就允许哪边的条件为null(oracle的语法)

     对于子查询,要注意格式的书写,不要丢掉()

     哪些地方可以加子查询,如下:

              select a, b, c (select .....) //ok 但是在select后面的子查询,其子查询的结果必须的单行的

             from tab1, tab2, (select **) //ok 因为表和select出来的内容都是集合

             where (select....) //ok  =,<,> 是单行比较操作符;in是多行比较操作符。

              group by ... (select ...) //err

              having  ...(select ...) //ok

              order by ...(select ...) //err 

     rownum是oracle中服务器返回结果集的固有属性,不会随着排序而变化,例题如下面的第5个标题

    sql语言有三种,分别是ddl,dml,dcl三种。

    delete和truncate都是删除表中的数据,区别在于,delete可以rollback而truncate不可以,delete可能产生碎片而truncate不会

    事物是一条或多个dml语句的组合,要么都成功,要么都失败。

    把表删除后会进入回收站,显示回收站的内容的命令,show recyclebin。查看回收站表的内容要使用表在回收站中的内容

    视图是一个逻辑的概念,数据仍然来源于表,视图的作用是用于简化查询(不用重复的写sql语句),但是视图并不可以查询性能。视图的定义中,with check option的作用,通过视图插入数据时,必须满足视图创建时的where条件。因此,并不建议通过视图插入更新删除数据。with read only 只能通过视图来读取数据。

    索引和表示单独存放的,删除索引不影响表。索引可以提高检索速度(按照索引列重新排序表的记录,这是可以使用算法的,当时具体实现是数据库管理系统内部实现的)一旦索引建立,系统会自动维护。

3, oracle和mysql中的事物机制

    oracle中事物默认是打开的,其结束的标志是分为两种。显式的:显示的提交commit 隐式的:1)执行DDL语言 2)正常退出

    oracle中的回滚是以事物为单位的,oracle中的执行回滚的方法有两种。显式的:显示的提交callback 隐式的:系统错误

    mysql是自动提交的,只要写一条dml语句,mysql就会自动提交

4,sql和sql*plus的区别

      SQL:一种语言,     关键字不可以缩写,   使用语句控制数据库中的表的定义信息和表中的数据; select,delete属于sql语句

      SQL*PLUS:一种环境,   关键字可以缩写,       命令不能改变数据库中的数据的值;ed,set,col属于sql*plus的命令

5,sql语句经典例题

     1) 找到员工表中工资最高的前三名(Top-N 问题,在oracle中,select出的每个集合都会有一个rownum 属性)

          select rownum, empno, ename, sal from

                    (select empno, ename, sal 

                        from emp

                        order by sal desc)

           where rownum <= 3

     2)oracle的分页问题,同样使用的是上一题中的top-N模型

           比如每页4条数据,取出第二页的数据

           select  r, empno, ename, sal from   //注意这里的r不能写成rownum,否则是第二层select出的结果集合的rownum,这里的r                                                                  //是第一层select出的结果集合的rownum

           from (                    

                    select rownum r, empno, ename, sal from

                                  (select empno, ename, sal 

                                      from emp

                                       order by sal desc)

                     where rownum <= 8

                    )           

               where r >= 5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值