likang2005608 发表于 2012-5-28 17:08:26

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:19:48

本帖最后由 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:20:10

本帖最后由 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:37:10

本帖最后由 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 18:44:49

本帖最后由 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 18:45:53

本帖最后由 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文件无法删除的情况,则不用理会,重新启动,开始新的安装,
安装时,选择一个新的目录,则安装完毕并重新启动后,老的目录及文件就可以删除掉了。

易城之恋 发表于 2012-7-11 14:39:36

其实很强大嘛

likang2005608 发表于 2012-7-18 09:28:51

回复 7# 易城之恋


有时候基础的东西用的才是最多的

xiao_long_ing 发表于 2012-7-19 15:28:45

学习了,有用
页: [1]
查看完整版本: Oracle常用操作