Oracle 笔记01

oracle  ----数据库
emis  
DB  -----FILE
DBMS ----数据库管理系统 
IBM -----RDBMS ----关系型数据库
管理系统
DB  -----RDB 
DB2  
甲骨文----oracle----mysql 
关系型数据库
基于二维表
行 row    列 column
第一行  -----表头  header
每一行  -----具体的数据行


 数据库语言的分类:
 数据查询语言 -----sql----select
 数据操作语言 -----dml----insert delete
                          update
 事务控制语言 -----tcl----commit                           rollback
                          savepoint
 数据定义语言 -----DDL----create 
                          drop 
                          alter        
 DBA 
 数据控制语言 -----DCL----grant
                          revoke


 如何连接oracle 来查询数据
 SQLPLUS-----oracle 公司提供的访问数据
库的工具


 远程访问服务器上的oracle数据库
 172.30.1.6 


 telnet  172.30.1.6
 openlab
 open123


 telnet  192.168.0.20
 openlab
 open123
 telnet  192.168.0.23
 openlab
 open123
 telnet  192.168.0.26
 openlab
 open123
  
 oracle  10g   9i  8i
 SQL>    进入了oracle的操作环境


 查询数据------DB------二维表
 二维表是数据库存储数据的基本单元
 表中存储数据的基本单元是一行
 表名------二维表的标识
 表头------表的数据描述
 根据表名查看表结构-----desc 表名


 Name
------------------
ID          员工编号
LAST_NAME   姓
FIRST_NAME  名
USERID      #用户说明 
START_DATE  入职日期  
COMMENTS    员工备注
MANAGER_ID  领导的员工编号
TITLE       职位
DEPT_ID     部门编号
SALARY      月薪
COMMISSION_PCT 提成


查询 
选择:所有列都选中  部分行选中
投影:部分列选中    全部的行选中
表连接:数据来自于多张表  表和表之间建立
       连接关系


查询:
   A.from 子句
     1.从表中查询一个字段的数据
      select 字段 from 表;
      select salary  from  s_emp;
      750-2500$
      搭建环境:sql脚本
      1.把脚本上传对应的服务器
      2.运行脚本 
        @路经/脚本名 
     2.查询多个字段
       把first_name salary 列出来
       select  first_name,salary from s_emp;  
     3.把表中所有的字段的值列出来
       select id,first_name ....;
       *号可以代表所有的字段名
       select * from s_emp; 
     4.字段的数学运算
       算每个人的年薪
       select salary*12  from s_emp;
       可以用小括号改变的优先级
       12*salary+100
       12*(salary+100)
       1/2  0.5
       select 1/2  from dual;
     5.字段的别名
       紧跟在字段名后 
       select first_name name,12*salary yearsal  from s_emp; 
       别名中有特殊字符  空格
       select first_name name,
         12*salary "year sal"  from s_emp;
       双引号-----原样显示
     6.sql如何表达字符串
       sql中的字符串
       'a' '' ' '  'hello world'
       = 判断相等 
     7.字符串连接 ---oracle独特的 ||
       first_name last_name  salary
       select first_name,last_name,salary from s_emp;
       select first_name||last_name,salary from s_emp;
       在first_name 和last_name 加一个下划线
       select first_name||last_name,salary from s_emp;
       在first_name 和last_name 加一个
       单引号
       select first_name||'''||last_name,salary 
from s_emp;
       翻译不了单引号----转义单引号
       select first_name||''''||last_name,salary 
