1:數據類型
1.1:字符串類型
變長;varchar2(10);nvarchar(8);
- 雙字節; 兩個字節的空間;
- 單字節;一個英文或數字在表中佔有一個字節的空間;
定長;char(10); nchar(n);
- 單字節;
- 雙字節;
1.2:數值
number
1.3:日期
date
2:表的約束
2.1:約束類型
1:非空約束 not null
2:主鍵約束 primary key
3:默認約束 default
4:唯一性約束 unigue
5:檢查約束 check
6:外鍵約束 foreign key
例子:
id char(32) default sys-guid prinary key(主鍵加默認)
name varchar2(10) unique(唯一)
sex nchar() check(sex in ('男','女'))
sage number check(sage between 16 and 30)
2.2:主鍵約束
sid char(8) not null constraint pk-student 約束名稱
簡化:
sid char(8) primary key;
追加主鍵約束
alter table student add constraint 約束名 primary key(sid)
2.3:刪除約束
alter table student drop constraint 約束名稱
2.3:檢查約束
保證列數據的安全性和有效性;
區間;約束列數據使其,限制在某個範圍區間內;比較運算符;
2.4:追加約束(建表時沒加,後期追加)
2.5:外鍵約束(foreign key)
外鍵約束通過用於多表之間,也偶爾用於特殊的單表中;
在一個A表中,用主鍵唯一的標識這一行記錄;
在另一個B表中,要引用前一個表A中的記錄;如何引用?用表A的主鍵代表,但此列在B表中,此列則爲外鍵;兩表中:主鍵名稱和外鍵名稱可以相同,也可以不同;但爲了操作方便,名稱定義爲相同;
在具有主外鍵關聯關係的兩表中,外鍵所在的表(銷售表)爲子表或從表,主鍵所在表爲父表或主表;對於銷售表和商品表來說,先有商品表,即爲主表,後有銷售表,爲從表;
1:主表和從表,現有主表纔有從表,主鍵所在爲主表,外鍵所在爲從表
2:表中多對多,建兩個表,在第三個表中設立兩個外鍵
追加外鍵約束:
alter table stud_teach
add
foreign key(tid) references teachs(tid);
3:對錶的操作
3.1:創建表
CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`lastName` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`gender` int(2) DEFAULT NULL,
`d_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
)
3.2:刪除表
DROP TABLE IF EXISTS `department`;
3.3:增加數據
insert into 表名(id,name)values (12,'張三');
3.4:刪除數據
delete from 表名 where id = 3;
3.5:修改數據
update 表名 set name = '李四' where id = 3;
3.6:查詢數據
select * from 表名;
3.7:修改表名
alert table 表名 rename to 改後的表名;
3.8:給列改名
3.9:數據庫操作的條件
- 區間條件;比較運算符; where id >100
- 範圍條件;in子句; where name in('張三','李四','王五')
- 模糊條件;與java中的正則表達式極爲類似;
3.10:模糊查詢
like
任意的那個字符爲‘_’
任意多個字符爲‘%’
例:select * from emp where ename like 'A%'
多個模糊條件時用in
3.11:去重
select distinct job form emp;
select distinct job,name from emp;
3.12:分組
group by,分組函數通常和統計函數在一起使用;
having,對分組後的數據進行過濾;
order by 列名 排序,默認爲升序,降序用desc
例子:
select deptno as 部門號,count(*) as 人數
form emp
group by deptno
having count(*) >4
order by 人數 desc
3.13:case
根據員工的薪水,將工資分爲三個級別:低薪(小於2000)、中薪(2000-3000)和高薪(3000以上);輸出emp表中所有員工的姓名,薪水和級別;
按照原薪水,漲工資:低薪*2,中薪*5,高薪*10;
3.14:多表聯合查詢
對於數據庫中的單表查詢,都是“等值查詢”,即只有符合條件的記錄才查詢出來; 多表查詢主要憑藉主外鍵關聯關係;
- 查詢emp表中每個員工的姓名,部門編號,部門名稱;
4:表的拷貝
4.1:全部拷貝
create table 目的表 as select * from 源表
4.2:表結構拷貝
create table 目的表 as select * from 源表 where 1<>1
4.3:拷過來的表沒有約束,得自己加
5:一組統計函數
5.1:min(列名) 最小
5.2:max(列名) 最大
5.3:sum(列名) 求和
5.4:avg(列名) 求當前列平均值
5.5:count(列名) 用來統計查詢結果有幾條
6:存儲過程和存儲過程:
6.1:創建存儲過程;
在ORACLE中有兩類對象,一是函數,一是存儲過程;做爲函數,一定有返回值;做爲ORACLE中的存儲過程,沒有返回值;兩者綜合起來,相當於java中的方法的功能;
6.2:函數
參數類型;
- 輸入類型的參數;用關鍵字in表示,可以省略;只能將數據帶入到函數中,而不能通過參數將數據帶出去;java中方法的參數樣式;
- 輸出類型的參數;用關鍵字out表示;它只能將數據帶出來;
輸入、輸出類型的參數;既可以將數據帶進來,又可以帶出去;
create or replace function plus(a in number,b in number)
return number
is
begin
declare
tt number:=0;
begin
tt:=a+b;
return tt;
end;
7:視圖
在數據庫中,視圖是基於一個或多個表(也可以是視圖)所生成的一條查詢語句,返回結果爲一個“虛擬表”;一個視圖依賴於一張或多張表;視圖不能獨立存在;通過查詢視圖所看到的數據都來自於表本身;
視圖可以指向整個單表,單表的部分列或部分行;多表的聯合查詢;
與表不同的是,視圖沒有固定的結構;當然也不能保存數據,通過視圖所看到的所有內容,都來自於表; 視圖是一種數據庫對象,它也有創建、使用和刪除的過程;
7.1:創建視圖
create view v1
as
select empno 工號,ename 姓名,sal 薪水 from emp;
7.2:刪除視圖
drop view v;
7.3:使用
create view test as
(select id,LOGINID,lastname,sex from hrmresource where sex <> '')
select * from test
8:表的集合運算
aa表:
bb表:
8.1:並集
union all;內容完全相同的行記錄也不例外;
union,會對相同項去重;
8.2:交集
8.3:差集
9:內外鏈接
9.1:標準內連接(inner join)
我們平時常用的where a.id = b.id 就是簡易的內鏈接
9.2:標準外連接
- 全(外)連接;full join;兩表當中不符合等值條件的記錄都會顯示出來;
- 左(外)連接;left join;左表中不符合條件的記錄顯示出來;
- 右(外)連接;right join;右表中不符合條件的記錄會顯示;
9.2.1:全連接
select e.empno,e.ename,e.sal,d.dname,d.loc,d.deptno
from emp e
full join
dept d
on
e.deptno=d.deptno;
9.2.2:左連接
9.2.3:右鏈接
select e.empno,e.ename,e.sal,d.dname,d.loc,d.deptno
from emp e
right join
dept d
on
e.deptno=d.deptno;
10:索引(index)
作用:提高查詢效率
10.1:索引優缺點:
建立索引的優點:
1. 可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。
2. 通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。
3. 可以加速表和表之間的連接。
4. 在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。
索引有一些先天不足:
1. 建立索引,系統要佔用大約爲表的 1.2 倍的硬盤和內存空間來保存索引。
2. 更新數據的時候,系統必須要有額外的時間來同時對索引進行更新,以維持數據和索引
的一致性。
10.2:使用索引的原則
實踐表明,不恰當的索引不但於事無補,反而會降低系統性能。因爲大量的索引在進行插入、修改和刪除操作時比沒有索引花費更多的系統時間。
使用原則:
1. 在大表上建立索引纔有意義。
2. 在 where 子句或是連接條件上經常使用的列上建立索引,很少或從不引用的字段不建索引。
3. 在經常需要排序的列上創建索引,因爲索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間.
4. 對於列中有許多空值,但經常查詢所有的非空值記錄的列,應該建立索引。
5. LONG 和 LONG RAW 列不能創建索引。
6. 索引只在返回較少比例的數據時才比全表掃描有效,大多數情況下認爲結果集很大,一般大於 5%-15%就不使用索引查詢。
7. != 將不使用索引, 記住, 索引只能告訴你什麼存在於表中, 而不能告訴你什麼不存在於表中.
8. ||是字符連接函數. 就象其他函數那樣,停用了索引。
9. + 是數學函數. 就象其他數學函數那樣,停用了索引。
10. like "%_" 百分號在前時,停用了索引。
11. 字符型字段爲數字時在 where 條件裏不添加引號時,停用了索引
12. 相同的索引列不能互相比較,這將會啓用全表掃描。
10.3:創建索引
10.4:刪除索引