玖叶教程网

前端编程开发入门

Oracle中的增、删、改和简单查询(oracle数据库中的增删改查)

1.更新(update)

  • 语法: update 表名 set 列名 =值,列名=值 where 条件

1.1 例子

  • 修改所有的老师的性别为男
    • update teacherinfo set tsex = '男';
  • 修改王老师的性别为‘女
'update  teacherinfo set tsex = '女'   
			where  tname ='王老师'; 


2.删除(delete)

  • 语法: delete from 表名 where 条件;

2.1 几种删除操作的区别

如删除所有的老师信息,有以下几种方式,他们的区别如下

  • truncate: 删除表中所有的数据,会自动地提交事务
truncate table teacherinfo;
  • delete :可以删除表中所有的数据,也可以删除条件指定的数据,需要手动提交事务删除满足条件的数据
delete  from  teacherinfo  where tname ='王老师'; 
  • drop : 删除整个表
delete from  teacherinfo_bak ; 


3.查询(select)

  • 语法: select * from 表名 where 条件;

3.1 基础查询

  • 查询出所有的员工信息
select * from  emp;
  • 查询出所有员工的编号,姓名,薪资
select empno,ename,sal from  emp;
  • 查询出所有员工的编号,姓名,薪资列名以中文显示
    • select empno 员工编号,ename as 员工姓名,sal "薪 资" from emp;
    • 注意:当为列取的别名中有特殊字符时,一定要用双引号把别名引起来,否则会报错找不到from关键字,Oracle中唯一出现双引号的地方。
  • 查询出部门为30号的员工信息并且岗位为 'SALESMAN'
select *from  emp   where deptno = 30  and job = 'SALESMAN'; 


3.2 查询结果过过滤重复的列

  • 单列去重:在要去重的列前面添加distinct关键字(Oracle独有),只针对这一列
  • 查询出所有员工的岗位,并去重select distinct job from emp;
  • 多列去重:

3.2.1 例子

  • 查询出所有员工的岗位,并且去重(单列去重)
select distinct job  from  emp;
  • 查询出所有员工编号,岗位,并且去重(多列去重)
select distinct empno,job  from  emp;


3.3 对查询结果排序

  • desc: 降序排序
  • asc:升序排序(不写排序方式,默认为升序
  • 如果有第一排序和第二排序,则所有排序条件跟着order by后面,并且用逗号隔开。
    • select empno , ename ,sal from emp order by sal desc, empno asc ;

3.3.1 例子

  • 查询出所有员工的编号,姓名,薪资,并且根据员工的薪资进行降序排序
select empno , ename ,sal  from emp  order by sal  desc, empno asc ;
  • 查询出所有员工的编号,姓名,薪资,并且根据员工的薪资进行降序排序,如果薪资相等则按照编号进行升序排序
select empno , ename ,sal  from emp  
		order by sal  desc, empno asc ;


3.4 Oracle中字符串的连接

  • 使用 || 符号连接字符串

3.4.1 例子

  • 查询出所有员工的编号,姓名,薪资 ,显示在一列当中
select  '员工编号:' || empno  ||  '员工姓名:' ||  ename  || '薪资:' ||  sal  
		员工信息   from  emp;


3.5 查询中的运算符

3.5.1 查询中运用算术运算符

要执行基于数值的运算,可以在SQL命令汇总使用算术表达式。

算数表达式有number数据列席的列名、数值常量和连接他们的算数操作符组成。算术操作符包括+(加)、-(减)、*(乘)、/(除)。

日期可以进行加、减操作,加减的是天数,但是不能进行乘除操作。

但日期相减后得到的是天数。

3.5.2 查询中运用比较操作符

  • 比较操作符用于比较两个表达式的值。比较操作符包括 =、!=、<、>、<=、>=、between---and(检查是否在两个值之间)、in(与列表中的值相匹配)、like(匹配字符模式)和 is null(检查是否为空)。
  • 查询出部门编号不等于30的员工信息
select * from  emp where deptno !=30;
select * from  emp where deptno <>30;

3.5.3 查询中的逻辑操作符

逻辑操作符用于组合多个比较运算的结果以生成一个或真或假的操作。逻辑操作符包括AND(与)、OR(或)、NOT(非)。

  • 查询出岗位'CLERK','MANAGER','SALESMAN'的员工
1、select * from  emp where job='CLERK' or  
		job ='MANAGER' or job ='SALESMAN';
2、select * from  emp 
	where job in('CLERK','MANAGER','SALESMAN');
  • 查询出岗位不为'CLERK','MANAGER','SALESMAN'的员工:
select * from  emp 
	where job  not in ('CLERK','MANAGER','SALESMAN');

3.5.4 查询中的日期类型

  • 日期类型跟数值类型相加,加的是天数
  • 日期类型跟日期类型相减,得到的是天数
  • 查询所有员工的编号,姓名,入职日期,转正日期;
    • select empno , ename ,hiredate,hiredate +90 from emp;

3.5.5 系统时间

  • oracle中使用sysdate()函数代表系统当前时间
  • 查询所有员工的编号,姓名,入职日期,工作年限
    • select empno , ename ,hiredate ,trunc((sysdate- hiredate)/365,2) from emp;


3.6 模糊查询(like)

  • _ : 一个下划代表一个字符
  • % : 一个%代表多个字符

3.6.1 例子

  • 查询员工姓名以‘S’开头的员工信息
select  * from  emp where ename  like  'S%';
  • 查询员工姓名中包含'O' 的员工信息
select * from  emp where ename  like  '%O%';
  • 查询出员工姓名第三位为’O‘ 的员工信息
select * from  emp where ename like '__O%';


3.7 exists

  • 存在则为true

3.7.1 例子

  • 查询出哪些部门下面存在员工
select * from dept d  where  not exists 
		(select 1  from  emp  where  deptno =d.deptno);


3.8 查询中的null

  • is null: 为空
  • is not null: 不为空
  • 此处的null不是Java中的null,即代表什么都没有,空字符串也不是null
  • Oracle中的null+任何值都等于null
  • 如果碰到非null列和null列相加,例如薪资和奖金相加,不能直接加,应该把为null的类当作0处理,可以使用nvl()函数处理。

3.8.1 例子

  • 查询出员工福利为空的员工信息
select * from  emp where comm is null;
  • 查询出员工福利不为空的员工信息
select * from  emp where comm is not null;

3.8.2 当查询的字段的值有null

  • 可以使用nvl(x, 0)函数把x的值由null变为0
  • 给员工福利为空的员工加100元的福利
update emp set comm = nvl(comm,0) +100 where comm is null;


3.9 in操作

  • 针对同一个条件列使用or时,就可以使用in,in里面的数据是或者关系。查询出工资为1000或者5000的员工信息


3.10 not in操作

  • 取反,相当于取where xxx != xxx or yyy != yyyy


3.11 between and操作

  • 当出现范围查询,如条件大于x,同时小于y时使用查询工资在1000到4000范围内的员工的薪资


笔试题:

1.exists和in的区别?

(1)因为exists是对外表做loop循环,每次循环在对内表(子查询)进行查询,所以当内表(子查询)大的时候,使用exists效率更高。

(2)in是把外表和内表做hash连接,先查询内表,再把内表结果和外表匹配,所以当外表大的时候,使用in效率更高(外表可以使用索引)。

(3)针对同一个条件列使用or时,就可以使用in,in里面的数据是或者关系。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言