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