JavaWeb-02-數據庫

 

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:數據庫操作的條件

  1. 區間條件;比較運算符; where id >100
  2. 範圍條件;in子句; where name in('張三','李四','王五')
  3. 模糊條件;與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:多表聯合查詢

對於數據庫中的單表查詢,都是“等值查詢”,即只有符合條件的記錄才查詢出來; 多表查詢主要憑藉主外鍵關聯關係;

  1. 查詢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:函數

參數類型;

  1. 輸入類型的參數;用關鍵字in表示,可以省略;只能將數據帶入到函數中,而不能通過參數將數據帶出去;java中方法的參數樣式;
  2. 輸出類型的參數;用關鍵字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:刪除索引

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章