zoukankan      html  css  js  c++  java
  • Oracle 笔记 day01

    Oracle day1
    20120214
    =======================
    宁丽娟 ninglj@tarena.com.cn

    程序员
    DBA

    一.什么是数据库
    软件 = 数据仓库 + 管理软件
    Database : 数据库
    DBMS: DataBase Management System

    Oracle
    DB2(IBM) Sybase(sybase)
    mysql(Oracle)  sqlserver(MS)
    sqlite(嵌入式数据库)
    access

    二.访问数据库
    1.telnet远程登录到数据库服务器
    C:>telent 192.168.0.26
    openlab/open123
    (这个步骤和数据库无关)

    2.sqlplus连接数据库
    sqlplus是数据库的命令行客户端工具
    % sqlplus
    数据库的帐号/密码: openlab/open123
    SQL> 

    3. 表(table)
    1)建表
    --最长30个字符.
    --数字,字符,日期
    create table users_ning(
    id number,
    pwd char(4),
    name varchar(20),
    phone varchar(30),
    email varchar(50)
    );

    number  数字类型
    char / varchar 字符类型
           varchar2
    date    日期类型

    2)插入数据
    insert into users_ning
    values(1001, '1234', 'liucs',
    '13800000000',
    'liucs@tarena.com.cn');

    SQL语句: Structured Query Language
    SQL>create table  建表
    SQL>insert into...插入数据
    SQL>select ...from... 查询
    SQL>commit  提交

    三.查询数据
    1)准备数据
    create table dept_ning1(
    deptno number(2),
    dname varchar2(20),
    location varchar2(20)
    );
    insert into dept_ning1
    values(10, 'developer', 'beijing');
    insert into dept_ning1
    values(20, 'finance', 'shanghai');
    insert into dept_ning1
    values(30, 'sales', 'guangzhou');
    insert into dept_ning1
    values(40, 'operation', 'tianjin');
    commit;
    select * from dept_ning1;

    create table emp_ning100(
    empno number(4) primary key,
    ename varchar2(20),
    job varchar2(20),
    salary number(7,2),
    bonus number(7,2),
    hiredate date default sysdate,
    manager number(4),
    deptno number(2)
    );

    insert into emp_ning100
    values(1001, 'zhangwj', 'Manager',
    10000, 2000, '12-MAR-10', 1005, 10);
    --继续插入其他9条记录
    insert into emp_ning100
    values(1011, 'tom', null,
    null, null, null, null, null);
    --如果null值太多,可以简写为:
    insert into emp_ning100
    (empno, ename) values(1011,'tom');

    commit;

    --复制表
    --将emp_ning100复制为emp_ning200
    create table emp_ning200
    as
    select * from emp_ning100;
    2)学习查询语句
    --按薪水排序,由高到低
     select * from emp_ning
     order by salary desc;

    --null值被视作最大.

    --按入职时间排序
    select ename, hiredate from emp_ning
    order by hiredate

    public Integer nvl(
        Integer bonus,Integer value){
     if (bonus == null)
      return value;
     else
      return bonus;
    }
    --查询员工的月收入,处理null值
    --如果薪水或奖金是null值,按0计算
    --NVL(EXPR1,EXPR2) 若EXPR1是NULL,则返回EXPR2,否则返回EXPR1.

    select ename, salary, bonus,
    nvl(salary, 0) + nvl(bonus, 0)
    as month_sal
    from emp_ning
    order by salary desc;

    select ename,job from emp_ning
    where upper(job) = 'ANALYST';
          lower(job) = 'analyst';
    --in (list)
    select ename, job
    from emp_ning
    where lower(job) in ('analyst',
    'programmer', 'clerk');

    --查找部门10或部门20的员工
    select ename from emp_ning
    where deptno in (10, 20);

    --查找薪水在5000到8000之间的员工
    --包括5000和8000.
    select ename, salary
    from emp_ning
    where salary >= 5000
      and salary <= 8000;
    --[5000, 8000] 闭区间
    select ename, salary
    from emp_ning
    where salary between 5000
          and  8000;

    //
    --
    #
    <!-- 注释 -->

    空值:
    select ename, salary
    from emp_ning
    order by salary desc;

    select ename
    from emp_ning
    where salary is null;

    select ename
    from emp_ning
    where salary is not null;

    select count(*) from user_tables;
    --所有名字中包含emp的表的个数
    select count(*) from user_tables
    where table_name like '%EMP%';

    --查找书名里包含java的书
    select book_name from books
    where lower(book_name)
          like '%java%';

    select ename, salary,
        salary * 0.12345678 as tax
    from emp_ning;

    round : 四舍五入
    trunc : 截取


    张三  6  5  7  8    6.5
    李四  6  3  7  7    5.75 -> 6
                        5.2  -> 5

    日期:
    sysdate: 系统时间
    '14-FEB-12' : oracle默认的日期格式
    DD-MON-RR
    now: 2012年
             YY      RR
    95年    2095    1995
    05年    2005    2005

    select to_char(sysdate,
    'yyyy-mm-dd hh24:mi:ss')
    from dual;

    select ename, hiredate,
    to_char(hiredate, 'yyyy-mm-dd') h
    from emp_ning;


    附加:
    一,摘要:在自己电脑上用PL/SQL查询时间报错,报错代码是:ORA-01843: not a valid month

    这是因为客户端是中文环境,格式mon就不能用英文的月份写法,必须用中文的“六月”
    如果不想修改sql,那么请修改nls_date_language。详情请继续往下看!

    执行下面的语句时报错了:

    select months_between ('01-SEP-95','11-JAN-94') from dual;

    我把日期中的英文月份改为汉字后执行就ok

    select months_between ('01-9月-95','11-1月-94') from dual;
    19.6774193548387

    二, 下来我们思考如何才能让日期格式为英文月份的语句正确执行呢?
     

    --用sql语句修改客户端的nls_date_language即可:

    SQL> alter session set nls_date_language='american';

    Session altered

    到这里就设置好了,下面的语句就能正确执行了!


    三,日期格式修改
    SQL> select sysdate from dual;

    SYSDATE
    ---------------
    19-OCT-09
    SQL> alter session set nls_date_format="MON-DD-YYYY";

    Session altered.
    SQL> select sysdate from dual;

    SYSDATE
    -----------------
    OCT-19-2009

    SQL>

    小结:
    1.DDL(Data Definition Language):
     create / drop
    2.DML(Data Manipulation language):
     insert / update / delete
    3.DQL(Data Query Language):
     select
    4.TCL(Transaction Control Language)
     commit


    --java程序员
    SCJP: sun certification
          java programmer
    OCJP: Oracle ....

    google: scjp 模拟题

    --DBA
    OCP: Oracle certification Professor


     

  • 相关阅读:
    web 开发之js---js 调用视频播放
    web 开发之js---js 实现网页中播放wav的一种方法(flash播放器)
    web 开发之js---js 实现文本高亮
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_4_OutputStreamWriter介绍&代码实现
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_3_转换流的原理
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_2_编码引出的问题_FileReader读取GBK格式文件
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_7_练习_对文本的内容进行排序
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_6_BufferedReader_字符缓冲输入流
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_5_BufferedWriter_字符缓冲输出流
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_4_缓冲流的效率测试_复制文件
  • 原文地址:https://www.cnblogs.com/ChenJw/p/2358121.html
Copyright © 2011-2022 走看看