1. 程式人生 > >oracle 基本命令及常用的查詢語句

oracle 基本命令及常用的查詢語句

1.create user username identified by password;//建使用者名稱和密碼oracle ,oracle 
2.grant connect,resource,dba to username;//授權 grant connect,resource,dba,sysdba to username; 
3.connect username/password//進入。 
4.select table_name,column_name from user_tab_columns where table_name='mview_log';//查詢表中的表名,欄位名等等。 
5. 如何執行指令碼SQL檔案? SQL>@PATH/filename.sql; 
6.Oracle oledb 提供者在command中執行多條SQL語句與SQL SERVER有少許差別,SQL Server只需使用";"分割多條SQL語句,而Oracle需要遵守ORACLE呼叫規範,即除分號分割外,還需以begin /end;包圍語句體. 
使用C#描述應如下所示: 
this.oleDbCommand1.CommandText = "begin INSERT INTO GROUP_INFO (GROUP_ID, GROUP_NAME) VALUES (1, \'2\'); INSERT INTO GROUP_INFO(GROUP_ID, GROUP_NAME) VALUES (2, \'2\'); end;"; 
7.查詢使用者下的所有表 select distinct table_name from user_tab_columns; 
8.如何搜尋出前N條記錄?Select a.*,rownum from (select * from cardkind order by cardkind ) a where rownum<n 
9.查詢使用者下的所有表:select * from tab; 
2、顯示當前連線使用者 
SQL> show user 
3、檢視系統擁有哪些使用者 
SQL> select * from all_users; 
4、新建使用者並授權 
SQL> create user a identified by a;(預設建在SYSTEM表空間下) 
SQL> grant connect,resource to a; 
5、連線到新使用者 
SQL> conn a/a 
6、查詢當前使用者下所有物件 
SQL> select * from tab; 
7、建立第一個表 
SQL> create table a(a number); 
8、查詢表結構 
SQL> desc a 
9、插入新記錄 
SQL> insert into a values(1); 
10、查詢記錄 
SQL> select * from a; 
11、更改記錄 
SQL> update a set a=2; 
12、刪除記錄 
SQL> delete from a; 
13、回滾 
SQL> roll; 
SQL> rollback; 
14、提交 
SQL> commit; 
select * from 
(select t.*,dense_rank() over (order by cardkind) rank from cardkind t) 
where rank = 2; 
46. 如何在字串里加回車? 
select 'Welcome to visit'||chr(10)||'www.CSDN.NET' from dual ; 
47. 中文是如何排序的? 
Oracle9i之前,中文是按照二進位制編碼進行排序的。 
在oracle9i中新增了按照拼音、部首、筆畫排序功能。設定NLS_SORT值 
SCHINESE_RADICAL_M 按照部首(第一順序)、筆劃(第二順序)排序 
SCHINESE_STROKE_M 按照筆劃(第一順序)、部首(第二順序)排序 
SCHINESE_PINYIN_M 按照拼音排序 
48. Oracle8i中物件名可以用中文嗎? 
可以 
49. 如何改變WIN中SQL*Plus啟動選項? 
SQL*PLUS自身的選項設定我們可以在$ORACLE_HOME/sqlplus/admin/glogin.sql中設定。 
50. 怎樣修改oracel資料庫的預設日期? 
alter session set nls_date_format='yyyymmddhh24miss'; 
OR 
可以在init.ora中加上一行 
nls_date_format='yyyymmddhh24miss' 
51. 如何將小表放入keep池中? 
alter table xxx storage(buffer_pool keep); 
52. 如何檢查是否安裝了某個patch? 
check that oraInventory 
53. 如何使select語句使查詢結果自動生成序號? 
select rownum,COL from table; 
54. 如何知道資料褲中某個表所在的tablespace? 
select tablespace_name from user_tables where table_name='TEST'; 
select * from user_tables中有個欄位TABLESPACE_NAME,(oracle); 
select * from dba_segments where …; 
55. 怎麼可以快速做一個和原表一樣的備份表? 
create table new_table as (select * from old_table); 
55. 怎麼在sqlplus下修改procedure? 
select line,trim(text) t from user_source where name ='A' order by line; 
56. 怎樣解除PROCEDURE被意外鎖定? 
alter system kill session ,把那個session給殺掉,不過你要先查出她的session id 
or 
把該過程重新改個名字就可以了。 
57. SQL Reference是個什麼東西? 
是一本sql的使用手冊,包括語法、函式等等,oracle官方網站的文件中心有下載. 
58. 如何檢視資料庫的狀態? 
unix下 
ps -ef | grep ora 
windows下 
看服務是否起來 
是否可以連上資料庫 
59. 請問如何修改一張表的主鍵? 
alter table aaa 
drop constraint aaa_key ; 
alter table aaa 
add constraint aaa_key primary key(a1,b1) ; 
60. 改變資料檔案的大小? 
用 ALTER DATABASE .... DATAFILE .... ; 
手工改變資料檔案的大小,對於原來的 資料檔案有沒有損害。 
61. 怎樣檢視ORACLE中有哪些程式在執行之中? 
檢視v$sessions表 
62. 怎麼可以看到資料庫有多少個tablespace? 
select * from dba_tablespaces; 
63. 如何修改oracle資料庫的使用者連線數? 
修改initSID.ora,將process加大,重啟資料庫. 
64. 如何查出一條記錄的最後更新時間? 
可以用logminer 察看 
65. 如何在PL/SQL中讀寫檔案? 
UTL_FILE包允許使用者通過PL/SQL讀寫作業系統檔案。 
66. 怎樣把"&"放入一條記錄中? 
insert into a values (translate ('at{&}t','at{}','at')); 
67. EXP 如何加QUERY引數? 
EXP USER/PASS FILE=A.DMP TABLES(BSEMPMS) 
QUERY='"WHERE EMP_NO=\'S09394\'\" ﹔ 
68. 關於oracle8i支援簡體和繁體的字符集問題? 
ZHS16GBK可以支 
69. Data Guard是什麼軟體? 
就是Standby的換代產品 
70. 如何建立SPFILE? 
SQL> connect / as sysdba 
SQL> select * from v$version; 
SQL> create pfile from spfile; 
SQL> CREATE SPFILE FROM PFILE='E:\ora9i\admin\eygle\pfile\init.ora'; 
檔案已建立。 
SQL> CREATE SPFILE='E:\ora9i\database\SPFILEEYGLE.ORA' FROM 
PFILE='E:\ora9i\admin\eygle\pfile\init.ora'; 
檔案已建立。 
71. 核心引數的應用? 
shmmax 
含義:這個設定並不決定究竟Oracle資料庫或者作業系統使用多少實體記憶體,只決定了 
最多可以使用的記憶體數目。這個設定也不影響作業系統的核心資源。 
設定方法:0.5*實體記憶體 
例子:Set shmsys:shminfo_shmmax=10485760 
shmmin 
含義:共享記憶體的最小大小。 
設定方法:一般都設定成為1。 
例子:Set shmsys:shminfo_shmmin=1: 
shmmni 
含義:系統中共享記憶體段的最大個數。 
例子:Set shmsys:shminfo_shmmni=100 
shmseg 
含義:每個使用者程序可以使用的最多的共享記憶體段的數目。 
例子:Set shmsys:shminfo_shmseg=20: 
semmni 
含義:系統中semaphore identifierer的最大個數。 
設定方法:把這個變數的值設定為這個系統上的所有Oracle的例項的init.ora中的最大 
的那個processes的那個值加10。 
例子:Set semsys:seminfo_semmni=100 
semmns 
含義:系統中emaphores的最大個數。 
設定方法:這個值可以通過以下方式計算得到:各個Oracle例項的initSID.ora裡邊的 
processes的值的總和(除去最大的Processes引數)+最大的那個Processes×2+10× 
Oracle例項的個數。 
例子:Set semsys:seminfo_semmns=200 
semmsl: 
含義:一個set中semaphore的最大個數。 
設定方法:設定成為10+所有Oracle例項的InitSID.ora中最大的Processes的值。 
例子:Set semsys:seminfo_semmsl=-200 
72. 怎樣檢視哪些使用者擁有SYSDBA、SYSOPER許可權? 
SQL>conn sys/change_on_install 
SQL>select * from V_$PWFILE_USERS; 
73. 如何單獨備份一個或多個表? 
exp 使用者/密碼 tables=(表1,…,表2) 
74. 如何單獨備份一個或多個使用者? 
exp system/manager owner=(使用者1,使用者2,…,使用者n) file=匯出檔案 
75. 如何對CLOB欄位進行全文檢索? 
SELECT * FROM A WHERE dbms_lob.instr(a.a,'K',1,1)>0; 76. 如何顯示當前連線使用者? 
SHOW USER 
77. 如何檢視資料檔案放置的路徑 ? 
col file_name format a50 
SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files 
order by file_id; 
78. 如何檢視現有回滾段及其狀態 ? 
SQL> col segment format a30 
SQL> SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE _ID,STATUS FROM 
DBA_ROLLBACK_SEGS 
79. 如何改變一個欄位初始定義的Check範圍? 
SQL> alter table xxx drop constraint constraint_name; 
之後再建立新約束: 
SQL> alter table xxx add constraint constraint_name check(); 
80. Oracle常用系統檔案有哪些? 
通過以下檢視顯示這些檔案資訊:v$database,v$datafile,v$logfile v$controlfile 
v$parameter; 
81. 內連線INNER JOIN? 
Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no; 
82. 如何外連線? 
Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no(+); 
Select a.* from bsempms a,bsdptms b wherea.dpt_no(+)=b.dpt_no; 
83. 如何執行指令碼SQL檔案? 
SQL>@$PATH/filename.sql; 
84. 如何快速清空一個大表? 
SQL>truncate table table_name; 
85. 如何查有多少個數據庫例項? 
SQL>SELECT * FROM V$INSTANCE; 
86. 如何查詢資料庫有多少表? 
SQL>select * from all_tables; 
87. 如何測試SQL語句執行所用的時間? 
SQL>set timing on ; 
SQL>select * from tablename; 
88. CHR()的反函式是? 
ASCII() 
SELECT CHAR(65) FROM DUAL; 
SELECT ASCII('A') FROM DUAL; 
89. 字串的連線 
SELECT CONCAT(COL1,COL2) FROM TABLE ; 
SELECT COL1||COL2 FROM TABLE ; 
90. 怎麼把select出來的結果導到一個文字檔案中? 
SQL>SPOOL C:\ABCD.TXT; 
SQL>select * from table; 
SQL >spool off; 
91. 怎樣估算SQL執行的I/O數 ? 
SQL>SET AUTOTRACE ON ; 
SQL>SELECT * FROM TABLE; 
OR 
SQL>SELECT * FROM v$filestat ; 
可以檢視IO數 
92. 如何在sqlplus下改變欄位大小? 
alter table table_name modify (field_name varchar2(100)); 
改大行,改小不行(除非都是空的) 
93. 如何查詢某天的資料? 
select * from table_name where trunc(日期欄位)=to_date('2003-05-02','yyyy-mm- 
dd'); 
94. sql 語句如何插入全年日期? 
create table BSYEAR (d date); 
insert into BSYEAR 
select to_date('20030101','yyyymmdd')+rownum-1 
from all_objects 
where rownum <= to_char(to_date('20031231','yyyymmdd'),'ddd'); 
95. 如果修改表名? 
alter table old_table_name rename to new_table_name; 
96. 如何取得命令的返回狀態值? 
sqlcode=0 
97. 如何知道使用者擁有的許可權? 
SELECT * FROM dba_sys_privs ; 
98. 從網上下載的ORACLE9I與市場上賣的標準版有什麼區別? 
從功能上說沒有區別,只不過oracle公司有明文規定;從網站上下載的oracle產品不得用於 
商業用途,否則侵權。 
99. 怎樣判斷資料庫是執行在歸檔模式下還是執行在非歸檔模式下? 
進入dbastudio,歷程--〉資料庫---〉歸檔檢視。 
100. sql>startup pfile和ifile,spfiled有什麼區別? 
pfile就是Oracle傳統的初始化引數檔案,文字格式的。 
ifile類似於c語言裡的include,用於把另一個檔案引入 
spfile是9i裡新增的並且是預設的引數檔案,二進位制格式 
startup後應該只可接pfile 
101. 如何搜尋出前N條記錄? 
SELECT * FROM empLOYEE WHERE ROWNUM < n ORDER BY empno; 
102. 如何知道機器上的Oracle支援多少併發使用者數? 
SQL>conn internal ; 
SQL>show parameter processes ; 
103. db_block_size可以修改嗎? 
一般不可以﹐不建議這樣做的。 
104. 如何統計兩個表的記錄總數? 
select (select count(id) from aa)+(select count(id) from bb) 總數 from dual; 
105. 怎樣用Sql語句實現查詢一列中第N大值? 
select * from 
(select t.*,dense_rank() over (order by sal) rank from employee) 
where rank = N; 
106. 如何在給現有的日期加上2年?( 
select add_months(sysdate,24) from dual; 
107. USED_UBLK為負值表示什麼意思? 
It is "harmless". 
108. Connect string是指什麼? 
應該是tnsnames.ora中的服務名後面的內容 
109. 怎樣擴大REDO LOG的大小? 
建立一個臨時的redolog組,然後切換日誌,刪除以前的日誌,建立新的日誌。 
110. tablespace 是否不能大於4G? 
沒有限制. 
111. 返回大於等於N的最小整數值? 
SELECT CEIL(N) FROM DUAL; 
112. 返回小於等於N的最小整數值? 
SELECT FLOOR(N) FROM DUAL; 
113. 返回當前月的最後一天? 
SELECT LAST_DAY(SYSDATE) FROM DUAL; 
114. 如何不同使用者間資料匯入? 
IMP SYSTEM/MANAGER FILE=AA.DMP FROMUSER=USER_OLD TOUSER=USER_NEW ROWS=Y INDEXES=Y 

115. 如何找資料庫表的主鍵欄位的名稱? 
SQL>SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE='P' and 
table_name='TABLE_NAME'; 
116. 兩個結果集互加的函式? 
SQL>SELECT * FROM BSEMPMS_OLD INTERSECT SELECT * FROM BSEMPMS_NEW; 
SQL>SELECT * FROM BSEMPMS_OLD UNION SELECT * FROM BSEMPMS_NEW; 
SQL>SELECT * FROM BSEMPMS_OLD UNION ALL SELECT * FROM BSEMPMS_NEW; 
117. 兩個結果集互減的函式? 
SQL>SELECT * FROM BSEMPMS_OLD MINUS SELECT * FROM BSEMPMS_NEW; 
118. 如何配置Sequence? 
建sequence seq_custid 
create sequence seq_custid start 1 incrememt by 1; 
建表時: 
create table cust 
{ cust_id smallint not null, 
...} 
insert 時: 
insert into table cust 
values( seq_cust.nextval, ...) 
日期的各部分的常用的的寫法 
119>.取時間點的年份的寫法: 
SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL; 
120>.取時間點的月份的寫法: 
SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL; 
121>.取時間點的日的寫法: 
SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL; 
122>.取時間點的時的寫法: 
SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL; 
123>.取時間點的分的寫法: 
SELECT TO_CHAR(SYSDATE,'MI') FROM DUAL; 
124>.取時間點的秒的寫法: 
SELECT TO_CHAR(SYSDATE,'SS') FROM DUAL; 
125>.取時間點的日期的寫法: 
SELECT TRUNC(SYSDATE) FROM DUAL; 
126>.取時間點的時間的寫法: 
SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') FROM DUAL; 
127>.日期,時間形態變為字元形態 
SELECT TO_CHAR(SYSDATE) FROM DUAL; 
128>.將字串轉換成日期或時間形態: 
SELECT TO_DATE('2003/08/01') FROM DUAL; 129>.返回引數的星期幾的寫法: 
SELECT TO_CHAR(SYSDATE,'D') FROM DUAL; 
130>.返回引數一年中的第幾天的寫法: 
SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL; 
131>.返回午夜和引數中指定的時間值之間的秒數的寫法: 
SELECT TO_CHAR(SYSDATE,'SSSSS') FROM DUAL; 
132>.返回引數中一年的第幾周的寫法: 
SELECT TO_CHAR(SYSDATE,'WW') FROM DUAL; 
虛擬欄位 
133. CURRVAL 和 nextval 
為表建立序列 
CREATE SEQUENCE EMPSEQ ... ; 
SELECT empseq.currval FROM DUAL ; 
自動插入序列的數值 
INSERT INTO emp 
VALUES (empseq.nextval, 'LEWIS', 'CLERK', 
7902, SYSDATE, 1200, NULL, 20) ; 
134. ROWNUM 
按設定排序的行的序號 
SELECT * FROM emp WHERE ROWNUM < 10 ; 
135. ROWID 
返回行的實體地址 
SELECT ROWID, ename FROM emp WHERE deptno = 20 ; 
136. 將N秒轉換為時分秒格式? 
set serverout on 
declare 
N number := 1000000; 
ret varchar2(100); 
begin 
ret := trunc(n/3600) || '小時' || to_char(to_date(mod(n,3600),'sssss'),'fmmi"分 
"ss"秒"') ; 
dbms_output.put_line(ret); 
end; 
137. 如何查詢做比較大的排序的程序? 
SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, a.sid, a.serial#, 
a.username, a.osuser, a.status 
FROM v$session a,v$sort_usage b 
WHERE a.saddr = b.session_addr 
ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks ; 
138. 如何查詢做比較大的排序的程序的SQL語句? 
select /*+ ORDERED */ sql_text from v$sqltext a 
where a.hash_value = ( 
select sql_hash_value from v$session b 
where b.sid = &sid and b.serial# = &serial) 
order by piece asc ; 
139. 如何查詢重複記錄? 
SELECT * FROM TABLE_NAME 
WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D 
WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2); 
140. 如何刪除重複記錄? 
DELETE FROM TABLE_NAME 
WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D 
WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2); 
141. 如何快速編譯所有檢視? 
SQL >SPOOL VIEW1.SQL 
SQL >SELECT 'ALTER VIEW '||TNAME||' 
COMPILE;' FROM TAB; 
SQL >SPOOL OFF 
然後執行VIEW1.SQL即可。 
SQL >@VIEW1.SQL; 
142. ORA-01555 SNAPSHOT TOO OLD的解決辦法 
增加MINEXTENTS的值,增加區的大小,設定一個高的OPTIMAL值。 
143. 事務要求的回滾段空間不夠,表現為表空間用滿(ORA-01560錯誤),回滾段擴充套件到達 
引數 MAXEXTENTS的值(ORA-01628)的解決辦法. 
向回滾段表空間新增檔案或使已有的檔案變大;增加MAXEXTENTS的值。 
144. 如何加密ORACLE的儲存過程? 
下列儲存過程內容放在AA.SQL檔案中 
create or replace procedure testCCB(i in number) as 
begin 
dbms_output.put_line('輸入引數是'||to_char(i)); 
end; 
SQL>wrap iname=a.sql; 
PL/SQL Wrapper: Release 8.1.7.0.0 - Production on Tue Nov 27 22:26:48 2001 
Copyright (c) Oracle Corporation 1993, 2000. All Rights Reserved. 
Processing AA.sql to AA.plb 
執行AA.plb 
SQL> @AA.plb ; 
145. 如何監控事例的等待? 
select event,sum(decode(wait_Time,0,0,1)) "Prev", 
sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot" 
from v$session_Wait 
group by event order by 4; 
146. 如何回滾段的爭用情況? 
select name, waits, gets, waits/gets "Ratio" 
from v$rollstat C, v$rollname D 
where C.usn = D.usn; 
147. 如何監控表空間的 I/O 比例? 
select B.tablespace_name name,B.file_name "file",A.phyrds pyr, 
A.phyblkrd pbr,A.phywrts pyw, A.phyblkwrt pbw 
from v$filestat A, dba_data_files B 
where A.file# = B.file_id 
order by B.tablespace_name; 
148. 如何監控檔案系統的 I/O 比例? 
select substr(C.file#,1,2) "#", substr(C.name,1,30) "Name", 
C.status, C.bytes, D.phyrds, D.phywrts 
from v$datafile C, v$filestat D 
where C.file# = D.file#; 
149. 如何在某個使用者下找所有的索引? 
select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name 
from user_ind_columns, user_indexes 
where user_ind_columns.index_name = user_indexes.index_name 
and user_ind_columns.table_name = user_indexes.table_name 
order by user_indexes.table_type, user_indexes.table_name, 
user_indexes.index_name, column_position; 
150. 如何監控 SGA 的命中率? 
select a.value + b.value "logical_reads", c.value "phys_reads", 
round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO" 
from v$sysstat a, v$sysstat b, v$sysstat c 
where a.statistic# = 38 and b.statistic# = 39 
and c.statistic# = 40; 
151. 如何監控 SGA 中字典緩衝區的命中率? 
select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio", 
(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio" 
from v$rowcache 
where gets+getmisses <>0 
group by parameter, gets, getmisses; 
152. 如何監控 SGA 中共享快取區的命中率,應該小於1% ? 
select sum(pins) "Total Pins", sum(reloads) "Total Reloads", 
sum(reloads)/sum(pins) *100 libcache 
from v$librarycache; 
select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload 
percent" 
from v$librarycache; 
153. 如何顯示所有資料庫物件的類別和大小? 
select count(name) num_instances ,type ,sum(source_size) source_size , 
sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size) 
error_size, 
sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required 
from dba_object_size 
group by type order by 2; 
154. 監控 SGA 中重做日誌快取區的命中率,應該小於1% 
SELECT name, gets, misses, immediate_gets, immediate_misses, 
Decode(gets,0,0,misses/gets*100) ratio1, 
Decode(immediate_gets+immediate_misses,0,0, 
immediate_misses/(immediate_gets+immediate_misses) *100) ratio2 
FROM v$latch WHERE name IN ('redo allocation', 'redo copy'); 
155. 監控記憶體和硬碟的排序比率,最好使它小於 .10,增加 sort_area_size 
SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts 
(disk)'); 
156. 如何監控當前資料庫誰在執行什麼SQL語句? 
SELECT osuser, username, sql_text from v$session a, v$sqltext b 
where a.sql_address =b.address order by address, piece; 
157. 如何監控字典緩衝區? 
SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE; 
SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM 
V$ROWCACHE; 
SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM 
V$LIBRARYCACHE; 
後者除以前者,此比率小於1%,接近0%為好。 
SELECT SUM(GETS) "DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GET MISSES" 
FROM V$ROWCACHE 
158. 監控 MTS 
select busy/(busy+idle) "shared servers busy" from v$dispatcher; 
此值大於0.5時,引數需加大 
select sum(wait)/sum(totalq) "dispatcher waits" from v$queue where 
type='dispatcher'; 
select count(*) from v$dispatcher; 
select servers_highwater from v$mts; 
servers_highwater接近mts_max_servers時,引數需加大 
159. 如何知道當前使用者的ID號? 
SQL>SHOW USER; 
OR 
SQL>select user from dual; 
160. 如何檢視碎片程度高的表? 
SELECT segment_name table_name , COUNT(*) extents 
FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name 
HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY 
segment_name); 
162. 如何知道表在表空間中的儲存情況? 
select segment_name,sum(bytes),count(*) ext_quan from dba_extents where 
tablespace_name='&tablespace_name' and segment_type='TABLE' group by 
tablespace_name,segment_name; 
163. 如何知道索引在表空間中的儲存情況? 
select segment_name,count(*) from dba_extents where segment_type='INDEX' and 
owner='&owner' 
group by segment_name; 
164、如何知道使用CPU多的使用者session? 
11是cpu used by this session 
select a.sid,spid,status,substr(a.program,1,40) 
prog,a.terminal,osuser,value/60/100 value 
from v$session a,v$process b,v$sesstat c 
where c.statistic#=11 and c.sid=a.sid and a.paddr=b.addr order by value desc; 
165. 如何知道監聽器日誌檔案? 
以8I為例 
$ORACLE_HOME/NETWORK/LOG/LISTENER.LOG 
166. 如何知道監聽器引數檔案? 
以8I為例 
$ORACLE_HOME/NETWORK/ADMIN/LISTENER.ORA 
167. 如何知道TNS 連線檔案? 
以8I為例 
$ORACLE_HOME/NETWORK/ADMIN/TNSNAMES.ORA 
168. 如何知道Sql*Net 環境檔案? 
以8I為例 
$ORACLE_HOME/NETWORK/ADMIN/SQLNET.ORA 
169. 如何知道警告日誌檔案? 
以8I為例 
$ORACLE_HOME/ADMIN/SID/BDUMP/SIDALRT.LOG 
170. 如何知道基本結構? 
以8I為例 
$ORACLE_HOME/RDBMS/ADMIN/STANDARD.SQL 
171. 如何知道建立資料字典檢視? 
以8I為例 
$ORACLE_HOME/RDBMS/ADMIN/CATALOG.SQL 
172. 如何知道建立審計用資料字典檢視? 
以8I為例 
$ORACLE_HOME/RDBMS/ADMIN/CATAUDIT.SQL 
173. 如何知道建立快照用資料字典檢視? 
以8I為例 
$ORACLE_HOME/RDBMS/ADMIN/CATSNAP.SQL 
本講主要講的是SQL語句的優化方法! 主要基於ORACLE9I的. 
174. /*+ALL_ROWS*/ 
表明對語句塊選擇基於開銷的優化方法,並獲得最佳吞吐量,使資源消耗最小化. 
例如: 
SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 
175. /*+FIRST_ROWS*/ 
表明對語句塊選擇基於開銷的優化方法,並獲得最佳響應時間,使資源消耗最小化. 
例如: 
SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 176. /*+CHOOSE*/ 
表明如果資料字典中有訪問表的統計資訊,將基於開銷的優化方法,並獲得最佳的吞吐量; 
表明如果資料字典中沒有訪問表的統計資訊,將基於規則開銷的優化方法; 
例如: 
SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 
177. /*+RULE*/ 
表明對語句塊選擇基於規則的優化方法. 
例如: 
SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 
178. /*+FULL(TABLE)*/ 
表明對錶選擇全域性掃描的方法. 
例如: 
SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='CCBZZP'; 
179. /*+ROWID(TABLE)*/ 
提示明確表明對指定表根據ROWID進行訪問. 
例如: 
SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA' 
AND EMP_NO='CCBZZP'; 
180. /*+CLUSTER(TABLE)*/ 
提示明確表明對指定表選擇簇掃描的訪問方法,它只對簇物件有效. 
例如: 
SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS 
WHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO; 
181. /*+INDEX(TABLE INDEX_NAME)*/ 
表明對錶選擇索引的掃描方法. 
例如: 
SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE 
BSEMPMS */ FROM BSEMPMS WHERE SEX='M'; 
182. /*+INDEX_ASC(TABLE INDEX_NAME)*/ 


1. select * from emp;

2. select empno, ename, job from emp;

3. select empno 編號, ename 姓名, job 工作 from emp;

4. select job from emp;

5. select distinct job from emp;

6. select distinct empno, job from emp;
說明:因為僱員編號不重複, 所以此時證明所有的列沒有重複,所以不能消除掉重複的列.

7. 查詢出僱員的編號, 姓名, 工作, 但是顯示的格式:編號是: 7369 的僱員, 姓名是: smith, 工作是: clear
select '編號是: ' || empno || '的僱員, 姓名是: ' || ename || ', 工作是: ' || job from emp;

8. 求出每個僱員的姓名及年薪
select ename, sal * 12 income from emp;

9. 求出工資大於 1500 的所有僱員資訊
select * from emp where sal > 1500;

10. 查詢每月可以得到獎金的僱員資訊
select * from emp where comm is not null;

11. 查詢沒有獎金的僱員資訊
select * from emp where comm is null;

12. 查詢出基本工資大於 1500 同時可以領取獎金的僱員資訊
select * from emp where sal > 1500 and comm is not null;

13. 查詢出基本工資大於 1500 或者可以領取獎金的僱員資訊
select * from emp where sal > 1500 or comm is not null;

14. 查詢出基本工資不大於 1500 或者不可以領取獎金的僱員資訊
select * from emp where not(sal > 1500 and comm is not null);

15. 查詢基本工資大於 1500, 但是小於 3000 的全部僱員資訊
select * from emp where sal > 1500 and sal < 3000;

16. 查詢基本工資大於等於 1500, 但是小於等於 3000 的全部僱員資訊
select * from emp where sal >= 1500 and sal <= 3000;
select * from emp where sal between 1500 and 3000;

17. 查詢出在 1981 年僱傭的全部僱員資訊(1981 年 1 月 1 日 到 1981 年 12 月 31 日之間的僱傭的僱員)
select * from emp where hiredate between '1-1月-81' and '31-12月-81';

18. 要求查詢出姓名是 smith 的僱員資訊
select * from emp where ename = 'SMITH';

19. 要求查詢出僱員是 7369, 7499, 7521 的僱員的具體資訊
select * from emp where empno = 7369 or empno = 7499 or empno = 7521;
select * from emp where empno in(7369, 7499, 7521);

20. 要求查詢出僱員不是 7369, 7499, 7521 的僱員的具體資訊
select * from emp where empno not in(7369, 7499, 7521);

21. 要求查詢出姓名是 smith, allen, king 的僱員資訊
select * from emp where ename in('SMITH', 'ALLEN', 'KING');

22. 查詢出所有僱員姓名中第二個字母包含 "M" 的僱員資訊
        select * from emp where ename like '_M%';

23. 查詢出僱員姓名中包含字母 M 的僱員資訊
select * from emp where ename like '%M%';

24. 要求查詢出在 1981 年僱傭的僱員資訊
select * from emp where hiredate like '%81%';

25. 查詢工資中包含 5 的僱員資訊
select * from emp where sal like '%5%';

26. 查詢僱員編號不是 7369 的僱員資訊
select * from emp where empno != 7369;
select * from emp where empno <> 7369;

27. 要求按照工資由低到高排序
select * frm emp order by sal;
select * from emp order by sal asc;

28. 要求按照工資由高到低排序
select * from emp order by sal desc;

29. 要求查詢出 20 部門的所有僱員資訊, 查詢的資訊按照工資由高到低排序,如果工資相等,則按照僱傭日期由早到晚排序.
select * from emp where deptno = 20 order by sal desc, hiredate asc;

30. 將小寫字母變為大寫字母
select upper('hello') from dual;

31. 將大寫字母變為小寫字母
select lower('HELLO WORLD') from dual;

32. 要求查詢出姓名是 smith 的僱員資訊
select * from emp where ename = upper('smith');

33. 使用 initcap() 函式將單詞的第一個字母大寫
select initcap('hello world') from dual;

34. 將僱員表中的僱員姓名變為開頭字母大寫
select initcap(ename) from emp;

35. 將字串 "hello" 和 "world" 進行串聯
select concat('hello ', 'world') from dual;

36. 對字串進行操作的常用字元處理函式
select substr('hello', 1, 3) 擷取字串, length('hello') 字串的長度, replace('hello', 'l', 'x') 字串替換 from dual;
select substr('hello', 0, 3) 擷取字串, length('hello') 字串的長度, replace('hello', 'l', 'x') 字串替換 from dual;

37. 顯示所有僱員的姓名及姓名的後三個字元
select ename, substr(ename, length(ename) -2) from emp;
select ename, substr(ename, -3, 3) from emp;

38. 使用數值函式執行四捨五入操作
select round(789.536) from dual;

39. 要求將 789.536 數值保留兩位小數
select round(789.536, 2) from dual;

40. 要求將 789.536 數值中的整數的十位進行四捨五入進位
select round(789.536, -2) from dual;

41. 採用 trunc() 函式不會保留任何小數,而且小數點也不會執行四捨五入的操作
select trunc(789.536) from dual;

42. 通過 trunc() 也可以指定小數點的保留位數
select trunc(789.536, 2) from dual;

43. 作用負數表示位數
select trunc(789.536, -2) from dual;

44. 使用 mod() 函式可以進行取餘的操作
select mod(10, 3) from dual;

45. 顯示 10 部門僱員進入公司的星期數(當前日期 - 僱傭日期 = 天數 / 7 = 星期數)
select empno, ename, round((sysdate - hiredate) / 7) from emp where deptno = 10;

46. 日期函式
months_between(): 求出給定日期範圍的月數
add_months(): 在指定的日期上加上指定的月數, 求出之後的日期
next_day(): 指定日期的下一個日期
last_day(): 求出給定日期當月的最後一天日期

47. 
select empno, ename, months_between(sysdate, hiredate) from emp;
select empno, ename, round(months_between(sysdate, hiredate)) from emp;

48. select sysdate, add_months(sysdate, 4) from dual;

49. select next_day(sysdate, '星期一') from dual;

50. select last_day(sysdate) from dual;

51. 轉換函式
to_char(): 轉換成字串
to_number(): 轉換成數字
to_date(): 轉換成日期

52. 查詢所有僱員的僱員編號, 姓名, 僱傭日期
select empno, 
ename,
to_char(hiredate, 'yyyy') year,
to_char(hiredate, 'mm') months,
to_char(hiredate, 'dd') day
from emp;

select empno, ename, to_char(hiredate, 'yyyy-mm-dd') from emp;

select empno, ename, to_char(hiredate, 'fmyyyy-mm-dd') from emp;

53. 查詢所有僱員的編號, 姓名和工資
select empno, ename, sal from emp;
select empno, ename, to_char(sal, '99,999') from emp;
select empno, ename, to_char(sal, 'L99,999') from emp;
select empno, ename, to_char(sal, '$99,999') from emp;

54. select to_number('123') + to_number('123') from dual;

55. 將一個字串轉換成日期型別
select to_date('2009-01-01', 'yyyy-mm-dd') from dual;

56. 求出每個僱員的年薪(要求加上獎金)
select empno, ename, sal, comm, (sal + comm) * 12 from emp;
select empno, ename, sal, comm, nvl(comm, 0), (sal + nvl(comm, 0)) * 12 income from emp;

57. decode() 函式類似於 if....elsif...else 語句
select decode(1, 1, '內容是 1', 2, '內容是 2', 3, '內容是 3') from dual;

58. 查詢出僱員的編號, 姓名, 僱傭日期及工作, 要求將僱員的工作替換成以下資訊:
select empno 僱員編號, 
ename 僱員姓名, 
hiredate 僱傭日期, 
decode(job, 
'CLERK', '業務員', 
'SALESMAN', '銷售人員',
'MANAGER', '經理',
'ANALYST', '分析員',
'PRESIDENT', '總裁'
) 職位
from emp;

59. 笛卡爾積(交差連線)
select * from emp, dept;
select * from emp cross join dept;

60. 內連線
select * from emp e, dept d where e.deptno = d.deptno;
select * from emp e inner join dept d on e.deptno = d.deptno;
select * from emp e join dept d on e.deptno = d.deptno;


61. 自然連線
select * from emp natural join dept;
select * from emp e join dept d using(deptno);

62. 要求查詢出僱員的編號, 姓名, 部門的編號, 名稱, 地址
select e.empno, e.ename, d.deptno, d.dname, d.loc from emp e, dept d where e.deptno = d.deptno;

63. 要求查詢出僱員的姓名, 工作, 僱員的直接上級領導姓名
select e.ename, e.job, m.ename from emp e, emp m where e.mgr = m.empno;

64. 要求查詢出僱員的姓名, 工作, 僱員的直接上級領導姓名以及部門名稱
select e.ename, e.job, m.ename, d.dname from emp e, emp m, dept d where e.mgr = m.empno and e.deptno = d.deptno;

65. 要求查詢出每個僱員的姓名, 工資, 部門名稱, 工資在公司的等級(salgrade), 及其領導的姓名及工資所在公司的等級
select e.ename, e.sal, d.dname, s.grade, m.ename, m.sal, ms.grade
from emp e, dept d, salgrade s, emp m, salgrade ms
where e.deptno = d.deptno 
and e.sal between s.losal and s.hisal 
and e.mgr = m.empno
and m.sal between ms.losal and ms.hisal;

select e.ename, 
e.sal, 
d.dname, 
decode(s.grade, 1, '第五等級', 2, '第四等級', 3, '第三等級', 4, '第二等級', 5, '第一等級'), 
m.ename, 
m.sal, 
decode(ms.grade, 1, '第五等級', 2, '第四等級', 3, '第三等級', 4, '第二等級', 5, '第一等級')
from emp e, dept d, salgrade s, emp m, salgrade ms
where e.deptno = d.deptno and e.sal between s.losal and s.hisal and e.mgr = m.empno
and m.sal between ms.losal and ms.hisal;

66. select empno, ename, d.deptno, dname, loc from emp e, dept d where e.deptno = d.deptno;
    select empno, ename, d.deptno, dname, loc from emp e inner join dept d on e.deptno = d.deptno;

67. 左外連線
    select empno, ename, d.deptno, dname, loc from emp e, dept d where e.deptno = d.deptno(+);
    select empno, ename, d.deptno, dname, loc from emp e left outer join dept d on e.deptno = d.deptno;
    select empno, ename, d.deptno, dname, loc from emp e left join dept d on e.deptno = d.deptno(+);

68. 右外連線
    select empno, ename, d.deptno, dname, loc from emp e, dept d where e.deptno(+) = d.deptno;
    select empno, ename, d.deptno, dname, loc from emp e right outer join dept d on e.deptno = d.deptno;
    select empno, ename, d.deptno, dname, loc from emp e right join dept d on e.deptno = d.deptno;

69. select e.empno, e.ename, m.empno, m.ename from emp e, emp m where e.mgr = m.empno;

70. select e.empno, e.ename, m.empno, m.ename from emp e, emp m where e.mgr = m.empno(+);

71. 
select * from emp e, dept d where e.deptno = d.deptno and d.deptno = 30;
select * from emp e inner join dept d on e.deptno = d.deptno where d.deptno = 30;
select * from emp e join dept d on e.deptno = d.deptno where d.deptno = 30;
select * from emp e natural join dept d where deptno = 30;
select * from emp e join dept d using(deptno) where deptno = 30;

72. 
select e.ename, d.deptno, d.dname, d.loc from emp e right outer join dept d on e.deptno = d.deptno;
select e.ename, d.deptno, d.dname, d.loc from emp e right join dept d on e.deptno = d.deptno;
select e.ename, d.deptno, d.dname, d.loc from emp e, dept d where e.deptno(+) = d.deptno;

73. select count(ename) from emp;

74. select min(sal) from emp;

75. select max(sal) from emp;

76. select sum(sal) from emp;

77. select avg(sal) from emp;

78. select sum(sal) from emp where deptno = 20;

79. select avg(sal) from emp where deptno = 20;

80. 求出每個部門的僱員數量
select deptno, count(deptno) from emp group by deptno;
select deptno, count(empno) from emp group by deptno;

81. 求出每個部門的平均工資
select deptno, avg(sal) from emp group by deptno;

82. 按部門分組, 並顯示部門的名稱, 及每個部門的員工數
select d.dname, count(e.empno) from emp e, dept d 
where e.deptno = d.deptno
group by d.dname;

select d.deptno, d.dname, temp.c
from (select deptno, count(e.empno) c from emp e group by e.deptno) temp, dept d
where temp.deptno = d.deptno;

83. 要求顯示出平均工資大於 2000 的部門編號和平均工資
select deptno, avg(sal) from emp group by deptno having avg(sal) > 2000;

84. 顯示非銷售人員工作名稱以及從事同一工作僱員的月工資的總和,並且要滿足從事同一工作的僱員的月工資合計大於 5000, 輸出結果按月工資的合計升序排序.
select job, sum(sal) su from emp where job <> 'SALESMAN' group by job having sum(sal) > 5000 order by su;

select temp.job, sum(temp.sal) s
from (select job, sal from emp e where job <> 'SALESMAN') temp
group by temp.job
having sum(temp.sal) > 5000
order by s;

85. 求出平均工資最高的部門工資
select max(avg(sal)) from emp group by deptno;

86. 要求查詢出比僱員編號為 7654 工資高的所有僱員資訊
select * from emp where sal >(select sal from emp where empno = 7654);

87. 要求查詢出工資比 7654 高, 同時與 7788 從事相同工作的全部僱員資訊
select * from emp 
where sal >(select sal from emp where empno = 7654)
and job = (select job from emp where empno = 7788);

88. 要求查詢出工資最低的僱員姓名, 工作, 工資
select ename, job, sal from emp where sal = (select min(sal) from emp);

89. 要求查詢出: 部門名稱,部門的員工數,部門的平均工資,部門的最低收入僱員的姓名
select d.dname, temp.c, temp.a, e.ename 
from dept d, 
(select deptno, count(empno) c, avg(sal) a, min(sal) m from emp group by deptno) temp, 
emp e
where d.deptno = temp.deptno and e.sal = temp.m;

select d.deptno, temp.dname, temp.c, temp.a, e.ename, e.sal
from 
(select d.dname , count(e.empno) c, avg(e.sal) a, min(e.sal) m
from emp e, dept d
where e.deptno = d.deptno
group by d.dname) temp, 
emp e,
dept d
where temp.m = e.sal
and temp.dname = d.dname;

90. 求出每個部門的最低工資的僱員的資訊
select * from emp where sal in(select min(sal) from emp group by deptno);
select * from emp where sal =any(select min(sal) from emp group by deptno);
select * from 
(select min(sal) m from emp group by deptno) temp,
emp e
where e.sal = temp.m;

91. 範例 90 中, 比子查詢條件中最低(小)的工資要大的僱員資訊
select * from emp where sal >any(select min(sal) from emp group by deptno);
select * from emp where sal > (select min(min(sal)) from emp group by deptno);

92. 範例 90 中, 比子查詢條件中最高(大)的工資要小的僱員資訊
select * from emp where sal <any(select min(sal) from emp group by deptno);
select * from emp where sal < (select max(min(sal)) from emp group by deptno);

93. 範例 90 中, 比子查詢條件中最高(大)的工資要大的僱員資訊
select * from emp where sal >all(select min(sal) from emp group by deptno);
select * from emp where sal > (select max(min(sal)) from emp group by deptno);

94. 範例 90 中, 比子查詢條件中最低(小)的工資要小的僱員資訊
select * from emp where sal <all(select min(sal) from emp group by deptno);
select * from emp where sal < (select min(min(sal)) from emp group by deptno);

95. 查找出 20 部門中沒有獎金的僱員資訊
select * from emp where (sal, nvl(comm, -1)) in (select sal, nvl(comm, -1) from emp where deptno = 20);
select * from emp where deptno = 20 and comm is null;

96. union 操作符返回兩個查詢選定的所有不重複的行
select deptno from emp union select deptno from dept;

97. union all 操作符合並兩個查詢選定的所有行,包括重複的行
select deptno from emp union all select deptno from dept;

98. intersect 操作符只返回兩個查詢都有的行
select deptno from emp intersect select deptno from dept;

99. minus 操作符只返回由第一個查詢選定但是沒有被第二個查詢選定的行, 也就是在第一個查詢結果中排除在第二個查詢結果中出現的行
select deptno from dept minus select deptno from emp;
--------------------- 
轉載:https://blog.csdn.net/qq_35624642/article/details/53222783