插入數(shù)據(jù):語(yǔ)法: insert intotable (column1, column2, …) values (column1_value,column2_value, …) 注意格式: 數(shù)值型字段可以直接寫值 字符型字段,其值要加上單引號(hào) 日期型字段,其值要加上單引號(hào),同時(shí)還要注意年、月、日的順序?;蛘呤褂胻o_date ()函數(shù)將字符串轉(zhuǎn)化為日期類型 插入列排序和插入值要一一對(duì)應(yīng),非空列必須有值 注意: 由于insert、update和delete等操作需要影響數(shù)據(jù)表中的記錄,使用commit指令提交所有的操作,使用rollback指令回滾所有的操作 如果向表中插入所有的字段,可以省略列的列表,但是必須包括所有的列的值,而 且和數(shù)據(jù)表中的定義順序一致 更新數(shù)據(jù):語(yǔ)法: update table set column1=value1, column2=value2, … where condition 范例: update empset empno=8888, ename=‘Jacky’ where empno=7566 刪除數(shù)據(jù):語(yǔ)法: delete from table where condition 范例: delete fromemp where empno=8888; 創(chuàng)建表語(yǔ)法: create table table_name ( column1 type1, column2 type2, …… 完整性約束…… ) 范例: create table employees ( emp_no number not null, emp_fname varchar2(20) not null, emp_lname varchar2(20) not null, dept_no varchar2(4) not null ) 修改表結(jié)構(gòu):增加列 語(yǔ)法:alter table table_nameadd column_name type 范例:alter tableemployees add phone varchar2(20) 更新列 語(yǔ)法:alter tabletable_name modify column_name type 范例: alter tableemployees modify phone varchar2(30) 更新列時(shí)應(yīng)注意: 一般情況下,只能把數(shù)據(jù)的長(zhǎng)度從低到高改變,不能從高到低改變??梢园涯撤N數(shù)據(jù)類型改變?yōu)榧嫒莸臄?shù)據(jù)類型 當(dāng)表中沒(méi)有數(shù)據(jù)時(shí),可以把數(shù)據(jù)的長(zhǎng)度從高到低改變,可以把某種數(shù)據(jù)類型改變?yōu)槠渌鼣?shù)據(jù)類型 刪除列 語(yǔ)法: alter tabletable_name drop column column_name 范例: alter tableemployees drop column phone 刪除表:語(yǔ)法: drop tabletable_name 范例: drop tableprojects 約束語(yǔ)法: alter table table_name add constraint constraint_name constraint_expression 分類: 主鍵約束(primary key):唯一的標(biāo)識(shí),本身不能為空 范例:給person表加主鍵約束 constraint person_pid_pkprimary key(pid); 唯一約束(unique):在一張表中只允許建立一個(gè)主鍵約束,而其他列如果不希望出現(xiàn)重復(fù)值的話,就可以使用唯一約束 范例:給person表的name加唯一約束 constraint person_name_ukunique(name); 檢查約束(check):檢查一個(gè)列的內(nèi)容是否合法 范例:給person表的性別列加上約束 constraint person_sex_ckcheck(sex in(‘男’,’女’)); 非空約束(not null):內(nèi)容不可以為空 范例:name varchar(10) not null, 外鍵約束(foreign key):在兩張表中進(jìn)行操作 范例:給person表和book表加外鍵約束 constraint person_book_fkforeign key(pid) references person(pid); 添加約束 語(yǔ)法: Alert table 表名稱 add constraint 約束名稱 約束類型(約束字段) 刪除約束 語(yǔ)法: alert table 表名 drop constraint 約束名稱 級(jí)聯(lián)刪除 步驟: 1. 先創(chuàng)建一個(gè)無(wú)任何約束的book表。 2. 再創(chuàng)建另一個(gè)帶有主鍵的person表。 3. 給book表加主鍵,給person表加外鍵 alert table book add constraint book_pid_pkprimary key(bid); alert table book constraint person_book_fkforeign key(pid) references person(pid) on delete cascade; 4.在刪除person表中信息的時(shí)候,有關(guān)book表中的內(nèi)容也會(huì)被刪除
結(jié)構(gòu)化查詢語(yǔ)句(SQL)SQL語(yǔ)言組成: 1.數(shù)據(jù)定義語(yǔ)言DDL(DataDefinition Language) 它是SQL中用來(lái)生成、修改、刪除數(shù)據(jù)庫(kù)基本要素(表、視圖、模式、目錄等)的部分。(CREATE,DROP,ALTER) 2.數(shù)據(jù)操縱語(yǔ)言DML(DataManipulation Language) 是SQL運(yùn)算數(shù)據(jù)庫(kù)的部分,它是對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)輸入、修改及提取的有力工具。(INSERT,UPDATE ,DELETE,SELECT) 3.數(shù)據(jù)控制語(yǔ)言DCL(Data ControlLanguage) 提供數(shù)據(jù)庫(kù)完整性所必需的防護(hù)措施。(GRANT,REVOKE) 數(shù)據(jù)庫(kù)服務(wù)器的關(guān)閉、啟動(dòng)等 SQL語(yǔ)言的優(yōu)點(diǎn) (1)一體化特點(diǎn): 使用SQL可實(shí)現(xiàn)數(shù)據(jù)庫(kù)生命周期中的全部活動(dòng) (2)高度非過(guò)程化: 它是一種非過(guò)程化語(yǔ)言,允許用戶依據(jù)做什么來(lái)說(shuō)明操作,而不用說(shuō)明怎樣做,存取路徑的選擇和操作過(guò)程由系統(tǒng)自動(dòng)完成 (3)語(yǔ)言簡(jiǎn)潔,易學(xué)易用 (4)統(tǒng)一的語(yǔ)法結(jié)構(gòu)對(duì)待不同的工作方式 無(wú)論是聯(lián)機(jī)交互使用,還是嵌入到高級(jí)語(yǔ)言中,其語(yǔ)法結(jié)構(gòu)是基本一致的,這就大大改善了最終用戶和程序設(shè)計(jì)人員之間的交流 基本單表查詢查詢所有記錄: select* from 表名稱; 查詢所有記錄的某些字段: selectcolumn1,column2…… from 表名稱 取消重復(fù)項(xiàng): selectdistinct column1,column2…… from 表名稱 顯示字段的別名: selectdistinct column1 as 別名1,column2 as 別名2…… from 表名稱 單條件查詢: selectdistinct * from 表名稱{where 條件(s)} 比較運(yùn)算符: =(等于) select *from emp where job=‘MANAGER’ <>、!=、^=(不等于) select * from emp where sal<>1100 <(小于) select * fromemp where sal<2000 >(大于) select * fromemp where sal>2000 <=(小于等于) select * fromemp where sal<=2000 >=(大于等于) select * fromemp where sal>=2000 in(列表) select * fromemp where sal in (1000, 2000, 3000) not in(不在列表) select * fromemp where sal not in (1000, 2000, 3000) between…and…(介于之間) select * fromemp where sal between 1000 and 2000 not between…and…(不介于之間) select * fromemp where sal not between 1000 and 2000 is null(是否為空) select * fromemp where comm is null (注意,區(qū)別null和0,空字符串‘’) is not null(是否不為空) select * fromemp where comm is not null 組合條件查詢: select empno,ename, sal from emp where job=‘CLERK’ and sal<=2500 組合查詢中使用的邏輯比較符: and(與) select * from emp where job=‘CLERK’ and sal<>2000 or(或) select * from emp where job=‘MANAGER’ or sal<>2000 not(非) select * from emp where not job=‘MANAGER’ 模糊查詢: like(模式匹配,檢驗(yàn)一個(gè)包含字符串?dāng)?shù)據(jù)的字段值是否匹配一指定模式) not like(模式不匹配) 通配符含義: _:任何一個(gè)單一的字符 %:任意長(zhǎng)度的字符 范例: select * from emp where job like ‘%M%; 注:如果在使用like的時(shí)候沒(méi)有指定查詢的關(guān)鍵字,則表示全部查詢 select * from emp where job like ‘%%’; 排序查詢: 語(yǔ)法: select distinct * from 表名稱 {where 條件(s)} {orderby 排序的字段1 ,排序的字段2 asc|desc(升序|降序)} 范例:查詢emp表并按sal進(jìn)行降序排列 select *from emp order by sal desc; 聚合函數(shù): count(*) :返回所有行記錄數(shù) select count(*) from emp count (列名):返回表達(dá)式非null的行記錄數(shù) select count(mgr) from emp min(列名):返回表達(dá)式最小值 select min(sal) from emp max(列名):返回表達(dá)式最大值 select max(sal) from emp sum(列名):返回表達(dá)式的總和 select sum(sal) from emp avg(列名):返回表達(dá)式的平均值 select avg(sal) from emp 字符函數(shù): substr(string,start,count):取子字符串,從start開始,取count個(gè) selectsubstr(’13088888888’,3,8) from dual; length :返回字符串的長(zhǎng)度 selectname,length(name) from gao.nchar_tst; replace(m,n,l):內(nèi)容的替換 select replace(‘hello’,’ll’,’xx’)from dual; upper():在一個(gè)字符串不知道大小寫的情況下用 select * from empwhere ename=upper(‘smith’);結(jié)果返回大寫 lower():將一個(gè)字符串變?yōu)樾懽帜副硎?/strong> select lower(‘HELLO’)from dual; initcap():將單詞的首字母大寫 select initcap(‘HELLO’)fromdual; 數(shù)值函數(shù): ceil (n):取大于等于數(shù)值n的最小整數(shù) select ceil(756.584) from dual; 結(jié)果是:757 floor (n):取小于等于數(shù)值n的最大整數(shù) select floor(756.584) from dual; 結(jié)果是: 756 round (m, n):四舍五入,保留n位 select round(756.584) from dual; 結(jié)果是:757 mod (m, n):取m整除n后的余數(shù) select mod(10,3) from dual; 結(jié)果是:1 power (m, n):取m的n次方 select mod(2,3) from dual; 結(jié)果是:8 trunc(n):截?cái)嘈?shù)位 select trunc(756.584) from dual; 結(jié)果是:756 日期函數(shù): last_day():給定日期的最后一天 select last_day(sysdate) from dual; add_months(): 增加日期 select add_months(sysdate,2) from dual; months_between():給定日期范圍的月數(shù) selectempno,ename,months_between(sysdate,hiredate) from emp; next_day():下一個(gè)給定的日期的今天是哪個(gè)日期 selectnext_day (sysdate,’星期一’) from dual; current_date()返回當(dāng)前會(huì)話時(shí)區(qū)中的當(dāng)前日期。 轉(zhuǎn)換函數(shù): to_char: a.根據(jù)格式把日期轉(zhuǎn)化成字符,b.對(duì)數(shù)字進(jìn)行格式化,9代表了一位數(shù)字 c.用數(shù)字表示區(qū)域 其中:a.年:yyyy 月:MM 日:dd b.99,999 代表了五位數(shù)字 c.$:表示美元‘$‘ L:表示local的縮寫 ‘¥‘ select to_char(sysdate,'yyyy-mm-dd') from dual; 注:在1-9個(gè)月份中,顯示的時(shí)候系統(tǒng)會(huì)默認(rèn)加“0”,若想去掉“0”,則可以使用“fm”。即:’fmyyyy-mm-dd’ to_number:轉(zhuǎn)換成數(shù)字 selectto_number(‘123’)+to_number(‘123’) from dual; 結(jié)果是:246 to_date: 根據(jù)格式把字符轉(zhuǎn)化成日期 selectto_date(‘2009-8-6’,’yyyy-mm-dd’) from dual; 通用函數(shù): decode():類似于if…elseif…else if…else… select empno,ename,hirdatedecode(job,’clerk’,’業(yè)務(wù)員’,’salesman’,’銷售人員’,’manager’,’經(jīng)理’,’analyse’,’分析員’,’persident’,’總裁’) from emp; 其他常用函數(shù): ascii:返回與指定的字符對(duì)應(yīng)的十進(jìn)制數(shù) select ascii(’A’) A,ascii(’a’)a,ascii(’0’) zero,ascii(’ ’) space from dual chr:給出整數(shù),返回對(duì)應(yīng)的字符 select chr(54740) zhao,chr(65) chr65from dual; concat :連接兩個(gè)字符串 select concat(’010-’,’88888888’)||’轉(zhuǎn)23’ fromdual; rpad和lpad: 在左邊/右邊重復(fù)指定的字符 selectlpad(rpad(’gao’,10,’*’),17,’*’)from dual; trim/ltrim/rtrim: 去除空白字符
分組查詢: 語(yǔ)法: select distinct *|查詢列1 as 別名1,查詢列2 as 別名2…… from 表名稱 {where 條件(s)} {groupby 分組條件{Having 分組條件}}{order by 排序的字段1 ,排序的字段2 asc|desc(升序|降序)} 范例:selectjob, count(*) from emp group by job 注: 常和聚合函數(shù)一起使用 聚合函數(shù)如果作為條件,必須使用having子句 除了聚合函數(shù)以外,如果在查詢中顯示其他字段,該字段必須出現(xiàn)在group by分組列中 group by中不能使用列的別名,也不能使用序列號(hào) having中的聚合函數(shù)不能使用別名 內(nèi)連接: 語(yǔ)法: Selectcolumn_list from tab_1 [inner] join tab_2 on join_condition 其中: column_list表示將要檢索的列名列表 table_1和table_2表示將要連接的表的名稱 inner join關(guān)鍵字表示內(nèi)連接,其中inner是可選的 on是指定連接條件的關(guān)鍵字 join_condition表示內(nèi)連接的條件 范例: select e.empno, e.ename, d.dname from emp e inner join dept d on e.deptno=d.deptno 左右全連接: 語(yǔ)法: Selectcolumn_list form tab_1 [left|right|full] outer join tab_2 on join_condition 其中: left outer join表示左連接 right outer join表示右連接 full outer join表示全外連接。其中outer是可選的 其它的參數(shù)和內(nèi)連接相同 范例: select e.empno, e.ename, d.dname from emp e left outer join dept d on e.deptno=d.deptno 多表連接: 等值連接 selecte.empno, e.ename, d.dname from emp e, dept d where e.deptno=d.deptno 不等值連接 selecte.empno, e.ename, d.dname fromemp e, dept d wheree.deptno<>d.deptno and e.deptno=10 自連接: 使用自連接應(yīng)注意: 使用兩個(gè)不同的別名命名表 使用不平衡條件,例如大于或小于條件。如果使用平衡條件,則檢索結(jié)果會(huì)出現(xiàn)兩倍的冗余 自連接的結(jié)果一定要有實(shí)際意義 范例: selectd1.deptno, d1.dname, d2.loc from dept d1, dept d2 where d1.loc = d2.loc and d1.dname<> d2.dname 子查詢:在select查詢語(yǔ)句里可以嵌入select查詢語(yǔ)句,成為子查詢或嵌套查詢。子查詢形成的結(jié)果又成為父查詢的條件 使用子查詢應(yīng)注意: 子查詢可以嵌套多層 子查詢操作的數(shù)據(jù)表可以是父查詢不操作的數(shù)據(jù)表 子查詢中不能有orderby排序語(yǔ)句 范例: select empno, ename, job, sal from emp where sal>(select sal from emp whereename=‘WARD’) in(not in)操作符:指定一個(gè)查詢的范圍 select* from emp where sal in(select min(sal) from emp group by deptno ); any(some)操作符:=any:與in操作符一樣 >any:比里面最大的值大 <any:比里面最小的值小 select empno, ename, job, sal from emp where sal > any (select sal from emp where job=‘MANAGER’) all:所有滿足條件的 select empno, ename, job, sal from emp where sal > all (selectsal from emp where job=‘MANAGER’) exists:滿足條件的 select e.empno, e.ename, e.job, e.sal from emp e, dept d where exists (select * from emp wheredeptno=d.deptno) 并操作(union)的嵌套查詢: 并操作是集合中并集的概念,屬于集合A或集合B的元素的總和就是并集 select deptnofrom emp union (all) select deptno from dept union all和union不同之處在于unionall會(huì)將每一條符合條件的記錄都列出來(lái),無(wú)論記錄是否重復(fù) 交操作(intersect)的嵌套查詢: 交操作是集合中交集的概念,屬于集合A且屬于集合B的元素的總和就是交集 select deptnofrom emp intersect select deptno from dept 差操作(minus)的嵌套查詢: 差操作是集合中差集的概念,屬于集合A且不屬于集合B的元素的總和就是差集 select deptnofrom dept minus select deptno from emp rownum():表示行號(hào),實(shí)際上是一個(gè)列,但這個(gè)列是偽劣,此列可以在每張表中出現(xiàn)。且rownum采用自動(dòng)編號(hào)的形式出現(xiàn)。 范例: 查詢表emp的前5條記錄 select* from emp where rownum<=5 返回第4條到第10條記錄: select * from (select rownum as no, e.* from emp e whererownum<=10) where no>=4
以上是oracle的重點(diǎn) 下面的只做了解 索引:語(yǔ)法: create[unique] index index_name on table_name(column_name [,column_name…]) [tablespace tablespace_name] 其中參數(shù): unique:表示唯一性索引,即索引值不允許重復(fù) index_name:指定要?jiǎng)?chuàng)建的索引的名稱 table_name:要?jiǎng)?chuàng)建索引的目標(biāo)表名稱 column_name:索引的目標(biāo)列名稱 tablespace_name:索引所要位于的表空間的名稱。如果沒(méi)有指定,那么索引位于當(dāng)前用戶默認(rèn)的表空間中 為employees表的emp_fname列創(chuàng)建索引以加快查詢速度: create indexindex_fname on employees (emp_fname) 創(chuàng)建同義詞(SYNONYM): 同義詞(SYNONYM):可以理解為其它對(duì)象的一個(gè)別名,由它映射到另一個(gè)對(duì)象。 同義詞分為公有(public)同義詞和私有同義詞,僅有同義詞對(duì)所有用戶可見,默認(rèn)創(chuàng)建的同義詞是私有同義詞,只有某個(gè)用戶可見。 創(chuàng)建語(yǔ)法: create [public] synonym table_name for user.table_name; drop [public] synonym table_name; 序列:語(yǔ)法: createsequence sequence_name [start with start_number] [increment by increment_number] [(maxvalue maximum_number |nomaxvalue)] [(minvalue minimum_number |nominvalue)] [(cycle | nocycle)] [(cache cache_number| nocache)] [(order | noorder)] 其中參數(shù): sequence_name:指定序列的名稱 start_number:指定序列的起始整數(shù)值,默認(rèn)值為1 increment_number:指定序列的步長(zhǎng),即增量 maximum_number:指定序列的最大值 nomaxvalue:沒(méi)有最大值限制,這是默認(rèn)值 minimum_number:指定序列的最小值 nominvalue:沒(méi)有最小值的限制,這是默認(rèn)值 cycle:序列數(shù)值是否循環(huán)生成 nocycle:序列數(shù)值不能循環(huán),這是默認(rèn)值 cache_number:保留在內(nèi)存中的整數(shù)的數(shù)量,默認(rèn)值是20 nocache:不指定存儲(chǔ)在內(nèi)存中的整數(shù)的數(shù)量 order:按照順序生成序列值 noorder:不強(qiáng)調(diào)按照順序生成序列值 序列中包含兩個(gè)偽列,即currval和nextval列。在使用序列之前,必須先使用nextval對(duì)序列執(zhí)行初始化操作 返回序列的下一個(gè)值: selectsequence_name.nextval from dual 返回序列的當(dāng)前值: selectsequence_name.currval from dual 視圖:作用: 視圖能簡(jiǎn)化用戶的操作 視圖使用戶能以多種角度看待同一數(shù)據(jù) 視圖對(duì)重構(gòu)數(shù)據(jù)庫(kù)提供了一定程度的邏輯獨(dú)立性 視圖能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù) 語(yǔ)法: create orreplace view 視圖名字 as SQL語(yǔ)句 使用,語(yǔ)法如下: select * from視圖名 刪除視圖的語(yǔ)法如下: drop view 視圖名 存儲(chǔ)過(guò)程:語(yǔ)法: CREATE[OR REPLACE] PROCEDURE<過(guò)程名> ( <參數(shù)1>,[方式l] <數(shù)據(jù)類型1>, <參數(shù)2>,[方式2] <數(shù)據(jù)類型2>, ……) IS|AS (is或as完全等價(jià) ) [局部變量聲明] BEGIN PL/SQL過(guò)程體 END<過(guò)程名> 其中參數(shù): in參數(shù)類型:表示輸入給過(guò)程的參數(shù) out參數(shù)類型:表示參數(shù)在過(guò)程中將被賦值,可以傳給過(guò)程體的外部 in out參數(shù)類型:表示該類參數(shù)既可以向過(guò)程體傳值,也可以在過(guò)程體中賦值,以便向過(guò)程體外傳值 存儲(chǔ)過(guò)程可以直接用EXECUTE命令調(diào)用或PL/SQL程序塊內(nèi)部調(diào)用 用EXECUTE命令調(diào)用存儲(chǔ)過(guò)程的格式如下: SQL>EXECUTE proc_name(par1,par2…); 存儲(chǔ)過(guò)程也可以被另外的PL/SQL塊調(diào)用,調(diào)用的語(yǔ)句是: DECLARE par1,par2; BEGIN proc_name(par1,par2…); END; 在調(diào)用前要聲明變量par1,par2 刪除存儲(chǔ)過(guò)程: DROP PROCEDURE proc_name; 函數(shù):語(yǔ)法: CREATE[OR REPLACE] FUNCTION<函數(shù)名> [(參數(shù)列表)] RETURN數(shù)據(jù)類型 IS|AS (is或as完全等價(jià) ) [局部變量聲明] BEGIN PL/SQL函數(shù)體 END[<函數(shù)名>] 函數(shù)的結(jié)束一定要使用return語(yǔ)句返回一個(gè)與聲明匹配的值 create or replacefunction f_getinfo(str varchar2) return varchar2 函數(shù)的功能是返回一個(gè)值,因此可以用在SQL查詢語(yǔ)句中,也可以用在PL-SQL語(yǔ)句塊中。 用SQL調(diào)用函數(shù)的格式如下: SQL>select fun_name(par1,par2…) from tablename; 如:select f_getinfo('Jack')from dual; 刪除函數(shù)可使用如下命令: dropfunction funname; 觸發(fā)器:功能: 允許/限制對(duì)表的修改 自動(dòng)生成派生列,比如自增字段 強(qiáng)制數(shù)據(jù)一致性 提供審計(jì)和日志記錄 防止無(wú)效的事務(wù)處理 啟用復(fù)雜的業(yè)務(wù)邏輯 類型: DML語(yǔ)句(DELETE,INSERT,UPDATE) DDL語(yǔ)句(CREATE,ALTER, DROP) 數(shù)據(jù)庫(kù)操作(SERVER ERROR,LOGON,LOGOFF,STARTUP,SHUTDOWN) 語(yǔ)法: CREATE[ OR REPLACE ] TRIGGER name {BEFORE | AFTER } { event [ OR ... ] } ON table [FOR [ EACH ] { ROW | STATEMENT } ] [WHEN(condition) ] plsql block| call procedure s_statement 注意事項(xiàng): 觸發(fā)器可以聲明為在對(duì)記錄進(jìn)行操作之前(檢查約束之前和 INSERT,UPDATE 或 DELETE 執(zhí)行前)或之后(在檢查約束之后和完成 INSERT, UPDATE 或 DELETE 操作)觸發(fā) 一個(gè) FOR EACH ROW 執(zhí)行指定操作的觸發(fā)器為操作修改的每一行都調(diào)用一次 SELECT 并不更改任何行,因此不能創(chuàng)建 SELECT 觸發(fā)器。這種場(chǎng)合下視圖更適合 觸發(fā)器和某一指定的表格有關(guān),當(dāng)該表格被刪除時(shí),任何與該表有關(guān)的觸發(fā)器同樣會(huì)被刪除 在一個(gè)表上的每一個(gè)動(dòng)作只能有一個(gè)觸發(fā)器與之關(guān)聯(lián) 在一個(gè)單獨(dú)的表上,最多只能創(chuàng)建三個(gè)觸發(fā)器與之關(guān)聯(lián),一個(gè)INSERT觸發(fā)器,一個(gè)DELETE觸發(fā)器和一個(gè)UPDATE觸發(fā)器 刪除觸發(fā)器語(yǔ)法: |
|
來(lái)自: 紫衣風(fēng)華 > 《orcale》