oracle速查

來源:互聯網
上載者:User
SQL定義:SQL是一種面向資料庫的通用資料處理語言規範,能完成以下幾類功能:提取查詢資料,插入修改刪除資料,產生修改和刪除資料庫物件,資料庫安全控制,資料庫完整性及資料保護控制。  
  
SQL分類:  
DDL—資料定義語言 (Data Definition Language)(CREATE,ALTER,DROP,DECLARE)  
DML—資料操縱語言(SELECT,DELETE,UPDATE,INSERT)  
DCL—資料控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)  
  
db2資料類型  
CHAR():定長字串 最大長度為 254  
VARCHAR():變長字元 最大長度為 4000  
SMALLINT:短整型數字 長度為 2 位元組  
INTEGER:整型數字 長度為 4 位元組  
REAL:單精確度浮點 32 位近似值  
DOUBLE:雙精確度浮點 64 位元近似值  
DECIMAL(m,n):數字 精度為m小數位為n  
DATE:日期時間  
TIME:日期時間  
TIMESTAMP:日期時間  
  
DDL—資料庫定義語言:直接提交的。  
CREATE:用於建立資料庫物件。  
DECLARE:除了是建立只在過程中使用的暫存資料表外,DECLARE語句和CREATE語句非常相似。唯一可以被聲明的對象是表。並且必須放入使用者暫存資料表空間。  
DROP:可以刪除任何用CREATE(資料庫物件)和DECLARE(表)建立的對象。  
ALTER:允許修改某些資料庫物件的資訊。不能修改索引。  
下面主要基於對象介紹基本的文法:  
1、資料庫:  
建立資料庫:CREATE DATABASE database-name [USING CODESET codeset TERRITORY territory]  
註:字碼頁的問題。  
刪除資料庫:drop database dbname  
2、表:  
建立新表:  
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)  
根據已有的表建立新表:  
A:create table tab_new like tab_old  
B:create table tab_new as select col1,col2… from tab_old definition only  
修改表:  
增加一個列:  
Alter table tabname add column col type  
註:列增加後將不能刪除。DB2中列加上後資料類型也不能改變,唯一能改變的是增加varchar類型的長度。添加主鍵:  
Alter table tabname add primary key(col)  
刪除主鍵:  
Alter table tabname drop primary key(col)  
刪除表:drop table tabname  
3、資料表空間:  
建立資料表空間:create tablespace tbsname pagesize 4k managed by database using (file ‘file’ size)  
資料表空間加入容器:alter tablespace tablespace_name add(file 'filename' size)  
註:該操作是無法復原的,加入容器後將不能將其刪除,因此在加入的時候注意。  
刪除資料表空間:drop tablespace tbsname  
4、索引:  
建立索引:create [unique] index idxname on tabname(col….)  
刪除索引:drop index idxname  
註:索引是不可更改的,想更改必須刪除重建立。  
5、視圖:  
建立視圖:create view viewname as select statement  
刪除視圖:drop view viewname  
註:視圖唯一能修改的是參考型別列,改變列的範圍。其他定義好了都不能修改。當視圖基於的基表drop後,視圖變為無效。  
  
DML—資料庫操縱語言,它不隱式地提交當前事務 ,是否提交視環境設定而定。  
  
SELECT:從表中查詢符合資料  
註:條件中串連的問題,避免出現笛卡兒乘積  
  
