7、Oracle 的安装和查询
Oracle 的安装和查询
Oracle是关系型数据库。用的是Oracle11g完整性产品。
Oracle的安装
详细安装看ppt。如果安装失败,请重新安装系统。
sys为超级管理员,需要通过选择 sysdba
system为普通管理员
scott为普通用户,第一次安装的时候,此用户还在锁定状态。可通过sys管理员
alter user scott account unlock 来解锁
Oracle用户的创建
必须要用System管理员去创建,身份选择 sysdba
Oracle11g和Oracle10g都默认自带一个scott用户,默认密码为:tiger
新建sql命令窗口
创建用户
create user 用户名 identified by 密码
给用户赋予权限
赋予用户登录权限
grant connect to 用户名
赋予用户操作资源权限(DML,DDL,DCL,DQL)
grant resource to 用户名
Oracle的登录
可在命令窗口执行。sqlplus命令
1.先连接到Oracle服务。sqlplus /nolog 不登录,只是连接服务。
2.连接sys管理员。conn sys(用户名)/123(密码)@orcl(实例,一个数据库)。第一次登录时要登录sys来解锁用户。
conn sys/123@orcl as sysdba (sys后面要跟dba)
3.Show user 查看当前用户是哪个。
4.set linesize 150 设置每行的显示
5.set pagesize 20 设置每列显示
6.passw 修改密码。
7.alter user scott account unlock|lock 解锁用户/锁定用户。
8.写入到本地文件:
1)、spool on 开始写入
2)、spool d:/test.txt 写到哪里
3)、select * from emp 查询结果
4)、spool off 提交,写入完毕
Oracle忘记用户密码
-
cmd打开window命令窗口
-
输入sqlplus /nolog
-
输入conn /as sysdba
-
输入alter user 要修改密码的用户名 identified by 新的密码
-
注意:
sqlplus不是内部命令时,环境变量出了问题。
scott用户(可用作测试是否安装成功)
一般系统会生成4张表。emp,dept,bonus,salgrade。
select * from tab tab是可查询生成的所有表
select * from emp(表名) 此语句是查询所有表信息。
desc 表名; 在命令窗口执行。
为表添加注解:comment on table emp is '雇员表';
为列添加注解:comment on column emp.empno is '雇员编号';
PL/SQL连接常遇见的问题
1.listener

例如这样的一个路径找:
D:\oracle\product\10.2.0\db_1\network\ADMIN\listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = d:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)//ORCL是你实例的名称
(ORACLE_HOME = d:\oracle\product\10.2.0\db_1) //写你安装的路径
(SID_NAME = ORCL)
)
)
2.Oracle ORA-12541:TNS:no listener错误解决方法
无法监听的情况

