午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

有時(shí)間可以看看復(fù)習(xí)一下oracle-總結(jié)(轉(zhuǎn))

 javaxiaop 2010-10-30
一.Oracle數(shù)據(jù)庫(kù)中常用的數(shù)據(jù)類型
varchar2(長(zhǎng)度)可變長(zhǎng)字符串
char(長(zhǎng)度) 定長(zhǎng)
number()表示整數(shù)或者浮點(diǎn)數(shù)number(8) number(8,2)
clog 字符的大對(duì)象
blog 二進(jìn)制的大對(duì)象

二.數(shù)據(jù)庫(kù)查詢
1)SELECT語(yǔ)句
從表中提取查詢數(shù)據(jù).語(yǔ)法為SELECT [DISTINCT] {column1,column2,…} FROM tablename WHERE {conditions} GROUP BY {conditions} ORDER BY {expressions} [ASC/DESC];
說(shuō)明:SELECT子句用于指定檢索數(shù)據(jù)庫(kù)的中哪些列,F(xiàn)ROM子句用于指定從哪一個(gè)表或視圖中檢索數(shù)據(jù)。
2)WHERE子句。
WHERE子句用來(lái)選擇符合條件的的記錄.
like '...' 通配查詢 _,%
between ... and ... ,表示結(jié)果在這之間,between and是一個(gè)閉區(qū)間。
!=,<>,^=,這三個(gè)都可以表示不等于。
in (va1,val2,...) 判斷結(jié)果是否在這個(gè)集合中存在 。
like '...' 字符串通配查詢,'%'表示0或多個(gè)字符,'_'表示一個(gè)字符。
... and ... 表示只有兩個(gè)條件同時(shí)滿足
... or ... 表示條件只要滿足其中之一就可以
all ... 是要求都滿足條件。
not .....,則是可以與以上的條件產(chǎn)生反效果。
... is null 使用來(lái)判斷值是不是空。
3) ORDER BY子句
ORDER BY 子句使得SQL在顯示查詢結(jié)果時(shí)將各返回行按順序排列,返回行的排列順序由ORDER BY 子句指定的表達(dá)式的值確定。
ASC(默認(rèn),升序) DESC(降序)
order by 目標(biāo)列名(別名) 排序順序(不寫排序順序,會(huì)默認(rèn)為升序排序)
例:select first_name from s_emp order by first_name;
select first_name from s_emp order by first_name desc;

三.SQL常用的命令分類及例子
數(shù)據(jù)定義語(yǔ)言:create(創(chuàng)建)、alter(更改)和drop(刪除)命令。
數(shù)據(jù)操縱語(yǔ)言:insert(插入)、select(選擇)、delete(刪除)和update(更新)命令。
事務(wù)控制語(yǔ)言:commit(提交)、savepoint(保存點(diǎn))和rollback(回滾)命令。
數(shù)據(jù)控制語(yǔ)言:grant(授予)和revoke(回收)。
1.數(shù)據(jù)定義語(yǔ)言舉例:
SQL> create table myTab(no number(4),name varchar2(20));創(chuàng)建一個(gè)名為myTab的表,包含兩列no和name;
SQL> alter table myTab modify (name varchar2(25));修改myTab中的name列,使此列能容納25個(gè)字符;
SQL> alter table myTab add (tel_no varchar2(20));給表myTab增加一列tel_no;
SQL> alter table myTab drop column tel_no;刪除表myTab的tel_no列;
SQL> drop table myTab;刪除表myTab;
SQL> truncate table myTab;刪除表myTab中的所有行(截?cái)啾恚?注意:不可以回滾。

2.數(shù)據(jù)操縱語(yǔ)言舉例:
SQL> insert into myTab values(‘001’,’John’);
向表myTab中插入一行數(shù)據(jù);
SQL> select distinct salary “薪水” from s_emp where salary>1500 order by sal desc;
選擇表中salary大于1500的數(shù)據(jù),以別名“薪水”顯示并按照salary的降序進(jìn)行排列輸出;
SQL> create table empa as select empno,ename,job,sal from emp;
從emp表中選擇“empno,ename,job,sal”四列的數(shù)據(jù)建立新表empa;
SQL> create table empa as select * from emp where 1=2;
使用一個(gè)假條件根據(jù)現(xiàn)有表emp創(chuàng)建一個(gè)只包含結(jié)構(gòu)的空表empa;
SQL> delete from empa where sal<1500;
刪除表empa中sal小于1500的行;
SQL> update empa set sal=1500 where sal<1500;更新,將表empa中sal小于1500的行的sal值全部改為1500。

