51Testing软件测试论坛

标题: Oracle常用操作 [打印本页]

作者: likang2005608    时间: 2012-5-28 17:08
标题: 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
本帖最后由 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
本帖最后由 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
本帖最后由 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
本帖最后由 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
本帖最后由 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文件中若有[ORACLE]的标记段,删除该段
12、如有必要,删除所有Oracle相关的ODBC的DSN
13、到事件查看器中,删除Oracle相关的日志
说明:如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装,
安装时,选择一个新的目录,则安装完毕并重新启动后,老的目录及文件就可以删除掉了。
作者: 易城之恋    时间: 2012-7-11 14:39
其实很强大嘛
作者: likang2005608    时间: 2012-7-18 09:28
回复 7# 易城之恋


有时候基础的东西用的才是最多的
作者: xiao_long_ing    时间: 2012-7-19 15:28
学习了,有用




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2