DELETE:刪除已有表的資料  
UPDATE:更新已有表的資料  
INSERT:向已有表中插入資料  
註:DELETE,UPDATE和INSERT是否直接提交取決與執行語句所在的環境。  
在執行時注意交易記錄滿的情況。  
1、select時,注意索引謂詞和非索引謂詞,盡量在有索引的列上使用索引謂詞。  
謂詞類型 可索引 注 釋  
Col∝con Y ∝代表>,>=,=,<=,<,但是<>不是可索引的。  
Col between con1 and con2 Y 在匹配系列中必須是最後的。  
Col in list Y 僅對一個匹配列  
Col is null Y  
Col like ‘xyz%’ Y 模糊比對%在後面。  
Col like ‘%xyz’ N 模糊比對%在前面。  
Col1∝Col2 N Col1和col2來自同一個表  
Col∝Expression N 例如:c1(c1+1)/2  
Pred1 and Pred2 Y Pred1和Pred2都是可索引的,指相同索引的列  
Pred1 or Pred2 N 除了(c1=a or c1=b)外,他可以被認為是c1 in(a,b)  
Not Pred1 N 或者任何的等價形式:Not between,Not in,Not like等等。  
使用索引的例子介紹:  
<1>、單個表上索引查詢的介紹 :  
A:select * from t1 where c1 = 10;  
在c1列上無索引,如何檢索  
在c1列上有索引,如何檢索  
B:select * from t1 where c1 =10 and c2 between 5 and 10 and c3 like ‘A%’  
僅在c1列上有索引  
在c1,c2和c3列上有單獨的索引  
在c1,c2和c3列上有聯合索引  
此處可以填加索引匹配規則和進階規則,比較難理解!!  
<2>、兩個或多個表上索引查詢的介紹:  
(1)、使用迴圈嵌套法執行查詢  
A:select t1.c1,t1.c2,t2.c3,t2.c4 from t1,t2 where t1.c1=10 and t1.c2 =t2.c3  
介紹查詢的方法,看看哪列上最需要索引。  
B:select t1.c1,t1.c2,t2.c3,t2.c4 from t1,t2 where t1.c1=10 and t2.c4 = 10 and t1.c2 =t2.c3  
(2)、使用歸併串連執行串連查詢  
例:select t1.c1,t1.c2,t2.c3,t2.c4 from t1,t2 where t1.c1=10 and t2.c4 = 10 and t1.c2 =t2.c3  
(3)、三個以上的表進行串連查詢採取的規則或者方法  
(2)、GROUP BY:實現簡單分組的功能,當用group by時,查詢選擇列中除了在group by中出現的和常量外,其他的列上要用分組函數。可以使用一些分組函數實現一些列不在group by中出現,min,max等。  
(3)、HAVING的使用,對一些分組列進行條件判斷。  
(4)、ORDER BY子句使得SQL在顯示查詢結果時將各返回行按順序排列,返回行的排列順序由ORDER BY 子句指定的運算式的值確定。  
2、DELETE:從表中刪除記錄  
文法格式:  
DELETE FROM tablename WHERE (conditions)  
3、INSERT:向表中插入記錄  
文法格式:  
INSERT INTO tablename (col1,col2,…) VALUES (value1,value2,…);  
INSERT INTO tablename (col1,col2,…) VALUES (value1, value2,…), (value1, value2,…),……  
Insert不會等待任何程式,不會導致鎖定。  
4、UPDATE:  
文法格式:  
UPDATE tabname SET (col1=values1,col2=values2,…) WHERE (conditions);  
註:update的速度比較慢,要在相應列上建立索引。  
  
DCL—資料控制語言  
  
GRANT—授予使用者權限  
REVOKE—撤消使用者權限  
COMMIT—提交事務,可以使資料庫的修改永久化  
ROLLBACK—復原事務,消除上一個COMMIT命令後的所做的全部修改,使得資料庫的內容恢複到上一個COMMIT執行後的狀態.。  
  
1、GRANT:所有著或者管理員把存取權限賦給其他使用者  
文法格式:  
grant [all privileges|privileges,….] on tabname | viewname to [public|user,….]  
2、REVOKE:取消某一使用者的某中存取權限  
文法格式:  
Revoke [all privileges|privileges,….] on tabname | viewname from [public|user,….]  
註:不能取消執行個體層級的使用者的任何許可權,他們不是通過grant授權的,是通過組實現的許可權。  
3、COMMIT:把事務中所做的修改永久化記錄到資料庫。  
文法格式:  
commit [work]  
4、ROLLBACK:將上次提交以來所做的更改全部撤消。  
文法格式:  
Rollback [work]  
  