3.事務(wù)控制語(yǔ)言舉例:
SQL> commit;用于提交并結(jié)束事務(wù)處理;
SQL> savepoint mark1;保存點(diǎn)類似于標(biāo)記,用來(lái)標(biāo)記事務(wù)中可以應(yīng)用回滾的點(diǎn);
SQL> rollback to savepoint mark1;回滾到保存點(diǎn)mark1。

四.Oracle數(shù)據(jù)庫(kù)函數(shù)
注意:dual表(虛表)是專門用于函數(shù)測(cè)試和運(yùn)算的.
1.字符函數(shù)
   字符是大小寫敏感的
   轉(zhuǎn)小寫 lower(字段名)
   轉(zhuǎn)大寫 upper(字段名)
   首字母大寫 initcap(字段名)
   字符串拼接 concat(字段1, 字段2)
   截取子串 substr(字段名, 起始位置,取字符個(gè)數(shù))
例: select first_name,substr(first_name,2,2) sub from s_emp;(從名字的第二個(gè)字符開始取兩個(gè)字符)
select first_name,substr(first_name,-2,2) sub from s_emp;(從名字的倒數(shù)第二個(gè)字符開始取兩個(gè)字符)
2.數(shù)值函數(shù)
   四舍五入函數(shù) round(數(shù)據(jù),保留到小數(shù)點(diǎn)后幾位)
   1表示保留到小數(shù)點(diǎn)后一位,-1表示保留到小數(shù)點(diǎn)前一位。
   例:select round(15.36,1) from dual;
   截取數(shù)值函數(shù) trunc(數(shù)據(jù),保留到小數(shù)點(diǎn)后幾位)
   例:select trunc(123.456,1) from dual;
截取到小數(shù)點(diǎn)后一位,注意:與round函數(shù)不同,不會(huì)四舍五入。
3.日期函數(shù)
   缺省日期格式,日-月-年 dd-mon-rr
   修改當(dāng)前會(huì)話的日期格式,會(huì)按照指定的格式輸出日期
   alter session set nls_date_format='yyyy mm dd hh24:mi:ss';
   返回當(dāng)前日期 sysdate
   例:select sysdate from dual;
4.不同數(shù)據(jù)類型間轉(zhuǎn)換函數(shù)
   將日期轉(zhuǎn)成字符 tochar(date,'日期格式')
   日期格式要用有效格式,格式大小寫敏感 'yyyy mm dd hh24:mi:ss'(標(biāo)準(zhǔn)日期格式),'year'(年的全拼),'month'(月的全拼),'day'(星期的全拼),'ddspth' (日期的全拼)
   例:select to_char(sysdate,'yyyy mm dd hh24:mi:ss')from dual;
select to_char(sysdate,'year month day ddspth')from dual;
   將字符串轉(zhuǎn)成日期 to_date('...','日期格式')
   例:select to_char(to_date('2006 11 03','yyyy mm dd'),'dd-month-yy') from dual;

五.表連接(關(guān)聯(lián)查詢)
等值連接
select table1.column1,table2.column2
from table1 t1,table2 t2
where t1.column3=t2.column4;
表連接時(shí),當(dāng)表與表之間有同名字段時(shí),可以加上表名或表的別名,加以區(qū)分,使用時(shí)要用表名.字段名或表別名.字段名(列名)。當(dāng)表的字段名是唯一時(shí),可以不用加上表名或表的別名。
注意:當(dāng)為表起了別名,就不能再使用表名.字段名了。
例如:select e.first_name ||’ ’|| e.last_name name,
d.name dept_name
from s_emp e, s_dept d
where e.dept_id=d.id;

非等值連接
select [表別名1.字段名1],[表別名2.字段名2],...
from 表1 表別名1 ,表2 表別名2
where 表別名1.字段名3 ..... 表別名2.字段名4
....可以使比較運(yùn)算符,也可以使其他的除了'='的運(yùn)算符
例:select first_name, salary
from s_emp
where salary between 1000 and 2000;

