oracle_day01

来源:互联网 发布:西安搜索引擎优化排名 编辑:程序博客网 时间:2024/06/05 17:52
一.数据存储
   FILE
   DB  
   DBMS 
              
二.现在主流数据库管理系统
   RDBMS   关系型数据库管理系统
   RDB     关系型数据库
   (基于二维表的数据库 )
   
   表头
   字段
   字段名
   字段值
   行
   列
三.操作数据库的语言分类
   数据检索语言    select  (sql)  
   数据定义语言    create   drop alter
                   (DDL)
   数据操作语言    insert  delete  update
                   (DML)
   事务控制语言    commit  rollback savepoint
                   (TCL) 
   数据控制语言    grant   revoke (了解)
四.现在主流关系型数据库
   oracle    甲骨文  oracle9i oracle10g 11g 
   sqlserver 微软    
   DB2       IBM    
   
   mysql    SUN---oracle   
               
五.操作oracle数据库
   sqlplus 
   
   telnet   IP
   telnet   192.168.0.26
   telnet   192.168.0.23 
   openlab
   open123
   
   sqlplus 
   openlab
   open123
   SQL>!clear      清屏幕
   SQL>exit        退出
   
   查看一张表的表结构
   SQL>desc   表名;
   SQL> desc  s_emp;
 Name                                      Null?    Type
 ----------------------------------------- -------- ---------------
 ID      员工编号                                  NOT NULL NUMBER(7)
 LAST_NAME 姓                                  NOT NULL VARCHAR2(25)
 FIRST_NAME 名                                        VARCHAR2(25)
 USERID     用户编号                                        VARCHAR2(8)
 START_DATE 入职日期                                        DATE
 COMMENTS   备注                                         VARCHAR2(255)
 MANAGER_ID 领导的员工编号                                        NUMBER(7)
 TITLE      职位                                        VARCHAR2(25)
 DEPT_ID    部门编号                                        NUMBER(7)
 SALARY     月薪                                        NUMBER(11,2)
 COMMISSION_PCT 提成                                    NUMBER(4,2)
  
 可以得到表头 和 表头中的字段名     
 这个地段能不能 没有值    
 字段对应的类型    number 
                   varchar2
                   date
                         