可以将listener这个服务调成开机自动启动。如果开机无法正常启动,就找到这个服务手动启动,并且刷新一下。
如果还不能正常启动。百度吧 -_- 。
SQL语言
结构化查询语言 (Structured Query Language),具有定义、查询、更新和控制等多种功能,是关系数据库的标准语言。
SQL分类:
数据操纵语言DML Data Manipulation Language : (对数据的增删查改) DML
SELECT INSERT UPDATE DELETE
数据定义语言DDL Data definition language : (对字段的操作) DDL
CREATE ALTER DROP RENAME TRUNCATE
数据控制语言DCL Data Control Language : (事物管理)DCL
GRANT REVOKE
Transaction:commit rollback savepoint
DML中的select语句
select-from-where 句型
select 后面跟的是要查询的字段名
from 后面跟的是要查询的表名
where 后面跟的是查询的条件
Alias别名:
Colums alias
Colums "alias"
Colums as alias
为什么要取别名?
为了能够更加准确的从哪张表里查询数据,表名太长的情况,每次写效率不高。
当遇到直接运算结果的时候,最好用别名,这样效率高,就不能在计算一次了。
distinct 必须放在开头
select distinct e.deptno from emp e;
多字段:都要重复才去除。
select distinct e.deptno,e.sal from emp e;
逻辑复合查询
--not and or 优先级从高到低
where后面的
select * from emp;
--=,!=,<>,<,>,<=,>=,any,some,all
-- != 与 <> 一样的
select e.*
from emp e
where sal <> 2000;
--any,some,all
-- >any,>some 大于(1000,2000,3000)其中最小就行了。
-- >all 要比最大(1000,2000,3000)要大的查出来。
select e.ename,e.sal
from emp e
where e.sal > all(1000,2000,3000);
--is null,is not null
--查询条件的null!=null,要想判断为null,用is null或者is not null。
--查询奖金为空的所有信息。
select e.*
from emp e
where e.comm is null;
--between x and y
--介于x和y之间的值。
--查询工资2000到3000之间的所有信息。
select e.*
from emp e
where sal between 2000 and 3000;
--in(list),not in(list)
-- in 查询部门是10的部门编号,not in 查询不是10的部门编号
select e.*
from emp e
where e.deptno in (10);
--exists(sub-query) 子查询有数据则表达式返回true
--如果exists后面的sql语句有数据,就返回,如果一条都没有就不执行。
select e.*
from emp e
where exists(select * from emp);
--like _ ,%,escape ‘\‘ _\% escape ‘\’
--模糊查询 用like关键字
-- % 表示有0到多个字符。 _ 表示只有一个字符。
select e.*
from emp e
where e.ename like '%A%';
--如果要查询里面包含%分号的字符,有特殊含义的字符时,这个时候需要用escape '/'
-- / 后面的字符就失去了特殊的含义。
select e.*
from emp e
where e.ename like '%/%%' escape '/';
--where
select e.ename,e.sal
from emp e
where e.sal in (800,1000,1250,3000);
select e.ename
from emp e
where e.ename in ('KING','SMITH');
--not and or
--优先级从高到低
select e.*
from emp e
where e.comm is not null;
select e.*
from emp e
where (e.deptno = 30 or e.deptno = 10) and e.sal > 2000;
作业01
--作业01
--1、查询部门编号为10的员工信息
select e.* from emp e where e.deptno = 10;
--2、查询年薪大于3万的人员的姓名与部门编号
select e.ename,e.deptno,e.sal from emp e where e.sal*12 > 30000;
--3、查询佣金为null的人员姓名与工资
select e.ename,e.sal from emp e where e.comm is null;
--4、查询工资大于1500 且 and 含有佣金的人员姓名
select e.ename,e.sal from emp e where e.sal > 1500 and e.comm is not null;
--5、查询工资大于1500 或 or含有佣金的人员姓名
select e.ename,e.sal from emp e where e.sal >1500 or e.comm is not null;
--6、查询姓名里面含有 S 员工信息 工资、名称
select e.sal,e.ename from emp e where e.ename like '%S%';
--7、求姓名以J开头第二个字符O的员工姓名的与工资
select e.ename,e.sal from emp e where e.ename like 'JO%';
--8、求包含%的雇员姓名
select e.ename from emp e where e.ename like '%/%%' escape '/';
--9、使用in查询部门名称为 SALES 和 RESEARCH 的雇员姓名、工资、部门编号
--select e.ename,e.sal,e.deptno,d.dname
--from emp e,dept d
--where e.deptno = d.deptno and d.dname in ('SALES','RESEARCH');
select e.ename,e.sal,e.deptno
from emp e
where e.deptno in ( select d.deptno from dept d where d.dname in ('SALES','RESEARCH'));
--10、使用exists查询部门名称为SALES和RESEARCH 的雇员姓名、工资、部门编号。
select e.ename,e.sal,e.deptno
from emp e
where exists (select d.dname from dept d where e.deptno = d.deptno and d.dname in ('SALES','RESEARCH'));
排序
order by
desc 倒序排序
asc 升序排序(默认)
--排序,多个字段后面用分号,先第一个字段重复,就执行第二个
--desc 倒序排序
--asc 升序排序
select e.ename,e.sal
from emp e
order by e.sal asc,e.comm desc;

浙公网安备 33010602011771号