自連接
把一個(gè)表的兩個(gè)字段關(guān)系轉(zhuǎn)換成兩個(gè)表字段之間的關(guān)系.
select [表別名1.字段名1],[表別名2.字段名2],...
from 表1 表別名1 ,表1 表別名2
where 表別名1.字段名3=表別名2.字段名4;
例:select a.first_name ename,b.first_name cname
from s_emp a,s_emp b
where a.manager_id=b.id;

外連接
使用一張表中的所有記錄去和另一張表中的記錄按條件匹配(空值也會(huì)匹配)這個(gè)表中的所有記錄都會(huì)顯示。
//想在哪邊模擬記錄就在哪邊加上(+)
1. LEFT OUTER JOIN:左外連接
SELECT e.last_name, e.dept_id, d.name
FROM s_emp e
LEFT OUTER JOIN s_dept d
ON (e.dept_id = d.id);
等價(jià)于
SELECT e.last_name, e.dept_id, d.name
FROM s_emp e, s_dept d
WHERE e.dept_id=d.id(+);
結(jié)果為:所有員工及對(duì)應(yīng)部門的記錄,包括沒(méi)有對(duì)應(yīng)部門編號(hào)dept_id的員工記錄。
2. RIGHT OUTER JOIN:右外連接
SELECT e.last_name, d.name
FROM s_emp e
RIGHT OUTER JOIN s_dept d
ON (e.dept_id = d.id);
等價(jià)于
SELECT e.last_name,d.name
FROM s_emp e, s_dept d
WHERE e.dept_id(+)=d.id;
結(jié)果為:所有員工及對(duì)應(yīng)部門的記錄,包括沒(méi)有任何員工的部門記錄。
3. FULL OUTER JOIN:全外關(guān)聯(lián)
SELECT e.dept_id,d.id
FROM s_emp e
FULL OUTER JOIN s_dept d
ON (e.dept_id = d.id);

結(jié)果為:所有員工及對(duì)應(yīng)部門的記錄,包括沒(méi)有對(duì)應(yīng)部門編號(hào)department_id的員工記錄和沒(méi)有任何員工的部門記錄。
六.組函數(shù)
group by把 select 的結(jié)果集分成幾個(gè)小組,這個(gè)group by 子句可以跟在 select 語(yǔ)句后或是 having前面。group by子句也會(huì)觸發(fā)排序操作,會(huì)按分組字段排序。
select [組函數(shù)或分組的字段名]... from 表名 group by [字段名1],[字段名2],.....;
例:select avg(salary) from s_emp group by dept_id;
注意:組函數(shù)會(huì)忽略空值,但是count(*)除外,他會(huì)把空記錄也記錄在內(nèi)。avg和sum這兩個(gè)函數(shù)的參數(shù)只能是number型的。
以下所提到的函數(shù)可以使用任意類型做參數(shù)。
max(..),min(..)求最大值和最小值,
count(*)統(tǒng)計(jì)表中記錄數(shù)。
例:select max(b.name),avg(a.salary), max(c.name)
from s_emp a,s_dept b,s_region c
where a.dept_id=b.id
and b.region_id=c.id
group by b.id;
注意:只要寫了group by子句,select后就只能用group by之后的字段或者是組函數(shù)。having子句可以過(guò)濾組函數(shù)結(jié)果或是分組的信息,并且寫在group by子句后。

七.子查詢
可以嵌在sql語(yǔ)句中的select語(yǔ)句。
在select語(yǔ)句中嵌套子查詢時(shí),會(huì)先執(zhí)行子查詢。一般的會(huì)將子查詢放在運(yùn)算符的右邊。
注意:在使用子查詢時(shí),要注意這個(gè)運(yùn)算符是單行的(也就是只能是單值),還是多行運(yùn)算符(范圍,多值)。配合使用子查詢返回的結(jié)果必須符合運(yùn)算符的用法。
例:
select first_name||' '||last_name name
from s_emp
where title in (select title from s_emp
where dept_id=42);
查詢和42部門員工職位相同的所有員工的姓名

