Oracle命令行工具基本操作及SQL 命令
上一篇 / 下一篇 2012-07-13 11:39:21 / 个人分类:数据库
这是个Oracle提供的最常用,也是最好用的sql命令执行工具。
2.1.1. 登录
C:> sqlplusw
C:> sqlplus /nolog
SQL> conn username/password@Oranet
如,system登录
SQL> conn system/systempwd@whfc
如果要行一些只有sysdba才能执行的命令,必须以sysdba特权登录:
SQL> conn sys/syspwd@whfc as sysdba
2.1.2. 创建表空间
必须有CREATE TABLESPACE 特权的用户才能创建表空间,比如system
和sys用户。
SQL> conn system@whfc01
请输入口令:
已连接。
SQL> create tablespace ts_test datafile '/data2/oradata/ciis/ts_test01.dbf' size
10m ;
表空间已创建。
2.1.3. 添加数据文件
SQL> alter tablespace ts_test add datafile '/data2/oradata/ciis/ts_test02.dbf' size
10m ;
表空间已更改。
2.1.4. 查看表空间大小
SQL> DESC DBA_DATA_FILES
名称 是否为空? 类型
-------------------- -------- --------------
FILE_NAME VARCHAR2(513)
FILE_ID NUMBER
TABLESPACE_NAME VARCHAR2(30)
BYTES NUMBER
BLOCKS NUMBER
STATUS VARCHAR2(9)
RELATIVE_FNO NUMBER
AUTOEXTENSIBLE VARCHAR2(3)
MAXBYTES NUMBER
MAXBLOCKS NUMBER
INCREMENT_BY NUMBER
USER_BYTES NUMBER
USER_BLOCKS NUMBER
SQL> SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024 M
2 FROM DBA_DATA_FILES
3 GROUP BY TABLESPACE_NAME;
TABLESPACE_NAME M
-------------------- ----------
DEVELOP1 8000
DEVELOP2 14336
DEVELOPINDEX 4106
DRSYS 20
EXAMPLE 145.625
INDX 25
ODM 20
SYSTEM 1024
TOOLS 10
TS_CI_13 4094
TS_CI_32 4094
TS_CI_33 2047
TS_II_13 2047
TS_II_32 2047
TS_PI_1301 2047
TS_PI_1302 2047
TS_PI_3201 2047
TS_TEST 20
UNDOTBS1 5048
USERS 25
XDB 38.125
已选择21 行。
SQL> SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024 M
2 FROM DBA_DATA_FILES
3 WHERE TABLESPACE_NAME='TS_TEST'
4 GROUP BY TABLESPACE_NAME;
TABLESPACE_NAME M
-------------------- ----------
TS_TEST 20
2.1.5. 查看自由(剩余)表空间大小
SQL> desc DBA_FREE_SPACE
名称 是否为空? 类型
---------------------- -------- ---------------
TABLESPACE_NAME VARCHAR2(30)
FILE_ID NUMBER
BLOCK_ID NUMBER
BYTES NUMBER
BLOCKS NUMBER
RELATIVE_FNO NUMBER
SQL> SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024 M
2 FROM DBA_FREE_SPACE
3 WHERE tablespace_name='TS_TEST'
4 GROUP BY TABLESPACE_NAME;
TABLESPACE_NAME M
-------------------- ----------
TS_TEST 19.6875
2.1.6. 创建新用户
SQL> create user test identified by test default tablespace ts_test temporary
tablespace temp;
用户已创建
2.1.7. 给用户角色特权
SQL> grant connect,resource to test;
授权成功。
2.2. 用户数据对象
2.2.1. 查看当前用户表名
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BONUS TABLE
CC TABLE
DEPT TABLE
EMP TABLE
EMP_IOT TABLE
SALGRADE TABLE
已选择6 行。
2.2.2. 创建数据表
SQL> CREATE TABLE book (
2 bookid NUMBER(18),
3 bookname VARCHAR2(80) NOT NULL,
4 author VARCHAR2(40),
5 price NUMBER(6,2)
6 );
表已创建。
2.2.3. 创建索引
SQL> CREATE INDEX idx_book_bookid ON book(bookname);
索引已创建。
2.2.4. 创建主键约束
SQL> ALTER TABLE book ADD CONSTRAINT pk_book_bookid PRIMARY
KEY (bookid);
表已更改。
2.2.5. 显示表结构
SQL> desc book
名称 是否为空? 类型
------------------------------ -------- ----------------------
BOOKID NOT NULL NUMBER(18)
BOOKNAME NOT NULL VARCHAR2(80)
AUTHOR VARCHAR2(40)
PRICE NUMBER(6,2)
2.2.6. 查看表的索引
SQL> column index_name format a30
SQL> select table_name, index_name from user_indexes;
TABLE_NAME INDEX_NAME
------------------------------ ------------------------
BOOK IDX_BOOK_BOOKNAME
BOOK PK_BOOK_BOOKID
2.2.7. 查看索引列
SQL> select table_name, index_name, column_name, column_position
from user_ind_columns;
TABLE_NAME INDEX_NAME COLUMN_NAME COLUMN_POSITION
-------------- ------------------- -------------- ---------------
BOOK PK_BOOK_BOOKID BOOKID 1
BOOK IDX_BOOK_BOOKNAME BOOKNAME 1
2.2.8. 查看数据段占空间大小
数据段包括表、索引、分区等。
SQL> desc user_segments
名称 是否为空? 类型
-------------------- -------- ------------------------
SEGMENT_NAME VARCHAR2(81)
PARTITION_NAME VARCHAR2(30)
SEGMENT_TYPE VARCHAR2(18)
TABLESPACE_NAME VARCHAR2(30)
BYTES NUMBER
BLOCKS NUMBER
EXTENTS NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
PCT_INCREASE NUMBER
FREELISTS NUMBER
FREELIST_GROUPS NUMBER
BUFFER_POOL VARCHAR2(7)
SQL> select segment_name,segment_type,bytes from user_segments;
SEGMENT_NAME SEGMENT_TYPE BYTES
------------------------------ --------------- ---------
BOOK TABLE 65536
IDX_BOOK_BOOKNAME INDEX 65536
PK_BOOK_BOOKID INDEX 65536
2.2.9. 查看表占空间大小
SQL> select segment_name,segment_type,bytes from user_segments where
segment_type='TABLE';
SEGMENT_NAME SEGMENT_TYPE BYTES
------------------------------ ---------------- --------
BOOK TABLE 65536
经典的SQL语句
1. 行列转换--普通
假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82
想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82
declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from test group by name'
exec(@sql)
2. 行列转换--合并
有表A,
id pid
1 1
1 2
1 3
2 1
2 2
3 1
如何化成表B:
id pid
1 1,2,3
2 1,2
3 1
创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(pid as varchar) from 表A where id=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go
--调用自定义函数得到结果
select distinct id,dbo.fmerg(id) from 表A
3. 如何取得一个数据表的所有列名
方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。
SQL语句如下:
declare @objid int,@objname char(40)
set @objname = 'tablename'
select @objid = id from sysobjects where id = object_id(@objname)
select 'Column_name' = name from syscolumns where id = @objid order by colid
是不是太简单了? 呵呵 不过经常用阿.
4. 通过SQL语句来更改用户的密码
修改别人的,需要sysadmin role
EXEC sp_password NULL, 'newpassword', 'User'
如果帐号为SA执行EXEC sp_password NULL, 'newpassword', sa
5. 怎么判断出一个表的哪些字段不允许为空?
select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE='NO' and TABLE_NAME=tablename
6. 如何在数据库里找到含有相同字段的表?
a. 查已知列名的情况
SELECT b.name as TableName,a.name as columnname
From syscolumns a INNER JOIN sysobjects b
ON a.id=b.id
AND b.type='U'
AND a.name='你的字段名字'
b. 未知列名查所有在不同表出现过的列名
Select o.name As tablename,s1.name As columnname
From syscolumns s1, sysobjects o
Where s1.id = o.id
And o.type = 'U'
And Exists (
Select 1 From syscolumns s2
Where s1.name = s2.name
And s1.id <> s2.id
)
7. 查询第xxx行数据
假设id是主键:
select *
from (select top xxx * from yourtable) aa
where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id)
如果使用游标也是可以的
fetch absolute [number] from [cursor_name]
行数为绝对行数
8. SQL Server日期计算
a. 一个月的第一天
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
b. 本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
c. 一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
d. 季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
e. 上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
f. 去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
g. 本月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
h. 本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk,0,
dateadd(dd,6-datepart(day,getdate()),getdate())
), 0)
i. 本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))。
1. 说明:复制表(只复制结构,源表名:a,新表名:b)
SQL: select * into b from a where 1<>1;
2. 说明:拷贝表(拷贝数据,源表名:a,目标表名:b)
SQL: insert into b(a, b, c) select d, e, f from b;
3. 说明:显示文章、提交人和最后回复时间
SQL: select a.title, a.username, b.adddate
from table a,(
select max(adddate) adddate
from table where table.title=a.title) b
4. 说明:外连接查询(表名1:a,表名2:b)
SQL: select a.a, a.b, a.c, b.c, b.d, b.f
from a LEFT OUT JOIN b ON a.a = b.c;
5. 说明:日程安排提前五分钟提醒
SQL: select *
from 日程安排
where datediff(''minute'', f开始时间, getdate())>5
6. 说明:两张关联表,删除主表中已经在副表中没有的信息
SQL: delete from info
where not exists(
select *
from infobz
where info.infid=infobz.infid );
7. 说明:——
SQL: SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
FROM TABLE1,(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,''YYYY/MM'') =
TO_CHAR(SYSDATE, ''YYYY/MM'')) X,
(SELECT NUM, UPD_DATE, STOCK_ONHAND
FROM TABLE2
WHERE TO_CHAR(UPD_DATE,''YYYY/MM'') =
TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, ''YYYY/MM'')
|| ''/01'',''YYYY/MM/DD'') - 1, ''YYYY/MM'') ) Y,
WHERE X.NUM = Y.NUM (+)AND X.INBOUND_QTY
+ NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B
WHERE A.NUM = B.NUM;
8. 说明:——
SQL: select *
from studentinfo
where not exists(select * from student where studentinfo.id=student.id)
and 系名称=''"&strdepartmentname&"''
and 专业名称=''"&strprofessionname&"''
TAG:
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | ||||||
5 | 6 | 7 | 8 | 9 | 10 | 11 | |||
12 | 13 | 14 | 15 | 16 | 17 | 18 | |||
19 | 20 | 21 | 22 | 23 | 24 | 25 | |||
26 | 27 | 28 | 29 | 30 | 31 |
我的存档
数据统计
- 访问量: 16341
- 日志数: 28
- 建立时间: 2008-10-26
- 更新时间: 2012-10-31