from s_emp;  
       两个单引号表达一个单引号
       在first_name 和last_name 之间
       拼接一个双引号 
       select first_name||''''''||last_name 
           from s_emp;
     8.NULL值的处理
       月薪*12*(1+提成/100)
       select salary*12,
       salary*(1+commission_pct/100)*12  
       from s_emp; 


       NULL值和任何值做运算都是NULL
       NULL值处理函数
       nvl(参数1,参数2)
       参数1 要处理的值或者字段
       参数2 如果参数1为NULL则返回参数2的值
             如果参数1不为NULL则返回参数1的值
       注意:参数1和参数2必须有相同的类型
       select salary*12,
       salary*nvl((1+commission_pct/100)*12,0)  
       from s_emp; //logic error
       NULL要尽早处理
       select salary*12,
       salary*(1+nvl(commission_pct,0)/100)*12 yearsal  
       from s_emp;
       把first_name,manager_id
       如果manager_id 为NULL则显示-1
       select first_name,nvl(manager_id,-1) 
           from s_emp;
     9.排重显示
       显示所有的工资 
       select salary from s_emp;
       不同的工资 -----distinct 
       select distinct salary from s_emp; 
       select distinct title from s_emp;
       多个字段的排重
       select distinct salary,id from s_emp;
       select first_name,last_name,title from s_emp;
       select distinct last_name,title 
       from s_emp;  
   B.where 子句-----限制行的返回
     1.符合where后条件的数据返回 
     不符合where后条件的就过滤掉
     查询工资大于1200的first_name,salary
     select first_name,salary 
         from s_emp
             where  salary>1200;
     2.字符串和数字的对比
     查询工资等于2500的人的first_name 
     select first_name,salary 
         from s_emp
             where salary=2500;
     查询first_name是Carmen的工资
     select first_name,salary 
         from s_emp
             where first_name='Carmen';
     select first_name,salary 
         from s_emp
             where first_name='carmen';
     //no rows selected
     字符串的值是区分大小写的
     字符串是大小写敏感
     'a'   'A' 是不同的
    3.sql中的运算(比较)符号
      1.逻辑比较运算符号
       =   < >  >= <=
      2.sql的比较运算符号
       between 值  and  值 
       表达一个闭区间[1500,2500]
       找出工资在[1500,2500]之间的
       first_name,salary 
       select first_name,salary 
           from s_emp 
      where  salary 
      between 1500 and  2500; 


       in (列表)
       列表  -----用逗号隔开的一组值
       找出id 是1或者是3或者是9的first_name,
       salary
       select first_name,salary 
           from s_emp  
      where id in(1,3,9); 
       in:列表中的顺序和数据组成相关
       把出现概率高的放前面 
       
       3.is  null ----判断一个值是不是NULL
       找出提成是NULL的first_name,salary
       select first_name,salary  from 
       s_emp where commission_pct is null;
       4.模糊查询
       like '字符串'
       龙  成龙   李小龙   龙孩儿  龙龙 
       找出所有的first_name 带a的
       like '通配字符串'
       sql的通配符
       %   代表任意字符 0-n
       _   代表一个任意字符 1(能且只能是一个)
       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%';
       数据字典表:
       user_tables   
       table_name  表名
       s_emp   s_dept  
       select table_name from  user_tables;
       把s_开头的表名列出来
       select table_name from  user_tables
       where table_name  like 's_%';
       数据字段表把所有数据的值 默认处理成
       大写
       select table_name from  user_tables
       where table_name  like 'S_%';
       通配符的转义:
       select table_name from  user_tables
       where table_name  like 'S\_%' 
       escape '\';
      3.条件连接符号
      c 和c++
       int  a=10;
       if(5<a<9){
          printf("shenma shidao");
       }
      与   and
      或   or 
      非   not 
      找出工资在[1500,2500]之间的
      first_name,salary
      select  first_name,salary from s_emp 
      where salary>=1500 and salary<=2500; 
      找出工资在(1500,2500)之间的
      first_name,salary
      select  first_name,salary from s_emp 
      where salary>1500 and salary<2500;
      找出id 是1或者是3或者是9的first_name,
       salary
      select first_name,salary from s_emp 
      where id=1 or id=3 or id=9;
      找出提成不是NULL的first_name,salary
      >              <=
      <              >=
      =              !=  ^=  <>
      between and    not between and 
      in             not in
      like           not  like
      is null        is not  null
      找出提成不是NULL的first_name,salary
      select first_name,salary from s_emp
      where manager_id   is  not null;
     4.条件的优先级问题
       那个sql语句查出的结果可能会多
       p37
   C.order by 子句
     数据的排序
     order  by 肯定是出现在sql语句最后
     order  by  排序标准  排序的形式
     (升序 asc  可以省略 默认的顺序  
       降序 desc 不可省略 反自然顺序)
     按照工资排序 显示id,first_name
     select id,first_name,salary from
     s_emp  order by salary;
     等价于
     select id,first_name,salary from
     s_emp  order by 3;
     等价于
     select id,first_name,salary from
     s_emp  order by salary asc;
     多字段排序 第一排序字段 第二排序字段
     按工资排序 显示first_name ,salary 
     如果工资相同则按照first_name 降序
     select id,first_name,salary  from 
     s_emp order by 
     salary asc,first_name desc;   
     第一排序字段不同则按照第一排序字段排序
     第一排序字段相同 则启用第二排序字段规则
     
   D.单行函数
     单行函数:sql语句影响多少行 就针对
            每一行返回一个结果 
     select upper(first_name),first_name
     from s_emp;
      select upper(first_name) from s_emp 
     where salary>3500;
     组函数:对一组数据处理之后得到一个结果
     count  统计个数
     select count(first_name) from s_emp;
     select count(first_name) from s_emp 
     where salary>1500;
     select count(first_name) from s_emp 
     where salary>3500;
     测试当行函数----测试表-----dual
     这个表是一个单行单列的表
     单行函数:
     1.字符串处理函数
       upper-----把数据变大写
       lower-----把数据变小写
       initcap ----把字符串的每个单词首字母
                   变大写 
       select initcap('one world  one dream')
       from dual;
       concat   ----连接两个字符串
       select concat('hello','world') from dual;
       substr(参数1,参数2,参数3)
       参数1 要截取的字符串
       参数2 从什么地方开始截取 第一个是1
       参数3 截取多长
       select substr('hello',0,3) from dual;
       select substr('hello',1,3) from dual;
       第二个参数可以是负数
       select substr('hello',-3,3) from dual;
       显示first_name 的后三个字符
       使用两种不同的方式完成
       length -------得到字符串的长度
       select length('hello')  from dual;


       select first_name,
       upper(substr(first_name,1,3))
       from s_emp;
   E.多表查询
   F.分组和组函数
   G.子查询 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值