八.約束
針對(duì)表中的字段進(jìn)行定義的。
primary key(主鍵約束 PK)保證實(shí)體的完整性,保證記錄的唯一
主鍵約束,唯一且非空,并且每一個(gè)表中只能有一個(gè)主鍵,有兩個(gè)字段聯(lián)合作為主鍵時(shí),將兩個(gè)字段放在一起唯一標(biāo)識(shí)記錄,叫做聯(lián)合主鍵。
主鍵約束的定義:
第一種定義形式:
create table test(c number primary key );        列級(jí)約束
第二種定義形式:
create table test(c number , primary key(c) ) ;        表級(jí)約束
create table test(c1 number constraints   pk_c1 primary key );   此約束有名字: pk_c1
create table   test(c number , c2 number , primary key (c ,c1) ) ; 用表級(jí)約束可以實(shí)現(xiàn)聯(lián)合主鍵

foreign key(外鍵約束 FK)保證引用的完整性,外鍵約束,外鍵的取值是受另外一張表中的主鍵或唯一鍵的約束,不能夠取其他值,只能夠引用主鍵或唯一鍵的值,被引用的表,叫做 parent table(父表),引用方的表叫做child table(子表),要想創(chuàng)建子表,就要先創(chuàng)建父表,記錄的插入也是如此,先父表后子表,刪除記錄,要先刪除子表記錄,后刪除父表記錄,要修改記錄,如果要修改父表的記錄要保證沒(méi)有被子表引用。要?jiǎng)h表時(shí),要先刪子表,后刪除父表。(可以通過(guò)使用cascade constraints 選項(xiàng)來(lái)刪除父表)
carete   table     parent(c1 number primary key );
create   table    child (c number primary key ,   c2 number references parent(c1));
或表級(jí)約束定義:
create   table child( c number primary key , c2 number , foreign key(c2) references parent(c1));
非空約束(not null)這是一個(gè)列級(jí)約束,在建表時(shí),在數(shù)據(jù)類型的后面加上 not null ,也就是在插入時(shí)不允許插入空值。
例:create table student(id number primary key,name varchar2(32) not null,address varchar2(32));
unique 唯一約束
唯一約束,允許為空,要求插入的記錄中的值是唯一的。
例:create table student(id number,name varchar2(32),address varchar2(32),primary key (id),unique (address));
check約束
檢查約束,可以按照指定條件,檢查記錄的插入。check中不能使用偽列,不能使用函數(shù),不能引用其他字段。
例:create table sal (a1 number , check(a1>1000));

九.數(shù)據(jù)字典
數(shù)據(jù)字典是由系統(tǒng)維護(hù)的,包含數(shù)據(jù)庫(kù)的信息
數(shù)據(jù)字典示圖
user_XXXXX 用戶示圖
all_XXXXX 所有示圖
dba_XXXXX 數(shù)據(jù)庫(kù)中所有示圖
v$_XXXXX   動(dòng)態(tài)性能示圖

dict或 dictionary 表示數(shù)據(jù)字典的數(shù)據(jù)字典。
user_constraints 用戶的表中約束的表
其中有constraints_name字段存放的是約束名,constraint_type字段存放的是約束的類型,r_constraints_name字段表示外鍵引用自何處.
user_cons_column表,是用戶的列級(jí)約束表,column_name字段存放的是約束字段的名字,position字段存放的是約束在聯(lián)合鍵中的位置.

十.事務(wù)transaction
原子操作,也就是不可分割的操作,必須一起成功一起失敗。
事務(wù)的結(jié)束動(dòng)作就是commit,DDL,DCL語(yǔ)句執(zhí)行會(huì)自動(dòng)提交commit。
sqlplus正常退出是會(huì)做提交動(dòng)作的commit;,當(dāng)系統(tǒng)異常推出是,會(huì)執(zhí)行回滾操作rollback;。
一個(gè)沒(méi)有結(jié)束的事務(wù),叫做活動(dòng)的事務(wù) (active transaction),活動(dòng)的事務(wù)中修改的數(shù)據(jù),只有本會(huì)話才能看見(jiàn)。

