• oracle初学者需要掌握的基本sql操作


     
     一:操作表
     创建表 
      create table t_user(  id number(3,0),name varchar(100),sex char(2),birthday date);  
     
       查看表 
      desc t_user;  // (show tables是MySQL的命令)
      
       添加列 
      alter table t_user add(age number(3));  // number精度是1-38
     
       修改列 
      alter table t_user modify(age number(4));
     
       删除列 
      alter table t_user drop column age;
     
       修改表名 
      rename t_user to t_info; // t_user 是之前的表名  t_info是修改之后的表名
     
       删除表 
      drop table t_user;
     
    二:操作数据 
     
     
       增加数据
     
      //没写的列就是没数据,字符型用单引号 当插入所有列的数据时 可以不写(id,name,sex,fellowship,birthday) values中可以写null不用符号
      insert into t_student( id,name,sex,fellowship,birthday) values (1,'韩梅梅','女',5000,to_date('1990-03-10','yyyy-MM-dd'));
     
     修改数据
      
      update t_student set sex = '男' where id = 2;//修改一个字段的值
      
      update t_student set sex = '男',name = '丽丽' where id = 2;//修改多个字段的值用逗号隔开
      
      update t_student set felloship = fellowship + 1000;//修改某个字段的值为在原值的基础上+1000
     
       删除数据 
     
      delete from t_student where id = 3; 
     
       查询数据
     
      select * from t_student; //查询所有字段的数据 * 代表所有意思
      
      select name,sex from t_student; //查询几个字段的数据 中间用逗号隔开
      
      select * from t_student where id = 1; //where关键字  后面接的是限定条件
          
      select * from t_student where name like '李%';//like关键字 意思是像 后面可以接%占位符  代表多个字符位置 
           
      select * from t_student where name like '李_';//_占位符 代表一个字符位置
     
      select * from t_student where birthday is null;//null 关键字 意思是值为空 要注意不能写成 = null 可以写成 is null 或者 is not null 
           
      select * from t_student where sex != '男';// != 关键字  意思是不等于 
           
      select * from t_student where sex <男> '';// <> 关键字  意思是不等于
      
      select * from t_student where fellowship < 5000 and fellowship > 2000; // < 关键字 意思是小于   > 关键字  意思是大于  <=  小于等于   >=大于等于
     
      select * from t_student where fellowship between 2000 and 5000; //between and  关键字 意思是介于xx和xx之间  包括边缘两个值(这个是包括2000和5000的)
           
      select * from t_student where name='李雷' or name = '韩梅梅';// or 关键字 意思是或者  
           
      select name,fellowship*0.8 from t_student;// 查询的时候可以将查询的值做处理之后输出  但是要注意null 不能参与运算
     
      select empno,ename,sal*12 + nvl(comm,0) from emp; // nvl 关键字 使用nvl解决null问题  就是当comm为空的时候 将它看成是0 这样就能参与运算了
     
      select name as 名字,fellowship  薪水 from t_student; //as 关键词  意思是取别名  可以省略不写 但是要跟原字段名直接留出至少一个空格位置
     
      select name||fellowship from t_student; //用于拼接查询结果
     
      select * from t_user where age = 11 or age = 13; //or 关键字 意思是或者
           
      select * from t_user where name in ('uzi','cool'); //in 关键字 意思是穷举 
     
      select * from t_user order by age asc/desc;// order by desc/asc 关键字 意思是排序 asc正序  desc倒序  不写默认asc
          
      select * from t_user order by age desc,id desc;// 先根据age升序排,遇到有相同的age时,按照id的降序排
     
      select distinct * from t_user ;  //distinct 关键字 意思是去重 * 代表所有列  也可以接单独的列名
          
      select distinct age from t_user; //去除某一列的重复
     
      select count(1) from t_user;  // 里面是数字的按照*处理//count() 关键字 意思是总数  常用写法count(1)  count(*)  count(字段名)
     
      select distinct * from t_user where name like '%i%'; // 原则是现根据where条件筛选出来结果再去重           
          
      select * from emp where hiredate > to_date('1981-01-01','yyyy-MM-dd'); //to_date 关键字 后面跟上时间及其格式(年月日)
     
      select * from t_user t where addtime > to_date('2019-3-20 8:00:00','yyyy-mm-dd hh24:mi:ss');// to_date 关键字 (年月日时分秒)
     
      select max(sal) from emp;  //max 关键字 意思是最大值  里面只能是一个参数(字段名)  里面不能是*
     
      select min(sal) from emp;  //min 关键字 意思是最小值 
     
      select avg(sal) from emp;  //avg 关键字 意思是平均值
     
      select sum(sal) from emp; //sum 关键字 意思是和
     
      select max(sal),min(sal) from emp;  //查最大值和最小值  当出现max min avg sum count的时候 后面不能直接跟搜索字段 格式不对 需要用group by
     
      select avg(sal),max(sal),deptno,age from emp group by deptno,age;//group by 关键字  意思是分组 用于对查询的结果分组统计  如果前面搜索字段有deptno, 那么group by  后面也必须接上deptno 有多少跟多少 用逗号隔开
     
      select avg(sal),max(sal),deptno from emp group by deptno order by deptno asc; // group by 和order by  同时出现的时候  group by 写前面  order by 写后面
     
      select deptno ,avg(sal) from emp group by deptno having avg(sal) <2000;//当使用group by的时候 如果需要写限制条件,要用having 而不能用where
     
      select * from emp e,dept d where e.deptno = d.deptno;  // 多表查询(笛卡儿积)  需要写明两个表的两个字段对应关系 并且最好要有别名
     
      select * from emp where deptno = (select deptno from emp where ename = 'SMITH'); // 子查询 是指嵌入在其他sql语句中的select语句,也叫嵌套查询  单行子查询   是指只返回一行数据的子查询语句
        
           select ename ,job ,sal ,deptno from emp where job in (select job from emp where deptno = 10); // 多行子查询  是指返回多行数据的子查询
     
      select ename,sal,deptno from emp where sal>all(select sal from emp where deptno=30);//在多行子查询中使用all操作符  ==  select ename,sal,deptno from emp where sal>(select max(sal) from emp where deptno =30);
     
      select * from (select rownum rn,A.* from (select * from emp) A ) where rn > 3; // 分页查询 简化之后也可以写成select * from emp where rownum > 3; (MySQL分页  select * from user limit 0,2   从第0行开始向后查2行)
     
           create table mytable (id,name,sal,job,deptno) as select empno,ename,sal,job,deptno from emp;//用查询结果创建新表
     
           insert into mytable (id,name,sal,job,deptno) select empno,ename,sal,job,deptno from emp; // 自我复制数据(蠕虫复制)
          
      合并查询  在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号union,union all ,intersect,minus
     
      union  该操作符用于取得两个结果集的并集.当使用该操作符时,会自动去掉结果集中重复行
        select ename,sal,job from emp where sal>2500 union select ename,sal,job,from emp where job = 'N';//必须保证前后列数量相同
      union all 该操作符与union相似,但是它不会取消重复行,而且不会排序.
        select ename,sal,job from emp where sal>2500 union all select ename,sal,job,from emp where job = 'M';
      intersect 使用该操作符用于取得两个结果集的交集.
        select ename,sal,job from emp where sal > 2500 intersect select ename ,sal,job from emp where job = 'm';
      minus 该操作符用于取得两个结果集的差集,它只会显示存在第一个集合中,而不存在第二个集合中的数据.
        select ename,sal,job from emp where sal>2500 minus select ename,sal,job from emp where job = 'M';
       
      表连接  内连接 外连接
        内连接实际上就是利用where子句对两张表形成的笛卡儿积进行筛选
        外连接 分为左外连接(左侧的表完全显示)  右外连接(右侧的表完全显示)  完全外连接 (完全显示两个表,没有匹配的记录置为空)
        select * from emp e left join dept d on e.deptno = d.deptno; (其中deptno列有1个被删除了 那行右侧那一行的就没有显示出来)
        select * from emp e right join dept d on e.deptno = d.deptno left join salgrade s on e.sal between s.losal and s.hisal;
        select * from emp e right join dept d on e.deptno = d.deptno;
        select * from emp e join dept d on e.deptno = d.deptno; // 完全外连接 join前面的可以省略FULL OUTER JOIN  full通常省略
     
       

  • 相关阅读:
    js 将图片连接转换称base64格式
    mysql性能优化-慢查询分析、优化索引和配置
    MySQL集群(三)mysql-proxy搭建负载均衡与读写分离
    MySQL集群(二)之主主复制
    MySQL集群(一)之主从复制
    JavaSE(八)之Map总结
    JDBC(二)之JDBC处理CLOB和BLOB及事务与数据库元数据获取
    JavaSE(八)之Collection总结
    JavaSE集合(八)之Map
    JavaSE(八)之集合练习一
  • 原文地址:https://www.cnblogs.com/flyinghome/p/12095355.html
Copyright © 2020-2023  润新知