Oracle数据库教程
三、操作数据库
3.1 插入数据(insert)
1.格式:
insert into 表名(列名…) values(值…)
案例:在dept表中,使用insert语句添加一条记录
insert into dept(deptno,dname,loc)
values(23,'bsl','berlin');
insert into dept
values(24,'qianfeng','beijing'); --表名后若不写列名,添加记录时要先desc dept,注意插入数据与列名的一一对应
/*
insert into dept
values(25,'tfl','hql'),(26,'testing','siceng');*/ --出错
2.批量插入数据
insert into 表名(列名)
select 查询语句
insert into emp_temp
select * from emp;
3.2 更新数据
update 表名 set 列=值 where 条件
例:把emp表中职务是销售员(SALESMAN)的工资上调20%
update emp
set sal=sal*1.2
where job='SALESMAN';
• update语句也可以与select语句结合使用。
例:把emp表中工资小于2000的雇员工资调整为管理者(MANAGER)的平均工资。
update emp
set sal=(
select avg(sal) from emp
where job='MANAGER')
where sal<2000;
update emp
set sal=(select avg(sal) from emp where job=‘MANAGER’)
where sal<2000;
3.3 删除数据
格式:delete from 表名 [where 条件]
例:删除姓名是”SMITH”个人信息
delete from emp where ename='SMITH';
注:使用delete语句删除数据时,oracle系统会产生回滚记录,所以这种操作可以使用rollback语句来撤销。
3.4 检索数据
用户对表或视图的操作就是检索数据,使用select语句实现。
select {
[ distinct] 列名...}
[into 表名] --查询的列重新生成一个新的表
from 表名
[where 选择条件]
[group by 列名]
[having 选择条件]
[order by 列名]
注意顺序
3.4.1 简单查询
• 简单查询: 只包含SELECT子句和FROM子句的查询
• 数据将按照SELECT子句后面指定的列名的顺序来显示
• 如果使用星号(*),则表示检索所有的列,数据按照表结构的
自然顺序来显示。
- 检索所有的列 *
案例1:
查询dept表中所有的数据
select * from dept;
案例2:
查询表dept和salgrade
select * from dept,salgrade;
- 检索指定的列
select 列名1,列名2… from 表名
案例:
在SCOTT模式下,检索emp表中指定列(job,ename,empno)
select job,ename,empno from emp;
补充:ROWID:行标识符,是Oracle数据库内部使用的隐藏列
案例:检索emp表指定的列job和ename,还包括rowid伪列
select rowid,ename,job,empno from emp;
- 带有表达式的select子句 ,算数运算符:+ - * / ()
案例:
检索emp表的sal列,把其值调整为原来的1.1倍
select sal*(1+0.1),sal from emp;
- 为列指定别名
两种:as关键字;直接指定列名
案例:
检索emp表的指定列(empno,ename,job),并使用as关键字为这些列指定中文别名(员工编号,员工名称,职务)
select empno as "员工编号",ename as "员工名称",job as "职务" from emp;
注:这里的别名as后必须用双引号“”,不能用单引号‘’,要注意区别连接符||
- 显示不重复的记录 distinct
3.4.2 筛选查询
• 在SELECT语句中,WHERE子句位于FROM子句之后,其语法格式
如下:
SELECT 列名
FROM 表名
WHERE 选择条件
3.4.3 条件查询:where关键词
格式:select 列名 | * from 表名 where 选择条件
例: 查询工资高于1200的有哪些人?
注意:在进行比较筛选的时候,字符串必须使用单引号标识。
select * from emp
where sal>1200;
ALL关键字
只有与所有的元素比较值都为true,才返回数据行。
案例:
使用all关键字过滤工资(sal)同时不等于3000,950,800的员工记录
select empno,sal,ename from emp
where sal !=all(3000,950,800);
注意:在进行比较筛选的时候,字符串和日期值必须使用单引号表示!
IS [NOT] NULL关键字
判断字段中是否存在内容:
1)内容为空:is null;
例:查询每月可以得到奖金的雇员信息
select * from emp
where comm is not null
2)内容不为空:is not null
例:查询没有奖金的雇员
select * from emp
where comm is null;
注意:如果查询出现多个条件,在where语句之后,条件与条件之间用and进行连接。
例:要求查询出,基本工资大于1500,同时可以领取奖金的雇员信息。
select * from emp
where sal>1500 and comm is not null;
OR关键字
满足其中的一个条件,使用关键字or来进行连接。
例:查询出基本工资大于1500,或者可以领取奖金的雇员信息。
SELECT * FROM emp
WHERE sal>1500 OR comm IS NOT NULL ;
NOT关键字
取反,把真的条件变为假,假的变为真
例:查询出基本工资不大于1500,同时不可以领取奖金的雇员信息。
SELECT * FROM emp
WHERE NOT