美文网首页
第一章Oracle数据库

第一章Oracle数据库

作者: 小猿人儿 | 来源:发表于2018-10-28 22:16 被阅读0次

    Oracle数据库体系结构

    系统

    实例

    表空间

    数据表

    数据文件

    用户

        用户的分类:

            系统管理员 sys 相当于mysql的root

            一般管理员  system

            普通用户

    总结:一个Oracle数据库系统可以创建多个数据库,每个数据库称为实例,在实例中可以分配多个表空间,每个表空间里可以创建多个数据表,而每个表空间里的表数据库都存储在一个数据文件里,要查询表空间里的表数据就需要在本实例下给表空间指定个用户,由用户去访问表空间的表及表的数据。

    简单查询

    SQL分组:

    DML(data Manipulation Language)数据库操作语言  用于检索或者修改数据

    DDL(data  Definition Language)数据定义语言,用于定义数据的结构,创建,或者修改是哪出数据的对象

    DCL(data  control  Language)数据控制语言 用于定义数据库的权限

    基本查询

    语法:select [distinct] * | 字段  [别名] [字段 [别名]]  from 表名成 [别名];

    位置:打开Oracle ---文件下方的小太阳-SQL窗口

    查询所有员工的所有数据

    select  * from emp;

    位置:选中查询语句,点击齿轮,执行即可

    修改显示别名(中文编号,姓名,职位)

    select  empno,ename,job from emp;

    select empno as "员工编号" ,ename "员工姓名”,job “职位” from ep;

    查询乱码

    执行select userenv("language") from  dual;---复制编码,---设置环境变量(变量名:NLS _LANG ,变量值:复制过来的编码)

    去重复行(职位)

    查询公司的所有职位

    select distinct job from emp;

    列拼接(编号,姓名,职位)

    要求输入结果为:编号是7369的雇员,姓名是Smith,工作是clerk

    select concat(concat(concat(concat(concat('编号是:7',empno),’的雇员,姓名是:’,ename,'工作是:'),job) from emp;

    =====select '编号是' || empno ||  '的雇员,姓名是:'||' , 工是:' || job   from emp;

    统计每人的年薪,年薪等于月薪*12+年终奖(sal月薪,comm年中奖,

    没有年终奖的没有统计出来,我们的第一个bug

    语法:select sal*12+comm from emp;

    使用nvl(v1,v2)处理空值V1不为空返回V1,为空返回V2

    select a.empno,a.sal*12+vvl( comm,0)  from  emp  a;

    单行单列虚拟表dual

    dual是一张只有一个字段,一行记录的表,一个单单列的虚拟表,用来测试一些数据值最方便

    查询当时时间   

    得到guid

    运算

    select sysdate from dual;

    select sys_guid() from dual;

    select 1+1 from dual;   -----计算1+1

    查询

    3.4.1关系运算

    >,<,>=,<=,!=(<>),=

    3.4.2逻辑运算

    逻辑运算符:and  or  not 

    3.4.3其他运算

    范围运算:between and ,like,in,not in, is null,is not null 

    查询出基本工资大于2000的所有雇员信息

    select   *  from  emp  where sal >2000;

    查询出所有职位是办事员的雇员信息

    select  * from emp where job='办事员';

    查询工资在2000-3000之间全部雇员信息(不包含)

    select *  from emp where sal >2000 and sal <3000;

    查询职位是办事员或者销售人员的全部信息

    select  *  from   emp  where job='办事员'  or  job=“销售人员”

    select   *  from   emp  where  job in ("办事员","销售人员");

    查询出所有不是办事员的雇员信息

    select *  from   emp  where job  not  in "办事员";

    select  *  from  emp   where job !="办事员"

    selecet  *  from  emp  where  job  <>"办事员";

    查询入职时间在1981/4/2-1999/1/1的员工信息

    select *  from   emp  where hirdate between  头 data("1981/4/2",yyyy/mm/dd)  and  to data("1999/1/1",yyyy/mm/dd);

    查询出所有没有奖金的雇员信息

    select *  from emp where  comm is  null;

    查询出雇员编号是1,2,3 的雇员信息

    select  *  from  emp   where emno in (1,2,3,);

    select  *  from  emp  where emno =1 or emno =2 or emno=3;

    查询出员工编号不是1,2,3的雇员信息

    select   *  from   emp  where  emno  not  in  (1,2,3);

    查询出雇员姓名以字母A开头的全部雇员信息

    select  *  form  emp where ename like "A %";

    查询出雇员姓名第二个字母是A的全部雇员信息

    select  *  from   emp   where ename like "_A%";

    查询出所有带有A 的全部雇员信息

    select  *  from emp where ename like "%A%";

    排序

    order by 卸载所有SQL语句最后,可以指定多个排序字段

    升序(ASC):默认,不写也是升序

    降序(DESC):用户需要指定,由大到小排序

    查询所有员工的雇员信息,要求按照工资升序排序

    select   *  from  emp   order  by  sal  【asc】;

    按照工资由高到低排序,如果工资相同,则按照雇佣日期由早到晚排序

    select *   from   emp  order by  sal  desc,hiredate;

    select   *  from  emp  order by sal desc,hiredate desc;

    排序中的空值问题

    当排序的字段有可能存在null,时就会产生问题,我们可以用null  first ,nulls  last 来指定null 值显示的位置。

    查询雇员的奖金 从低到高

    select  * from  emp  order  by  comm;

    select  *  from  emp order by comm first  nulls;

    原始数据需要加工才能使用

    Oracle  给我们提供了常用的处理数据的函数,就像JAvA的类库,不需要所有的东西都要我们自己实现。

    Oracle常用函数


    /*

      一、基本查询

      语法:

        select 字段

        from 表名

    */

    --查询所有员工的信息

    select * from emp;

    --查询显示指定列(编号、姓名、职位)

    select empno,ename,job from emp;

    --修改显示别名(中文编号、姓名、职位)

    select empno as "员工编号",ename "员工姓名",job 职位 from emp;

    select userenv('language') from dual;

    --所有职位

    select distinct job from emp;

    --编号是:7369 的雇员, 姓名是:smith,工作是:clerk

    select concat(concat(concat(concat(concat('编号是:7',empno),' 的雇员, 姓名是:'),ename),',工作是:'),job) from emp;

    select '编号是:' || empno || ' 的雇员, 姓名是:' || ',工作是:' || job from emp;

    --年薪

    --select a.empno,a.sal,a.comm,sal*12+comm "年薪" from emp a;

    select a.empno,a.sal,a.comm,sal*12+nvl(comm,0) "年薪" from emp a;

    select sal*12+decode(comm,null,0,comm) from emp;

    --单行单列虚拟表dual

    select 1+1 from emp where empno=7369;

    /*

          1、查询当时时间

          2、得到guid

          3、运算

    */

    常用函数

    单行函数

    影响每行记录的值,影响多少行返回多少行

    多行函数多条记录参与运算,而返回一条记录,

    单行函数主要分为以下五类:字符函数,数字函数,日期函数,转换函数,通用函数

    l返回字符串并将字符串的第一个字母变为大写,其他字母小写

    select   ename,initcap(ename)  from  emp;

    select   ename,lower(ename)  from  emp;

    length(ename)  求长度

    replace("A","B")  A替换B

    nvl(expr1,expr2):expr1 是否为空,如果为空, expr2,如果不为空,expr1的值。

    使用coalesce函数

        与nvl函数相比优点是:同时处理交替的多个值,如果第一个表达式为空,返回下个表达式,对其他的参数进行coalesce

    条件表达式:

    在SQL中使用if-then-else逻辑

    使用两种方法:

    case表达式

    decode函数

    case表达式在需要使用if-then-else逻辑时,

    case 带匹配的值  when  comparison_expr1 then return_expr1 

    [when comparson_expr2 then return_expr2 

    when comparison_exprn then return_exprn  

    else  else_expr]

    end

    练习:查询部门号为10,20,30的员工信息,若部门号为10,则打印其工资的1.1倍,20号部门,则打印其工资的1.2倍,30号部门打印其工资的1.3倍

        select ename,deptno,

        case deptno when 10 then sal * 1.1

        when 20 then sal * 1..2

        when 30 then sal * 1.3

        else sal 

        end 

    from emp;

    decode函数

    在需要使用if-then-else逻辑时

    decode(col | expression,search1,result1,

    [,search2,resut2,....,]

    [,default])

    练习:查询部门号为10,20,30的员工信息,若部门号为10,则打印其工资的1.1倍,20号部门,则打印其工资的1.2倍,30号部门打印其工资的1.3倍

    select enamel, deptno,decode(deptno,10,sal*1.1,20,sal*1.2,30,sal*1.3) from emp;

    多表查询

    主键:oid 唯一能标识一行的字段,非空,唯一特点。

    外键:可以在一张表中通过一个外键定位到另外一张表的主键

    1,笛卡尔集合:

    世界杯小组赛,采用笛卡尔集合的方式布局

    中国对  日本对  伊朗队,各对一场。

    第一个表的数据,与第二个表的数据一一匹配一次。

    select *  from emp,dept;

    多表查询,一定要避免笛卡尔集合,在一些表中,可能会存在一个外键,关联另一个表的主键,(或者是两张表当中有些)

    相关文章

      网友评论

          本文标题:第一章Oracle数据库

          本文链接:https://www.haomeiwen.com/subject/bvpmtqtx.html