六.查询数据 
   6.1 from 子句
      6.1.1  如何从表中查询一个字段的值
      select 字段名  from  表名;
      把s_emp 中salary对应数据查询出来
      select  salary  from  s_emp;     
      6.1.2  如何从表中查询多个字段的值
      select 字段名1,字段名2  from  表名;
      从s_emp 表中把 id 和 对应salary
      查询出来。
      select  id,salary from s_emp;
      6.1.3 如何把s_emp 表中所有的数据都
      查询出来?
      select  id,first_name,last_name 
          ....;
      可以使用 * 号代表所有的字段名 
      select * from  s_emp;     
      
      6.1.4 字段的数学运算 
      +  -  *  / 
      select  salary,salary+200 
          from s_emp;                                                     
      列出每个员工的月薪 求一天的平均
      (22)工资 再列出年薪(12)
      select  salary,salary/22,salary*12
          from  s_emp;
      6.1.5 字段 或者表达式的别名
      表达式 或者 字段的后面 可以起另外一
      个名字。       
      select  salary sal,salary/22 svgsal,
          salary*12  yearsal
          from  s_emp;
      一个字段 或者表达式 只能有一个别名
      select  salary sal,salary/22 svgsal,
          salary*12  year  sal
          from  s_emp;
      可以使用双引号 把一个别名看成一个
      整体,使别名原样显示。
      select  salary "Sal",salary/22 svgsal,
          salary*12  "year  sal"
          from  s_emp;
      6.1.6 sql中字符串的表达
      使用单引号 引起一串字符字符 
      ''  
      ' ' 
      'a' 
      'hello world' 
      select  first_name,last_name 
          from s_emp;
      6.1.7 字符串的拼接
      select  first_name last_name 
          from s_emp;// logic error
      字符串拼接符号  ||
      字符串 || 字符串 || 字符串
      select  first_name||last_name
          from s_emp;    
      在这两个字段之间拼接一个下划线
      select  first_name||'_'||last_name
          from s_emp; 
      this  is   
      this's 
      在姓名之间 拼接一个单引号 
      %d  %lf  %%   转义
      select  first_name||''''||last_name
          from s_emp; 
      在姓名之间 拼接两个单引号 
      select  first_name||''''''||last_name
          from s_emp; 
      select  first_name||''''||''''
          ||last_name
          from s_emp; 
      6.1.8 NULL值的处理
         如果一个字段上 没有设置值 则这个
         字段的值是NULL值。
         select id,manager_id from s_emp;
         
         计算年薪 希望是 按照
         月薪*12 + 月薪*12*提成/100 
         月薪*12*(1+提成/100)
         id   年薪  新的年薪
         select  id,salary*12,
           salary*12*(1+commission_pct/100)
             from s_emp;    
         NULL 值和任何值做运算结果都是NULL
         
         如何进行NULL值的处理 ?
         nvl(par1,par2) 
            当par1的值为NULL时 就返回par2
            的值。par1不为NULL 就返回par1。
         par1和 par2 类型必须一致。
         
         select  id,salary*12,
         nvl(salary*12*
           (1+commission_pct/100),0)
             from s_emp;  // logic error
         NULL 值应该尽早处理
        select  id,salary*12,
        salary*12*
           (1+nvl(commission_pct,0)/100)
             from s_emp;  
       显示 id first_name  manager_id 
       如果manager_id 是NULL 就显示成 -1
       select  id,first_name,
           nvl(manager_id,-1)
           from s_emp;
      6.1.9 数据的排重显示 
      select salary from s_emp; 
      排重关键字   distinct 
      select distinct salary from s_emp;
      多字段的排重
      select  title,salary from s_emp;  
      select distinct title,salary 
          from s_emp;   
      select distinct id,salary 
          from s_emp;
          
     6.2 where 子句
        6.2.1 统一数据库的编程环境
            把脚本上传到服务上
                ftp  IP
                openlab
                open123
                put   文件名 
            运行脚本     
                SQL>路径名/脚本名.sql
        6.2.2 什么是where子句
            where 子句又叫条件子句 作用是
            限制表中的数据返回。
            符合where条件的数据被选中,不符合
            where条件的数据被过滤掉。
        6.2.3 语法
            select  字段名1,字段名2
                from  表名 
                    where  条件;
            select  id,first_name 
                from s_emp;
            select  id,first_name 
                from s_emp
                    where 1=1;                        
            select  id,first_name 
                from s_emp
                    where 1=2;
        6.2.4 举例
        把工资等于1450 的员工信息显示出来
        显示 id  first_name salary
        select id,first_name,salary
            from s_emp 
                where  salary=1450; 
        把工资小于1450 的员工信息显示出来
        显示 id  first_name salary                     
        select id,first_name,salary
            from s_emp 
                where  salary<1450;                     
        把工资大于1450 的员工信息显示出来
        显示 id  first_name salary 
        select id,first_name,salary
            from s_emp 
                where  salary>1450; 
        6.2.5 字符串条件的表达
        查询s_emp 表 找 first_name 叫
        Carmen 的员工  列出 id  
        first_name  salary 
        select id,first_name,salary
            from s_emp 
                where first_name='Carmen';
        字符串条件表达式 要使用单引号
        字符串的值 要注意大小写 
        SeLeCt Id,First_name,Salary
            from s_emp 
                where first_name='Carmen';
        6.2.6 常见的条件表达
        
        =  !=  > <  >= <= 
        
        6.2.7 sql中提供的运算符 
        6.2.7.1表达一个闭区间的 [a,b]
        where  字段  between a and  b
        工资在[1450,2500] 之间的员工信息
        列出id  first_name salary 
        select  id,first_name,salary
            from  s_emp  
                where salary between 1450 
                and  2500;  
        6.2.7.2表达一个字段的值 出现在一个范围内
        where  字段 in (a,b,c,d);
        找出 id 是1 或者是 5 或者是11
        的员工 列出  id  first_name 
        select  id,first_name
            from  s_emp  
                where id in (1,5,11);
        找出部门编号 在 33或者 34 或者50
        部门的员工 列出 id ,first_name,
        dept_id。
        select  id,first_name,dept_id 
            from s_emp  
                where dept_id in(33,34,50);
        select  id,first_name,dept_id 
            from s_emp  
                where dept_id in(50,34,33);
        对最终结果没有影响
        但可能对效率产生很大的影响。
        (应该把出现概率高的放前面
         概率低的放后面 )        
        
        6.2.7.3模糊查询   
        where  字段  like  '通配串';
        找出姓李的人
            李克强  李嘉诚  李宁 
        带龙的
        李小龙 成龙   小龙女  龙年
        
        通配串中需要有通配符 
        %      代表0-n个任意字符
        _      一个任意字符 
        
        where   name  like '李%'      
        where   name  like  '%龙%'
        
        找出s_emp 表中 first_name 中带
        a的 列出first_name 
        select   first_name 
            from s_emp 
               where first_name like '%a%';
        列出第二个字符是a的 first_name 
        select   first_name 
            from s_emp 
               where first_name like '_a%';       
        
        desc  user_tables;
        table_name  
        s_emp   s_dept 都是以S_ 开头
        要求查询出 所有的S_开头的表名
        select  table_name 
            from  user_tables
                where table_name 
                like 'S\_%' escape '\';                           
        要求查询出 所有的S__开头的表名
         select  table_name 
            from  user_tables
                where table_name 
                like 'S\_\_%' escape '\';                        
                                
       6.2.7.4 NULL 值的判断
       where   字段  is  NULL;
       查询提成是 10 的员工信息 列出
       id  first_name  commission_pct 
       select  id,first_name,commission_pct
           from  s_emp 
               where commission_pct=10;
       查询提成不是 10 的员工信息 列出
       id  first_name  commission_pct        
       select  id,first_name,commission_pct
           from  s_emp 
               where commission_pct!=10;  
       找出提成是NULL的员工 
       列出id  first_name  commission_pct
       select  id,first_name,commission_pct
           from  s_emp 
               where commission_pct is null;            
       列出 manager_id 是NULL的 员工
       信息列出 id  salary  manager_id 
       select id,salary,manager_id 
           from s_emp 
               where  manager_id is null;            
      6.3 逻辑条件 连接符号
         and    a  and b
         查询s_emp 表中工资在[1450,2500)
         列出 id  first_name salary
         select  id,first_name,salary
             from s_emp 
                 where salary>=1450  
                 and  salary<2500;     
         or     a   or  b 
         找出 id 是 1  或者 5 或者是 11
         列出 id  first_name 
         select  id,first_name 
             from s_emp
                where id=1 or  id=5 or id=11;
         not
         =       !=  ^=  <>
         >       <=
         <       >=
         between a and b  not between a and b
         in      not in 
         like    not like 
         is null   is  not null 
         
         查询 manager_id 不是NULL的员工
         列出 id  first_name manager_id
         select  id ,first_name,manager_id 
             from  s_emp  
                 where manager_id is not null;   
         
       6.4条件的优先表达 
       select  salary,12*salary+1000
           from s_emp;
       select  salary,12*(salary+1000)
           from s_emp;      
         
七.数据的排序 
   7.1  概念
   可以按照一定的标准 对数据进行排序。
   7.2  语法
   order  by  排序标准  排序方式;
   (只能出现在sql语句最后 ) 
   select  id,salary from s_emp;
   select  id,salary from s_emp
       order by salary; 
   select  id,salary from s_emp
       order by salary desc;
  
  
   id     name   
   1      a
   2      b
   3                                                                                                         
0 0
原创粉丝点击