zoukankan      html  css  js  c++  java
  • sql语句的编程手册(1)

    一、SQL PLUS 
    1 引言 

    SQL命令 
    以下17个是作为语句开头的关键字: 
    alter  drop  revoke 
    audit  grant  rollback* 
    commit*  insert  select 
    comment  lock  update 
    create  noaudit  validate 
    delete  rename 
    这些命令必须以“;”结尾 
    带*命令句尾不必加分号,并且不存入SQL缓存区。 

    SQL中没有的SQL*PLUS命令 
    这些命令不存入SQL缓存区 
    @  define  pause 
    #  del  quit 
    $  describe  remark 
    /  disconnect  run 
    accept  document  save 
    append  edit  set 
    break  exit  show 
    btitle  get  spool 
    change  help  sqlplus 
    clear  host  start 
    column  input  timing 
    compute  list  ttitle 
    connect  newpage  undefine 
    copy 

    --------- 
    2 数据库查询 

    数据字典 
    TAB 用户创建的所有基表、视图和同义词清单 

    DTAB 构成数据字典的所有表 

    COL 用户创建的基表的所有列定义的清单 

    CATALOG 用户可存取的所有基表清单 

    select * from tab; 

    describe命令 描述基表的结构信息 
    describe dept 

    select * 
    from emp; 

    select empno,ename,job 
    from emp; 

    select * from dept 
    order by deptno desc; 

    逻辑运算符 
    = !=或<> > >= < <= 
    in 
    between value1 and value2 
    like 


    in null 
    not 
    no in,is not null 

    谓词in和not in 
    有哪些职员和分析员 
    select ename,job 
    from emp 
    where job in ('clerk','analyst'); 

    select ename,job 
    from emp 
    where job not in ('clerk','analyst'); 

    谓词between和not between 
    哪些雇员的工资在2000和3000之间 
    select ename,job,sal from emp 
    where sal between 2000 and 3000; 

    select ename,job,sal from emp 
    where sal not between 2000 and 3000; 

    谓词like,not like 
    select ename,deptno from emp 
    where ename like 'S%'; 
    (以字母S开头) 
    select ename,deptno from emp 
    where ename like '%K'; 
    (以K结尾) 
    select ename,deptno from emp 
    where ename like 'W___'; 
    (以W开头,后面仅有三个字母) 
    select ename,job from emp 
    where job not like 'sales%'; 
    (哪些雇员的工种名不以sales开头) 

    谓词is null,is not null 
    没有奖金的雇员(即commision为null) 
    select ename,job from emp 
    where comm is null; 

    select ename,job from emp 
    where comm is not null; 

    多条件查询 
    select ename,job 
    from emp 
    where deptno=20 
    and job!='clerk'; 

    表达式 
    + - * / 

    算术表达式 
    选择奖金高于其工资的5%的雇员 
    select ename,sal,comm,comm/sal from emp 
    where comm>.05*sal 
      order by comm/sal desc; 

    日期型数据的运算 
    add two days to 6-Mar-87 
    6-Mar-87 + 2 = 8-Mar-87 
    add two hours to 6-Mar-87 
    6-Mar-87 + 2/24 = 6-Mar-87 and 2hrs 
    add 15 seconds to 6-Mar-87 
    6-Mar-87 + 15/(24*60*60) = 6-Mar-87 and 15 secs 

    列名的别名 
    select ename employee from emp 
      where deptno=10; 
    (别名:employee) 
    select ename,sal,comm,comm/sal "C/S RATIO" from emp 
      where comm>.05*sal 
      order by comm/sal desc; 

    SQL命令的编辑 
    list or l 显示缓冲区的内容 
    list 4 显示当前SQL命令的第4行,并把第4行作为当前行,在该行号后面有个*。 
    change or c 用新的内容替换原来在一行中第一次出现内容 
    SQL>c/(...)/('analyst')/ 
    input or i 增加一行或多行 
    append or a 在一行后追加内容 
    del  删除当前行 删除SQL缓冲区中的当前行 
    run  显示并运行SQL缓冲区中的命令 
    /  运行SQL缓冲区中的命令 
    edit  把SQL缓冲区中的命令写到操作系统下的文本文件, 
    并调用操作系统提供的编辑器执行修改。 

    ------------- 
    22 数据操纵 
    数据的插入 
    insert into dept 
      values (10,'accounting','new york'); 

    insert into dept (dname,deptno) 
      values ('accounting',10); 

    从其它表中选择插入数据 
    insert into emp (empno,ename,deptno) 
    select id,name,department 
    from old_emp 
    where department in(10,20,30,40); 

    使用参数 
    insert into dept 
      values(&deptno,&dname,&loc); 
    执行时,SQL/PLUS对每个参数将有提示用户输入 

    参数对应日期型或字符型数据时,可在参数上加引号,输入时就可不用引号 
    insert into dept 
      values(&deptno,'&dname','&loc'); 

    插入空值(NULL) 
    insert into dept 
      values(50,'education',null); 

    插入日期型数据 
    日期型数据缺省格式:DD-MON-YY 
    insert into emp 
    (empno,ename,hiredate) 
    values(7963,'stone','07-APR-87'); 

    系统时间:SYSDATE 
    insert into emp 
    (empno,ename,hiredate) 
    values(7600,'kohn',SYSDATE); 

    数据更新 
    update emp 
    set job='manager' 
    where ename='martin'; 

    update emp 
    set job='market rep' 
    where ename='salesman'; 

    update emp 
    set deptno=40,job='market rep' 
    where job='salesman'; 

    数据删除 
    delete emp 
    where empno=765; 

    更新的提交 
    commit 

    自动提交方式 
    set autocommit on 
    如果状态设为开,则使用inesrt,update,delete会立即提交。 

    更新取消 
    rollback 

    两次连续成功的commit之间的操作,称为一个事务 

    --------------- 
    4  创建基表、视图 
    创建基表 
    create table dept 
    (deptno number(2), 
    dname char(14), 
    loc char(13)); 

    数据字典会自动更新。 
    一个基表最多254列。 

    表名列名命名规则: 
    限制 
    第一个字符必须是字母,后面可任意(包括 $ # _ 但不能是逗号)。 
    名字不得超过30个字符。 

    唯一 
    某一用户的基表名必须唯一,不能是ORACLE的保留字,同一基表的列名互不相同。 

    使用双引号 
    如果表名用双引号括起来,则可不满足上述规则; 
    只有使用双引号,才能区别大、小写; 
    命名时使用了双引号,在以后的操作也必须使用双引号。 

    数据类型: 
    char(n)    (不得超过240字符) 
    number(n,d) 
    date 
    long    (最多65536字符) 
    raw    (二进制原始数据) 

    空值处理 
    有时要求列值不能为空 
    create table dept 
    (deptno number(2) not null, 
    dname char(14), 
    loc char(13)); 

    在基表中增加一列 
    alter table dept 
    add (headcnt number(3)); 

    修改已有列属性 
    alter table dept 
    modify dname char(20); 
    注:只有当某列所有值都为空时,才能减小其列值宽度。 
    只有当某列所有值都为空时,才能改变其列值类型。 
    只有当某列所有值都为不空时,才能定义该列为not null。 
    例: 
    alter table dept modify (loc char(12)); 
    alter table dept modify loc char(12); 
    alter table dept modify (dname char(13),loc char(12)); 

    创建视图 
    create view managers as 
    select ename,job,sal 
    from emp 
    where job='manager'; 

    为视图列名取别名 
    create view mydept 
    (person,title,salary) 
    as select ename,job,sal 
    from emp 
    where deptno=10; 

    with check option选项 
    使用with check option,保证当对视图插入或更新数据时, 
    该数据必须满足视图定义中select命令所指定的条件。 
    create view dept20 as 
    select ename,job,sal,deptno 
    from emp 
    where deptno=20 
    with check option; 
    在做下述操作时,会发生错误 
    update dept20 
    set deptno=30 
    where ename='ward'; 

    基表、视图的拷贝 
    create table emp2 
    as select * from emp; 

    基表、视图的删除 
    drop table 表名 
    drop view 视图名 
  • 相关阅读:
    Swoole 协程使用示例及协程优先级
    Swoole 协程简介
    Laravel Redis分布式锁的使用
    Laravel Redis分布式锁实现源码分析
    Swoole 中使用异步任务
    runtime相关面试
    oc笔试题
    属性关键字面试题
    KVC面试题
    KVO面试题
  • 原文地址:https://www.cnblogs.com/zwl12549/p/629241.html
Copyright © 2011-2022 走看看