進階sql簡單介紹  
一、查詢間使用運算詞  
A: UNION 運算子  
UNION 運算子通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重複行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重複行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。  
B: EXCEPT 運算子  
EXCEPT 運算子通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重複行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重複行。  
C: INTERSECT 運算子  
INTERSECT 運算子通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重複行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重複行。  
註:使用運算詞的幾個查詢結果行必須是一致的。  
二、外串連  
A、left outer join:  
左外串連(左串連):結果集幾包括串連表的匹配行,也包括左串連表的所有行。  
B:right outer join:  
右外串連(右串連):結果集既包括串連表的匹配串連行,也包括右串連表的所有行。  
C:full outer join:  
全外串連:不僅包括符號串連表的匹配行,還包括兩個串連表中的所有記錄。  
  
註:複合外串連按照從左至右的順序執行串連,左邊串連的結果集和右邊串連  
三、超級分組和移動函數  
A:grouping sets:用來在單個sql中形成多級分組。  
例:select company_id,node_id,count(customer_id) from customer group by grouping sets(company_id,node_id)  
B:rollup:可以在單個資料庫操作中形成多個分組。  
例:select company_id,node_id,count(customer_id) from customer group by rollup(company_id,node_id)  
註:rollup操作不是可交換的操作,指定使用者組的順序是很重要的。  
C:cube: 產生分組表中分組的所有組合。  
例:select company_id,node_id,count(customer_id) from customer group by cube(company_id,node_id)  
D:over:移動函數可以協助實現移動的資料分析  
Select date,avg(qty) over(order by date rows between 1 preceding and 1 following) as values from sale  
  
附錄:常用函數介紹  
1、類型轉化函數:  
轉化為數字類型的:  
decimal, double, Integer, smallint,real  
Hex(arg):轉化為參數的16進位表示。  
轉化為字串類型的:  
char, varchar  
Digits(arg):返回arg的字串標記法,arg必須為decimal。  
轉化為日期時間的:  
date, time,timestamp  
2、時間日期:  
year, quarter, month, week, day, hour, minute ,second  
dayofyear(arg):返回arg在年內的天值  
Dayofweek(arg):返回arg在周內的天值  
days(arg):返回日期的整數標記法,從0001-01-01來的天數。  
midnight_seconds(arg):午夜和arg之間的秒數。  
Monthname(arg):返回arg的月份名。  
Dayname(arg):返回arg的星期。  
3、字串函數:  
length,lcase, ucase, ltrim, rtrim  
Coalesce(arg1,arg2….):返回參數集中第一個非null參數。  
Concat (arg1,arg2):串連兩個字串arg1和arg2。  
insert(arg1,pos,size,arg2):返回一個,將arg1從pos處刪除size個字元,將arg2插入該位置。  
left(arg,length):返回arg最左邊的length個字串。  
locate(arg1,arg2,<pos>):在arg2中尋找arg1第一次出現的位置,指定pos,則從arg2的pos處開始找arg1第一次出現的位置。  
posstr(arg1,arg2):返回arg2第一次在arg1中出現的位置。  
repeat(arg1 ,num_times):返回arg1被重複num_times次的字串。  
replace(arg1,arg2,arg3):將在arg1中的所有arg2替換成arg3。  
right(arg,length):返回一個有arg左邊length個位元組組成的字串。  
space(arg):返回一個包含arg個空格的字串。  
substr(arg1,pos,<length>):返回arg1中pos位置開始的length個字元,如果沒指定length,則返回剩餘的字元。  
4、數學函數:  
Abs, count, max, min, sum  
Ceil(arg):返回大於或等於arg的最小整數。  
Floor(arg):返回小於或等於參數的最小整數。  
Mod(arg1,arg2):返回arg1除以arg2的餘數,符號與arg1相同。  
Rand():返回1到1之間的隨機數。  
Power(arg1,arg2):返回arg1的arg2次方。  
Round(arg1,arg2):四捨五入截斷處理,arg2是位元,如果arg2為負,則對小數點前的數做四捨五入處理。  
Sigh(arg):返回arg的符號指示符。-1,0,1表示。  
truncate(arg1,arg2):截斷arg1,arg2是位元,如果arg2是負數,則保留arg1小數點前的arg2位。  
  
5、其他:  
nullif(arg1,arg2):如果2個參數相等,則返回null,否則,返回參數1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.