现在的位置: 首页 > 综合 > 正文

oracle笔记系列(一)

2014年01月25日 ⁄ 综合 ⁄ 共 3508字 ⁄ 字号 评论关闭

(1)基础查询
SQL> --清屏
SQL> host cls
SQL> --Linux上清屏: host clear
SQL> --查询该用户下的表
SQL> show user; 
USER 为 "SCOTT"
SQL> select * from tab;
TNAME                          TABTYPE  CLUSTERID                               
------------------------------ ------- ----------                               
DEPT                           TABLE                                            
EMP                            TABLE                                            
BONUS                          TABLE                                            
SALGRADE                       TABLE                                            
SQL> --查询员工的信息
SQL> desc emp;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)

SQL> select * from emp;
SQL> --设置行宽
SQL> set linesize 150
SQL> /
SQL> --设置列宽
SQL> col sal for 9999
SQL> col ename for a8
SQL> 解锁用户
  alter user scott account unlock;
SQL> --设置pagesize
SQL> set pagesize 20
SQL> set feedback off   --关闭     “已选择14行。”提示                                                          
SQL> set feedback on
SQL> /                                                                  
SQL> --通过列名查询员工信息
SQL> select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;
SQL> -- * 和列名的方式哪个性能好?Oracle9i后,可以认为一样 之前是列名免解析较快,
SQL> -- 查询员工的编号,姓名和薪水
SQL> select empno,ename,sal fomr emp;
SQL> --修改sql                                                   
                                                                      
SQL> /
     EMPNO ENAME      SAL     SAL*12       COMM SAL*12+COMM                                                                                          
---------- -------- ----- ---------- ---------- -----------                                                                                          
      7369 SMITH      800       9600                                                                                                                 
      7499 ALLEN     1600      19200        300       19500                                                                                          
SQL> --关于空值
SQL> /*
SQL> 1. 如果表达式中含有空值,则整个表达式为空
SQL> 2. 在SQL中,null!=null
SQL> */
SQL> --1. 使用滤空函数nvl(a,b): 当a为空时,返回b
SQL> ed
已写入 file afiedt.buf
  1  select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0)
  2* from emp
SQL> /
     EMPNO ENAME      SAL     SAL*12       COMM SAL*12+NVL(COMM,0)                                                                                   
---------- -------- ----- ---------- ---------- ------------------                                                                                   
      7369 SMITH      800       9600                          9600                                                                                   
      7499 ALLEN     1600      19200        300              19500                                                                                  
      7521 WARD      1250      15000        500              15500                                                                                   
SQL> -- 2. 在SQL中,null!=null
SQL> --查询奖金为空的员工信息
SQL> select *
  2  from emp
  3  where comm=null;

未选定行
SQL> --过滤掉空值
SQL> select *
  2  from emp
  3  where comm is null;

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                  
-------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                  
      7369 SMITH    CLERK           7902 17-12月-80       800                    20                                                                  
      7566 JONES    MANAGER         7839 02-4月 -81      2975                    20                                                                  
SQL> --使用别名

SQL> --c命令
SQL> 2
  2* fomr emp
SQL> c /fomr/from
  2* from emp
SQL> /
     EMPNO ENAME      SAL                                                                                                                            
---------- -------- -----                                                                                                                            
      7369 SMITH      800                                                                                                                             
SQL>  select empno,ename,sal
  2   fomr emp;
 fomr emp
      *
第 2 行出现错误: 
ORA-00923: 未找到要求的 FROM 关键字 

SQL> --ed命令
SQL> ed
已写入 file afiedt.buf
  1   select empno,ename,sal
  2*  from emp
SQL> /
     EMPNO ENAME      SAL                                                                                                                            
---------- -------- -----                                                                                                                            
      7369 SMITH      800                                                                                                                             
      7499 ALLEN     1600                                                                                  
SQL> --算术表达式:查询员工的信息,要求有编号,姓名,月薪,年薪
SQL> select empno,ename,sal,sal*12 from emp;
     EMPNO ENAME      SAL     SAL*12                                                                                                                 
---------- -------- ----- ----------                                                                                                                 
      7369 SMITH      800       9600                                                                                                                 
                                                                                                                                               
SQL> -- 查询员工的信息,要求有编号,姓名,月薪,年薪,奖金,年收入
SQL> select empno,ename,sal,sal*12,sal*12+comm
  2  from emp;
     EMPNO ENAME      SAL     SAL*12 SAL*12+COMM                                                                                                     
---------- -------- ----- ---------- -----------                                                                                                     
      7369 SMITH      800       9600                                                                                                                 
      7499 ALLEN     1600      19200       19500                                                                                                     
SQL> ed
已写入 file afiedt.buf
  1  select empno,ename,sal,sal*12,comm,sal*12+comm
  2* from emp

SQL> select empno,ename,sal,sal*12,comm,sal*12+comm
  2  from emp;
     EMPNO ENAME      SAL     SAL*12       COMM SAL*12+COMM                                                                                          
--------- -------- ----- ---------- ---------- -----------                                                                                          
      7499 ALLEN     1600      19200      300    19500                                                                                                                                                            
SQL> ed
已写入 file afiedt.buf
  1  select empno as "编号",ename "姓名",sal 月薪,sal*12 年薪,comm,sal*12+nvl(comm,0) 年收入
  2* from emp
SQL> /
      编号 姓名     月薪    年薪    COMM    年收入                                                                                    
      7369 SMITH             800       9600       9600                                                                                          
SQL> --问题:有无双引号的区别?双引号中可以有特殊字符
SQL> ed
已写入 file afiedt.buf
  1  select empno as "编号",ename "姓名",sal 月 薪,sal*12 年薪,comm,sal*12+nvl(comm,0) 年收入
  2* from emp
SQL> /
select empno as "编号",ename "姓名",sal 月 薪,sal*12 年薪,comm,sal*12+nvl(comm,0) 年收入                                         *
第 1 行出现错误: 
ORA-00923: 未找到要求的 FROM 关键字 
SQL> host cls
SQL> --查询员工的部门号
SQL> select deptno from emp;                                                                             
SQL> --distinct去掉重复行
SQL> select distinct deptno from emp;
SQL> --问题:如果distinct后面有多列,会是什么结果?
SQL> select disticnt deptno,job from emp;
     select disticnt deptno,job from emp                                                                                                                         
SQL> --distinct作用于多列:只有这些列均相同,才认为是重复行
SQL> --oracle中的连接符: ||
SQL> --类似concat
SQL> -- 显示Hello World
SQL> select concat('Hello',' World') from dual;
CONCAT('HEL                                                                                                                                -----------------                                                                                                                                                 
Hello World                                                                                                                                          
SQL> --dual表:Oracle的一个伪表,方便测试
SQL> select 3+2 from dual;
SQL> --查询员工的信息:****的薪水是****
SQL> select ename||'的薪水是'||sal from emp;
    ENAME||'的薪水是'||SAL                                                                                                                               
----------------------------------------------------------                                                                                           
SMITH的薪水是800     

抱歉!评论已关闭.