十一.Oracle中的偽列
偽列就像Oracle中的一個(gè)表列,但實(shí)際上它并未存儲(chǔ)在表中。偽列可以從表中查詢,但是不能插入、更新或刪除它們的值。常用的偽列:rowid和rownum。
rowid:數(shù)據(jù)庫(kù)中的每一行都有一個(gè)行地址,rowid偽列返回該行地址??梢允褂胷owid值來(lái)定位表中的一行。通常情況下,rowid值可以唯一地標(biāo)識(shí)數(shù)據(jù)庫(kù)中的一行。
rowid偽列有以下重要用途:
1)能以最快的方式訪問(wèn)表中的一行;
2)能顯示表的行是如何存儲(chǔ)的。
3)可以作為表中行的唯一標(biāo)識(shí)。
如:SQL> select rowid,ename from emp;
rownum:對(duì)于一個(gè)查詢返回的每一行,rownum偽列返回一個(gè)數(shù)值代表的次序。
rownum偽列特點(diǎn):
1) 有個(gè)特點(diǎn)要么等于1 要么小于某個(gè)值, 不能直接等于某個(gè)值, 不能大于某個(gè)值。
2)常用于分頁(yè)顯示。
返回的第一行的rownum值為1,第二行的rownum值為2,依此類推。通過(guò)使用rownum偽列,用戶可以限制查詢返回的行數(shù)。
如:SQL>select * from emp where rownum<11; 從emp表中提取10條記錄。

十二.序列(sequence)
create sequence 序列名;
(不帶參數(shù)時(shí)默認(rèn)為從1 開始每次遞增 1,oracle中為了提高產(chǎn)生序列的效率一般一次性產(chǎn)生20個(gè)序列放入當(dāng)前會(huì)話的序列池中備用以加快效率)

sequence 的參數(shù):
increment by n   起始值
start with n     遞增量
maxvalue n       最大值
minvalue n       最小值
cycle|no cycle     循環(huán)
cache n          緩存(第一次取時(shí)會(huì)一次取多少個(gè)id存起來(lái))

查看sequence 示圖:
desc    user_sequences ;
select   sequence_name , cache_size , last_number from user_sequences   where   sequence_name like 's_';
select 序列名.currval from   dual    查看當(dāng)前的序列數(shù)
select 序列名.nextval from   dual    查看下一個(gè)序列數(shù),它會(huì)自動(dòng)給當(dāng)前的序列加1
刪除序列sequence
drop sequence 序列名;

十三. 視圖(View)
視圖就相當(dāng)于一條select 語(yǔ)句,定義了一個(gè)視圖就是定義了一個(gè)sql語(yǔ)句, 視圖不占空間,使用視圖不會(huì)提高性能,但是能簡(jiǎn)化sql語(yǔ)句
創(chuàng)建視圖:
creating views視圖名;
如:
create or replace views test as select * from test1 where c1=1;
create or replace:如果view存在就覆蓋,不存在才創(chuàng)建。
force|no force:基表存在時(shí)使用,不存在時(shí)則創(chuàng)建該表。
注意:向視圖中插入數(shù)據(jù)時(shí),會(huì)直接插進(jìn)基表中,查看視圖中的數(shù)據(jù)時(shí),相當(dāng)于就是執(zhí)行創(chuàng)建時(shí)的select語(yǔ)句。
刪除視圖:
drop views視圖名;
試圖的約束:
with read only視圖只讀約束
with check option 不允許插入與where條件不符的記錄,類似于check約束的功能.
create view test_cc
as select * from test
where c1>10
with check option;

十四.索引(index)
建立索引的目的就是為了加快查詢速度,建立索引后會(huì)使DML操作效率慢,但是對(duì)用戶查詢會(huì)提高效率。刪除一個(gè)表時(shí),相對(duì)應(yīng)的索引也會(huì)刪除。另外,索引是會(huì)進(jìn)行排序。
創(chuàng)建一個(gè)索引:
create index 索引名 on 表名 (字段名);
create index test_index on test(c1);
刪除索引:
drop index test_index;
注意:創(chuàng)建索引就是為了減少物理讀,索引會(huì)減少掃描的時(shí)間。在經(jīng)常要用到where的子句的字段,應(yīng)該使用索引,另外還要看所查詢的數(shù)據(jù)與全部數(shù)據(jù)的百分比,表越大,查詢的記錄越少,索引的效率就越高.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多