百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

Oracle中的增、删、改和简单查询(oracle 删除和修改语句)

sinye56 2024-09-23 23:51 3 浏览 0 评论

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里面的数据是或者关系。

相关推荐

RHEL8和CentOS8怎么重启网络

本文主要讲解如何重启RHEL8或者CentOS8网络以及如何解决RHEL8和CentOS8系统的网络管理服务报错,当我们安装好RHEL8或者CentOS8,重启启动网络时,会出现以下报错:...

Linux 内、外网双网卡路由配置

1.路由信息的影响Linux系统中如果有多张网卡的情况下,如果路由信息配置不正确,...

Linux——centos7修改网卡名

修改网卡名这个操作可能平时用不太上,可作为了解。修改网卡默认名从ens33改成eth01.首先修改网卡配置文件名(建议将原配置文件进行备份)...

CentOS7下修改网卡名称为ethX的操作方法

?Linux操作系统的网卡设备的传统命名方式是eth0、eth1、eth2等,而CentOS7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名全自动的、可预知的...

Linux 网卡名称enss33修改为eth0

一、CentOS修改/etc/sysconfig/grub文件(修改前先备份)为GRUB_CMDLINE_LINUX变量增加2个参数(net.ifnames=0biosdevname=0),修改完成...

CentOS下双网卡绑定,实现带宽飞速

方式一1.新建/etc/sysconfig/network-scripts/ifcfg-bond0文件DEVICE=bond0IPADDR=191.3.60.1NETMASK=255.255.2...

linux 双网卡双网段设置路由转发

背景网络情况linux双网卡:网卡A(ens3)和网卡B(...

Linux-VMware设置网卡保持激活

Linux系统只有在激活网卡的状态下才能去连接网络,进行网络通讯。修改配置文件(永久激活网卡)...

VMware虚拟机三种网络模式

01.VMware虚拟机三种网络模式由于linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有v...

Rocky Linux 9/CentOS Stream 9修改网卡配置/自动修改主机名(实操)

推荐...

2023年最新版 linux克隆虚拟机 解决网卡uuid重复问题

问题描述1、克隆了虚拟机,两台虚拟机里面的ip以及网卡的uuid都是一样的2、ip好改,但是uuid如何改呢?解决问题1、每台主机应该保证网卡的UUID是唯一的,避免后面网络通信有问题...

Linux网卡的Vlan配置,你可能不了解的玩法

如果服务器上连的交换机端口已经预先设置了TRUNK,并允许特定的VLAN可以通过,那么服务器的网卡在配置时就必须指定所属的VLAN,否则就不通了,这种情形在虚拟化部署时较常见。例如在一个办公环境中,办...

Centos7 网卡绑定

1、切换到指定目录#备份网卡数据cd/etc/sysconfig/network-scriptscpifcfg-enp5s0f0ifcfg-enp5s0f0.bak...

Linux搭建nginx+keepalived 高可用(主备+双主模式)

一:keepalived简介反向代理及负载均衡参考:...

Linux下Route 路由指令使用详解

linuxroute命令用于显示和操作IP路由表。要实现两个不同子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该...

取消回复欢迎 发表评论: