Oracle常用操作
本帖最后由 likang2005608 于 2012-5-28 18:31 编辑1--创建表空间test01
CREATE TABLESPACE test01
DATAFILE 'F:\oracle11g\chinasoft\oradata\orcl\test01.dbf'
SIZE 500M;
2--使用create table创建表emp,并创建字段
CREATE TABLE emp(
empNo number(5) primary key,
empName varchar2(20) not null,
empPwd varchar2(20));
3--使用alter…add或alter drop插入或删除字段
alter table emp
add empcomp varchar2(50);
alter table emp
drop column empcomp;
语法:
ALTER TABLE table_name
ADD column_name datatype
ALTER TABLE table_name
DROP COLUMN column_name
例:
“Person”表中的原始数据:
LastName FirstName Address
Pettersen Kari Storgt 20
在Person表中增加一个名为City的字段:
ALTER TABLE Person ADD City varchar(30)
增加后表中数据如下:
LastName FirstName Address City
Pettersen Kari Storgt 20
移除Person表中原有的Address字段:
ALTER TABLE Person DROP COLUMN Address
移除后表中数据如下:
LastName FirstName City
Pettersen Kari
4--使用insert into向表emp中各字段插入数据
Insert into emp(empno,empname,emppwd,empaddr)
values(01,'tom','qqqq','shanxihanzhong');
例如:
“Persons”表中的原始数据:
LastName FirstName Address City
Pettersen Kari Storgt 20 Stavanger
运行下面的SQL插入一行数据:
INSERT INTO Persons
VALUES ('Hetland', 'Camilla', 'Hagabakka 24', 'Sandnes')
插入后”Persons”表中的数据为:
LastName FirstName Address City
Pettersen Kari Storgt 20 Stavanger
Hetland Camilla Hagabakka 24 Sandnes
运行下面的SQL插入一行数据在指定的字段上:
INSERT INTO Persons (LastName, Address)
VALUES ('Rasmussen', 'Storgt 67')
插入后”Persons”表中的数据为:
LastName FirstName Address City
Pettersen Kari Storgt 20 Stavanger
Hetland Camilla Hagabakka 24 Sandnes
Rasmussen Storgt 67
5--使用update更改已有字段字段值
update emp set empage=30 where empno=01;
update emp set empage=22 where empno=02;
update emp set empage=34 where empno=03;
update emp set empage=42 where empno=04;
update emp set empage=20 where empno=05;
update emp set empage=28 where empno=06;
update emp set emppwd='myking' where empno=05;
6--使用select查询数据表所有数据
select * from emp;
7--使用delete删除某一行的数据
DELETE FROM emp WHERE emppwd = 'dddd';
“Person”表中的原始数据:
LastName FirstName Address City
Nilsen Fred Kirkegt 56 Stavanger
Rasmussen Nina Stien 12 Stavanger
删除Person表中LastName为”Rasmussen”的数据:
DELETE FROM Person WHERE LastName = 'Rasmussen'
执行删除语句后”Person”表中的数据为:
LastName FirstName Address City
Nilsen Fred Kirkegt 56 Stavanger 本帖最后由 likang2005608 于 2012-5-28 18:32 编辑
8--使用order by按某字段降序(desc)或升序(asc)排列数据表
select * from emp order by empno desc;
9--返回where子句中条件为true的数据
select * from emp where emppwd='wwww';
10--使用and和or筛选数据
select * from emp where emppwd='gggg' or empage=20;
11--使用between...and...返回某范围的数据
select * from emp where empage between 20 and 30;
12--使用distinct返回某一列的唯一值
select distinct empage from emp;
13--指定群组或汇总的搜寻条件
语法:
SELECT column,SUM(column) FROM table
GROUP BY column
HAVING SUM(column) condition value
解释:
HAVING 通常与 GROUP BY 子句同时使用。不使用 GROUP BY 时,HAVING 则与 WHERE 子句功能相似。
原数据表emp
EMPNO EMPNAME EMPPWD EMPADDR EMPAGE
1 tom qqqq shanxihanzhong 30
2 kittey chinasoft shanxixian 22
3 jack wwww beijing 34
4 gaga rrtt shanghai 42
5 lucy myking hongkong 20
6 smils dddd xian 47
7 hello gggg shanghai 20
执行以下语句:
SELECT empaddr,SUM(empage) FROM emp
GROUP BY empaddr HAVING SUM(empage)>10;
查询结果如下:
EMPADDR SUM(EMPAGE)
shanxihanzhong 30
shanghai 62
hongkong 20
xian 47
beijing 34
shanxixian 22
14--使用join从两个或者以上的表中选取结果
用途:
当你要从两个或者以上的表中选取结果集时,你就会用到JOIN。
例:
“Employees”表中的数据如下,(其中ID为主键):
ID Name
01 Hansen, Ola
02 Svendson, Tove
03 Svendson, Stephen
04 Pettersen, Kari
“Orders”表中的数据如下:
ID Product
01 Printer
03 Table
03 Chair
用Employees的ID和Orders的ID相关联选取数据:
SELECT Employees.Name, Orders.Product
FROM Employees, Orders
WHERE Employees.ID = Orders.ID
返回结果:
Name Product
Hansen, Ola Printer
Svendson, Stephen Table
Svendson, Stephen Chair
15--使用drop table移除一个数据表
用途:
在数据库中移除一个数据表定义及该数据表中的所有资料、索引、触发程序、条件约束及权限指定。
语法:
DROP TABLE table_name
16--建立新的数据库.
语法:
CREATE DATABASE database_name
17--移除数据库
语法:
DROP DATABASE database_name 本帖最后由 likang2005608 于 2012-5-28 18:35 编辑
18—使用group by对结果集进行分组,常与汇总函数一起使用。
例如1
tttt原表:
NAME TTSEX AGE ADDRES COMP AANO
dfdf male 30 shenzhen gushjjdj 2
GGGUU famle 23 hanzhong jituan 3
HHHH male 20 MKhjhghg guodian 4
ggg famle 66 dd dd 7
rr male 33 guodian huawei 14
tt famle 24 guodian huawei 13
tuytu famle 28 gangtou guodian 6
pp male 22 guodian huawei 12
oo male 34 guodian guodian 11
likang famle 27 shanxihanzhong zhongruan 1
ll famle 23 shanxihan guodian 10
kk male 42 shenzhen zhongruan 5
jj famle 33 shenzhen guodian 9
hh male 25 dfdfsfsdfsd guodian 8
执行语句:
select addres,avg(age) from tttt group by addres having addres!='hanzhong'
结果如下:
ADDRES AVG(AGE)
MKhjhghg 20
shanxihanzhong 27
shanxihan 23
shenzhen 35
dd 66
dfdfsfsdfsd 25
guodian 28.25
gangtou 28
注意:having后面必须要接select后面的字段,group by后也只能接select后的字段,但是不能接分组函数,即不能接avg(age),只能接addres字段
下面的语句也是正确的
select addres,comp,avg(age) from tttt group by addres,comp having addres!='hanzhong'
例2:按照empaddr字段进行分组,求出每个empaddr的empage的合计在10以上的数据
SELECT empaddr,SUM(empage) FROM emp
GROUP BY empaddr HAVING SUM(empage)>10;
19--查询每行数据的rowid
数据表TTTT
NAME TTSEX AGE ADDRES COMP AANO
tuytu famle 28 gangtou huawei 6
HHHH male 20 MKhjhghg guodian 4
GGGUU famle 23 hanzhong jituan 3
dfdf male 30 shenzhen gushjjdj 2
likang male 27 shanxihanzhong zhongruan 1
执行语句:
select ROWID,name,age,ttsex FROM tttt
ROWID NAME AGE TTSEX
AAARU0AABAAAVeiAAC dfdf 30 male
AAARU0AABAAAVeiAAD GGGUU 23 famle
AAARU0AABAAAVeiAAE HHHH 20 male
AAARU0AABAAAVeiAAI tuytu 28 famle
AAARU0AABAAAVeiAAL likang 27 male
附:即使完全相同的两行数据rowid也会不一样。
20--查数据库版本
select * from v$version;
21--查数据库实例名
select name from v$database
22--执行一个SQL脚本文件(在sql-plus中)
SQL>start file_name 或
SQL>@ file_name
23--显示一个表的结构(在sql-plus中)
SQL> desc table_name 本帖最后由 likang2005608 于 2012-5-28 18:44 编辑
24--一个表中有重复数据,现在需要删除重复的数据只保留一条。
原表:
NAME TTSEX AGE ADDRES COMP AANO
tuytu famle 28 gangtou huawei 6
tuytu famle 28 gangtou huawei 6
tuytu famle 28 gangtou huawei 6
HHHH male 20 MKhjhghg guodian 4
GGGUU famle 23 hanzhong jituan 3
dfdf male 30 shenzhen gushjjdj 2
likang male 27 shanxihanzhong zhongruan 1
执行以下语句:
delete from tttt a where rowid!=(select max(rowid) from tttt c where a.name=c.name)
结果如下;
NAME TTSEX AGE ADDRES COMP AANO
tuytu famle 28 gangtou huawei 6
HHHH male 20 MKhjhghg guodian 4
GGGUU famle 23 hanzhong jituan 3
dfdf male 30 shenzhen gushjjdj 2
likang male 27 shanxihanzhong zhongruan 1
25--如何实现分页查询
原始表
NAME TTSEX AGE ADDRES COMP AANO
dfdf male 30 shenzhen gushjjdj 2
GGGUU famle 23 hanzhong jituan 3
HHHH male 20 MKhjhghg guodian 4
ggg famle 66 dd dd 7
rr male 33 guodian huawei 14
tt famle 24 guodian huawei 13
tuytu famle 28 gangtou guodian 6
pp male 22 guodian huawei 12
oo male 34 guodian guodian 11
likang famle 27 shanxihanzhong zhongruan 1
ll famle 23 shanxihan guodian 10
kk male 42 fdddf zhongruan 5
jj famle 33 dfdsfsdf guodian 9
hh male 25 dfdfsfsdfsd guodian 8
执行以下语句:
select rownum,a.* from (
select rownum d,t.* from tttt t)a
where d>0 and d<=10
结果如下:
ROWNUM D NAME TTSEX AGE ADDRES COMP AANO
1 1 dfdf male 30 shenzhen gushjjdj 2
2 2 GGGUU famle 23 hanzhong jituan 3
3 3 HHHH male 20 MKhjhghg guodian 4
4 4 ggg famle 66 dd dd 7
5 5 rr male 33 guodian huawei 14
6 6 tt famle 24 guodian huawei 13
7 7 tuytu famle 28 gangtou guodian 6
8 8 pp male 22 guodian huawei 12
9 9 oo male 34 guodian guodian 11
10 10 likang famle 27 shanxihanzhong zhongruan 1 本帖最后由 likang2005608 于 2012-5-28 20:24 编辑
26--sql考核实例
1、根据以下内容建表
表名:stutable
字段名:sno 字符型,定长,4个字符,主键 (学号)
sname 字符型,定长,12个字符,非空 (姓名)
ssex 字符型,变长,6个字符 (性别)
scity 字符型,默认为shenzhen (城市)
stotal 整型 (分数)
语句
create table stutable
(sno char(4),
sname varchar(12) not null,
ssex varchar2(6),
scity varchar(10) default'shenzhen',
stotal int,
primary key(sno))
2、插入记录
0001 zidane male shenzhen 98
0002 ronald male shenzhen 100
0003 elva female shenzhen 56
0004 Madonna female shenzhen 87
0005 Bryant male shenzhen 85
0006 Phelps male shenzhen 64
0007 elva female shenzhen 92
语句:
insert into stutable
--values(0001,'zidane','male','shenzhen',98)
values(0003,'elva','female','shenzhen',56)
3、基础查询
查询出所有记录;
select * from stutable for update
查询男生的学号与姓名;
select sno,sname from stutable where ssex='male'
查询分数低于70的记录;
select * from stutable where stotal<70
查询分数大于80且性别为女的记录;
select * from stutable where stotal>80 and ssex='female'
4、修改
将第3行、与第7行中的城市修改为hongkong
update stutable set scity='hongkong' where sno in (3,7)
将zidane的分数修改为96
update stutable set stotal=96 where sname='zidane'
5、删除/增加记录
删除Bryant这条记录
delete from stutable where sno=5
删除分数这一列
alter table stutable drop column stotal
增加ssalary字段,整型,默认为1000
alter table stutable add ssalary int default'1000'
6、删除表
select * from stutable
7、简述关系型数据库是如何管理数据?
如果在数据库管理系统中,根据用户定义的关系来存储、处理和管理数据库信息,这样的数据库管理系统称为关系型数据库管理系统。
关系型数据库以行和列的形式存储数据,以便于用户理解。这一系列的行和列被称为表,一组表组成了数据库。用户用查询(Query)来检索数据库中的数据。一个Query是一个用于指定数据库中行和列的SELECT语句。关系型数据库通常包含下列组件:
×客户端应用程序(Client)
×数据库服务器(Server)
×数据库(Database)
Structured Query Language(SQL),客户端和服务器端的桥梁,客户端用SQL来向服务器端发送请求,服务器返回客户端要求的结果。现在流行的大型关系型数据库有IBM DB2、Oracle、SQL Server、SyBase、Informix等。
关系型数据库管理系统中储存与管理数据的基本形式是二维表。 本帖最后由 likang2005608 于 2012-5-28 20:25 编辑
附件:如何彻底删除oracle
1、开始->设置->控制面板->管理工具->服务停止所有Oracle服务。
2、开始->程序->Oracle - OraHome81->Oracle Installation Products-> Universal Installer 卸装所有Oracle产品,
但Universal Installer本身不能被删除
3、运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口。
4、运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动这个列表,删除所有Oracle入口。
运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services,滚动这个列表,删除所有Oracle入口。
运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services,滚动这个列表,删除所有Oracle入口。
运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Services,滚动这个列表,删除所有Oracle入口。
5、 运行regedit, HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,删除所有Oracle入口。
6、开始->设置->控制面板->系统->高级->环境变量删除环境变量CLASSPATH和PATH中有关Oracle的设定
7、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标
8、删除\Program Files\Oracle目录
9、重新启动计算机,重起后才能完全删除Oracle所在目录
10、删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,
删除这个入 口目录及所有子目录,并从Windows 2000目录(一般为C:\WINNT)下
删除以下文件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。
11、WIN.INI文件中若有的标记段,删除该段
12、如有必要,删除所有Oracle相关的ODBC的DSN
13、到事件查看器中,删除Oracle相关的日志
说明:如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装,
安装时,选择一个新的目录,则安装完毕并重新启动后,老的目录及文件就可以删除掉了。 其实很强大嘛 回复 7# 易城之恋
有时候基础的东西用的才是最多的 学习了,有用
页:
[1]