Oracle的本地操作
一. 进入命令窗口
a. sqlplus---以命令行的方式进入数据库连接
b. sqlplusw---以窗口的形式启动命令行工具--但本机用不了主用a方法
二. 环境的设置—set命令
a. set linesize 数字---每行显示的长度
b. set pagesize 数字---每页显示的数据条数
三. 对错误命令的修改方式
a. ed---可以创建出文本文件在其中进行编写
b. @---加上文本文件的名字可以直接执行
c. 在本地创建的文件被读取时,需要加上绝对路径,但文件后缀名为sql时可以直接省略后缀名
d. “/”---可以重复执行上一条命令
四. 用户的切换—conn 用户名/密码 [as sysdba]
a. 切换成sys这个超级管理员时需要加上as sysdba,否则切换不成功
b. 不同用户进行数据间的访问需要加上对应用户名称以示区分---用户名.表名(scott.emp)
c. 查询当前正在连接的用户---show user
五. 获取一个数据库中全部表的名称—select * from tab;
数据库的更新
a. insert(增加),update(修改,更新),delete(删除)
b. 复制表---create table 复制表名 as select * from 被复制表名;
c. clear scr;---清屏
d. to_date('2008-08-08','yyyy-mm-dd')
e. delete删除是删除表内数据,表本身还在---delete from 表名;
f. drop table 表名;---删除表
g. select job,count(empno)
from emp where job
in
(select job from emp group by job having min(sal) > 1500)
---从emp表中按照job排序得到最小工资大于1500的工作
group by job;
---从emp表中查询在in中的对应的工作,查询出工作和工作的人数按照工作类型排序
表单建立和删除
a. 常用的数据类型
i. varchar(varchar2)---表示字符串,长度限制在225
ii. number---number(n)---表示整数,数字长度是n,可以使用int,number(m,n)---表示一个小数,小数数字长度为n,整数长度为m-n,可以使用float
iii. date---表示日期
iv. clob---表示大对象,大文本数据,一般可以存放4G的文本
v. blob---表示大对象,二进制数据,可以存放4G
b. 表的建立
i. create table 表名称(字段名称 字段类型 [default默认值],……)
ii. 复制表---create table 表名称 as (子查询),如果子查询写的是一个永远不可能成立的条件,则表示只是复制表的结构,不复制表的内容
c. 表的修改
i. 新增---alter table 表名称 add(列的名称 列队类型 default 默认值,……)
ii. 修改---alter table 表名称 modify(列的名称 列的类型 default 默认值,……)---在修改表的结构时,数据库中对应的字段里有一个很长的数据,则无法将表的长度缩小
d. 表的重命名
rename命令可以为表重命名,仅oracle中使用
rename 表名称 to 新表名称
e. 表的删除
drop table 表名称---删除表
截断表
当清空一张表的数据,同时不需要回滚,立刻释放资源可以使用截断表
truncate table 表名称;
约束的分类及使用—使用约束可以保证数据库表中数据的完整性
a. 约束分为五种
i. 主键约束---表示是一个唯一的标识,本身不能为空
ii. 唯一约束---一个表中只允许建立一个主键约束,但其他列希望不出现重复值时,使用唯一约束
iii. 检查约束---检查一个列内容是否合法
iv. 非空约束---内容不为空
v. 外键约束---在两张表中进行约束操作
b. 主键约束---primary key---可以在建立表时指定,也可以通过constraint指定一个约束的名字---constraint person_pid_pk primary key(pid)
c. 非空约束---not null---表示字段的内容不能为空
d. 唯一约束---unique---表示一个字段的内容事务唯一的,其他列不允许重复---也可以通过constraint指定一个约束的名字---constraint person_name_uk unique(name)
e. 检查约束---check---使用检查约束来判断一个列中插入的内容是否合法,列如年龄的取值范围---check(age between 0 and 150)---错误提示采用了自动命名并累加的方式,也可以通过constraint指定一个约束的名字---constraint person_age_ck check(age between 0 and 150)
f. 外键约束---foreign key---以上的约束是针对一张表的约束,而外键约束是针对两张表的约束
i. 主-外键约束---可以保证两张表的数据的完整性,不会出现找不到对应数据的情况---constraint person_book_pid_fk foreign key(pid)---子表的字段(外键) references person(pid)---父表主键
ii. 在子表中设置的外键在父表中必须是主键
iii. 删除时要先删除子表,再删除父表---但有强制删除的方法---drop table book cascade constraint
iv. 父表中的数据删除时,可以自动删除对应的子表可以进行设置使用级联删除---constraint person_book_pid_fk foreign key(pid) references person(pid) on delete cascade
g. 修改约束
i. 为表添加约束---alter table 表名称 add constraint 约束名称 约束类型(约束字段)
ii. 删除约束---指定约束的名称---alter table 表名称 drop constraint 约束名称
h. rownum---列号/伪列---本身采用自动编号的形式出现
i. select rownum ,ename from emp;---不能使用*来查询
ii. select rownum, ename from emp where rownum <= 5;
iii. 进行中间的截取操作---只能使用子查询
---select * from (select rownum m,empno,ename from emp where rownum<=10) temp where temp.m>5;
数据查询
简单查询,限定查询
a. 简单查询的标准语句
i. 别名的作用----给列起一个别名简化过长的列名、表名,便于使用
ii. 基本查询语句格式---select [distinct] (* or 具体的列名 or 具体的列名 别名) from 表名称 别名;
b. 使用distinct关键字来去掉重复的查询列
i. select distinct 字段 from 表名;
ii. 注意:同时查询多个列时,需要保证所有列都有重复值才能消除掉,否则任意一列中没有重复数据,则其他列的对应数据(即使在其他列是重复数据)也不会被消除。
c. 按限定格式进行查询输出
i. 使用orcale提供的字符串连接操作,使用双竖线“||”表示
ii. 加入一些显示信息,其固定信息要用单引号“‘’”括起来
iii. 示例:select '编号是:' || empno || '的雇员,姓名是:' ||ename|| ',工作是:' || job from emp;
iv. 四则运算的使用
d. 使用限定查询---where子句的使用
i. 表示内容不为空(null)---where 字段 is not null
ii. 同时满足多个筛选条件需要使用 and 操作符进行条件连接
iii. 表示或的操作符是:or ---表示多个条件满足其中一条即可
iv. 取反的操作符是:not XXX---XXX表示限定条件
v. 范围查询的限定语句:where 字段 between 最小值 and 最大值----最大值最小值也是包含在结果内
vi. 日期的范围查询---where 字段 between '1-1月 -81' and '31-12月 -81'---日期需要加上单引号,该日期格式为特定格式
vii. 注意:在orcale中对于大小写的区分是敏感的,一些条件需要区分大小写
viii. 指定查询范围时需要使用--- in 操作符进行限定查询---字段 in (值1,值2,值3……)或者not in ()
---in操作符也可以使用字符串信息进行范围查询
ix. 注意:关于in操作符在指定的查询范围内,添加不存在的内容,不会影响语句的查询结果
x. 模糊查询 like 的使用---查询字符需要添加单引号“‘’”
1) “%”:可以匹配任意长度的内容的通配符
2) “_”:可以匹配一个长度的内容的通配符
xi. 不等号的表示方式:"<>" , "!="
e. 对查询结果进行排序---order by---在sql关键字中执行顺序排在最后from---where---group by---having---select--order by
i. 默认排序为升序,降序需要添加 desc
ii. 多个排序条件的使用---条件之间以逗号“,”隔开,会先满足第一个条件,在第一个条件相同时,再按照第二个条件排序。
多表查询
a. 关联字段:使用字段进行关联的操作,可以去掉笛卡尔积
select e.ename,e.sal,d.dname,s.grade,m.ename,m.sal,ms.grade
from emp e,emp m,salgrade s,dept d,salgrade ms
where e.deptno=d.deptno and e.sal between s.losal and s.hisal
and e.mgr=m.empno and m.sal between ms.losal and ms.hisal
select e.ename,e.sal,d.dname,decode(s.grade,1,'第五等工资',2,'第四等工资',3,'第三等工资',4,'第二等工资',5,'第一等工资'),
m.ename,m.sal,decode(ms.grade,1,'第五等工资',2,'第四等工资',3,'第三等工资',4,'第二等工资',5,'第一等工资')
from emp e,emp m,salgrade s,dept d,salgrade ms
where e.deptno=d.deptno and e.sal between s.losal and s.hisal and e.mgr=m.empno and m.sal between ms.losal and ms.hisal
b. 左、右连接
i. select e.empno,e.ename,d.deptno,d.dname,d.loc from emp e,dept d where e.deptno(+)=d.deptno;
ii. (+)在前面的表上表示以后面的表为主,即为右连接
iii. (+)在=左边表示右连接,(+)在=右边表示左连接,
e. Sql1999(了解)
i. cross join---交叉连接---产生笛卡尔积
ii. natural join---自然连接---自动进行关联字段的匹配
iii. using子句:直接关联的操作列---select * from emp e join dept d using(deptno) where deptno =30;
iv. on子句:自己编写连接条件
子查询
在一个查询的内部包括另外一个查询
a. 所有的子查询必须在括号内“()”中编写
b. 子查询在操作中分三类
i. 单列子查询---返回的结果是一列的一个内容
ii. 单行子查询---返回多个列
iii. 多行子查询---返回多条记录
c. in,any,all
i. in---指定查询范围---求出每个部门的最低工资的雇员信息,返回值会是多个,可以使用in指定一个操作范围---select * from emp where sal in(select min(sal) from emp group by deptno);---从emp表中得到数据按照deptno进行分组,求出每组的sal最小的值
ii. any
1) =any时
2) >any时---比最小大的,即去掉最小的
3) <any时---比最大小的,即去掉最大的
iii. all
1) >all---比最大的值大
2) <all---比最小的值小