第一篇:數據庫總結
1、(神諭、甲骨文公司)提供的一款關系型數據庫管理系統 使用表格作為存儲數據的基本單元
2、在命令行取消設置折痕
set linesize 數字
3、在命令行設置每頁顯示數據長度
set pagesize 數字
4、命令行中的編輯操作
ed 文件名,回車,點擊是,然后在記事本里輸入查詢語句比如:select * from emp 保存退出,最后在命令行輸入 @文件名 點擊回車,就會執行記事本里面的語句
5、查詢不在當前用戶下的表必須在表的前面加上用戶名,在數據庫中用戶名也叫模式名稱
6、連接操作:
切換用戶
connect 用戶名/密碼 as sysdba 查看當前用戶 show user
7、使用'||'可以連接查詢結果
select '編號是:' || empno || '的姓名是:'|| ename 員工信息
from emp
8、數據庫不在本機切換用戶的方式
coun /connect 用戶名/密碼
服務名 as sysdba
9、查看數據字典包含的字段
desc dba_users
10、查詢數據字典包含的用戶 select username from dba_users
11、由于數據庫用戶有些事預制的,所以狀態是鎖定的,查看oracle用戶的狀態: select username,account_status from dba_users;
12、對于狀態是鎖定的用戶,啟用用戶的語句
alter user 用戶名 account unlock
13、管理員數據字典
dba_tablespaces,dba_users
14、普通用戶數據字典
user_tablespaces,user_users
15、設置默認或臨時的表空間
alter user 用戶名 default/temporary tablespace 表空間名
16、創建表空間語法
create temporary | tablespace tablespace_name(表空間名)tempfile | datafile 數據文件名file.dbf size 大小
17、查看默認/臨時表空間 select default_tablespace,temporary
_tablespace from
dba_user
where
username='system'(管理員的)select default_tablespace,temporary _tablespace from user_user where username='cotts'(普通用戶的)
18、default_tablespace默認表空間 temporary _tablespace臨時表空間
19、查詢表空間
select tablespace_name from dba_tablespaces select tablespace_name from user_tablespaces(普通用戶)20、創建永久表空間
create tablespace test1_tablespace datafile 'test1file.dbf' size 10M
21、創建臨時表空間
create temporary tablespace temptest1_tablespace tempfile 'tempfile.dbf' size 10M
22、查詢永久表空間包含的字段
desc dba_data_files
23、查詢臨時表空間包含的字段 desc dba_temp_files
24、設置聯機或脫機狀態
alter tablespace tablespace_name(表空間名)online /offline
25、查看表空間的狀態
select status
from
dba_tablespaces
where
tablespace_name='TEST1_TABLESPACE'
26、設置只讀或可讀寫的狀態
alter tablespace tablespace_name(表空間名)read only / read write
read write默認
27、往表空間增加數據文件
create tablespace tablespace_name(表空間名)add datafile 數據文件名file.dbf size 大小
28、刪除表空間的數據文件
create tablespace tablespace_name(表空間名)drop datafile 數據文件名_file.dbf
29、刪除表空間
(保留數據)
drop tablespace tablespace_name(表空間名)
30、刪除表空間
(不保留數據)
drop tablespace tablespace_name(表空間名)
including contents
31、查詢一個用戶下的所有表
select * from tab
32、windows調用本機操作系統的命令
host dir
33、復制一個文件
host copy 原文件名
新文件名
34、表空間
表空間是存儲數據庫對象的容器,表和表空間之間的關系就相當于文件和文件夾一樣,每次創建數據庫的時候,系統默認的創建一個system系統表空間一個數據庫可以有一個system表空間,也可以包含若干個
35、常用的字符類型
char、varchar、varchar2
Varchar2(n):oracle自行定義的類型,兼容性特別,在企業中一般都是用varchar2
char(n)
用于標識固定長度的字符串,n表示該字符串最大的保存字符個數。當實際保存數據小于n,在右邊使用空格補齊
Varchar(n):可變字符串,n表示該字符串中最大保存字符的個數,當實際保存數據的個數小于n的時候,則會按照實際長度進行保存
36、number:可以用來存儲整數和小數
Number(參數):表示最大參數位數的數字
Number(參數1,參數2):參數1代表有效數字的最大位數,參數2代表小數的位數,整數的最大位數(參數1-參數2)。
37、SQL語句:結構化查詢語言,是專門為操作數據庫而建立所做的命令集,功能齊全的數據庫語言,通過SQL完成對數據庫的任何操作,每一種數據庫都不太一樣,都可以使用同一個Sql語句對數據庫進行基本操作,掌握SQL語言就可以操作任何的數據庫,學習的重點
38、DDL數據庫定義語句,用來創建,修改刪除表
create、drop、alter DML數據操作語句,用來操作表的數據。插入。修改,刪除
insert、update、delete DCL(TCL)事務控制語句,用來管理數據庫的事務 commit、rollback DQL數據查詢語句,用來查詢所需要的數據(重點)Select
39、創建表的格式
create
table
表名(列名1 數據類型
primary key, 列名2
數據類型, 列名n
數據類型);40、查看表結構
desc 表名
41、修改格式
update 表名
set 列名1=該列新值,列名2=該列新值…… Where 條件;注意;where前面沒有逗號
根據where條件修改表中的數據,沒有where條件,可以修改表中所有的數據
42、刪除語句
delete
from
表名
where 條件
根據where條件刪除表中對應數據,沒有where條件刪除表中所有數據
43、向表中所有的列插入數據
insert into 表名 values(列值1,列值2…...)插入的字符串類型必須單引號
44、查詢表中所有數據 select * from 表名
修改表名的方法:alter table old_table_name rename to new_table_name
45、向指定的列插入數據表名()中列名必須跟values中列值一一對應。沒有插入值默認為空
insert into 表名(列名1,列名2…..)values(列值1,列值2….)插入的字符串必須單引號
46、truncate 刪除表中數據
truncate
table 表名
直接刪除表中所有的數據。而且使用truncate刪除的數據,永遠都不能還原。但是刪除速度是最快
47、刪除表
drop
table
表名
48、去掉重復的列值
distinct
49、查詢某些列的所有數據
select
列名1,列名2,列名3…………...from 表名
50、刪除表中字段(批量刪除)
alter table 表名 drop(字段1,字段2,..)也可以單個刪除
刪除表中的字段(單個刪除)
alter table 表名 drop column 字段名
51、oracle下修改字段長度的語法
alter table 表名 modify 字段名 類型(長度);
52、修改字段名語法
alter table 表名 rename column 原字段名 to 新字段名
53、向表中添加新字段
alter table 表名 add(字段1 類型 [NOT NULL],字段2 類型 [NOT NULL],....)
54、給表起別名
在多表的連接查詢中,建議每一張都起一個別名,通過別名指向對應的表中的列,避免出現多個表之間列名一致
select 別名.列名1,別名2.列名2,別名3.列名3......from 表名 別名
55、使用as給列起別名
select 列名1 as 別名1,列名2 as 別名2.....from 表名
56、使用空格給列起別名
select 列名1 別名1,列名2 別名2....from 表名
57、排序
對查詢返回的結果,根據某一個列或者某幾個列進行升序或者降序
格式1:
select 列名/* from 表名 where 條件
order by 列名 desc/asc
格式2:
select 列名 /* from 表名 where 條件
order by 列名1 asc/desc,列名2 asc/desc desc降序
asc升序、默認值 排序永遠是最后被執行的
58、可以使用別名進行排序
select 列名1 別名1,列名2 別名2 from 表名 where 條件
order by 別名
desc/asc
59、帶條件的查詢
select
列名/*
from
表名 where條件
60、可以使用序號進行排序
select ename,empno,sal from emp order by 3 desc 用的是sal排序
61、關系運算符:>,>=,<,<=,=(等于),!=(不等于)或者<>(不等于)
判斷該列列值是否為null為null:
is null
不為null: is not null 62、模糊查詢:
like是,包含的意思
%:指代0個或多個字符
_:指代任意一個字符
not like 不包含,不是的 意思
63、nvl函數
專門處理空值的問題
64、使用‘+’連接數字和null返回的結果也為null 65、nvl(數字/列名,數值);如果該列的列值為null,返回數值;如果該列的列值不為null,則返回該列的列值
nvl(列名,0)66、nvl2(數字/列,返回結果一(不為null顯示),返回結果二(為null顯示))67、nullif(表達式一,表達式二)
判斷表達式是否相等,如果相等返回null,不相等返回表達式一 68、select case 列/數值 then 表達式1 then 顯示結果1
then 表達式2 then 顯示結果2 …
else 表達式n end 別名 from 表名
如果數值/列等于表達式1則顯示結果1 如果等于表達式2則顯示結果2,如果都不等于。則執行表達式n 69、select decode(列/表達式,值1,輸出結果1,值2,輸出結果2….默認值)別名
from 表名
如果表達式/列的值等于值1,輸出結果1,如果等于值2,輸出結果2,如果兩者都不滿足輸出默認值 所有條件都要判斷否則顯示為null 70、select coalesce(表達式1,表達式 2,表達式3….表達式n)coalesce主要對null進行操作,如果表達式1為null,顯示表達式2的內容,如果表達式2為null,顯示表達式3的內容,如果執行到最后還是null,那么最終結果就顯示null 71、邏輯運算符: and 與
,or或,not非
72、between 初值
and 終值
求出初值到終值之間滿足條件的列值 73、where 列名 in(列值1,列值2,列值3...)
在什么范圍
74、where 列名 not in(列值1,列值2...)不在什么范圍 75、any
where 列名 =any(列值1,列值2,列值3...)與in相同(然而<>any不等價于not in
where 列名
>any(列值1,列值2,列值3...)比子查詢結果中最小的要大(包含了>=any)
76、some和any用法相同
where 列名
77、<>any返回的是表中的全部數據 <>all等價于not in(但是=all并不等價于in) >all比子查詢中值最大的還要大(還包含了>=all) 79、空數據判斷exists SQL提供的判斷子查詢是否有數據返回,如果有數據返回,exists結構則返回true,否則返回false select * from emp where exists(select * from emp where empno=9999)沒有結果返回 select * from emp where exists(select * from emp) 80、not exists select * from emp where not exists(select * from emp where empno=9999) select * from emp where not exists(select * from emp)沒有結果返回 81、聚合函數(分組函數) count()數據總數 sum()求和 max() 最大值 min()最小值 avg()平均值 count(*/列名):*,求出該表中總的數據的條數; 列名,查詢該列不為null的列值的個數 sum(列名):求出該列所有列值的累加之和 max(列名);求出該列的最大值 min(列名):求出該列的最小值 avg(列名):求出該列的平均值 median(列):求出中間值 variance(列):返回方差 stddev(列):返回標準差 82、多字段分組 格式: select 分組字段1,分組字段2,列名/聚合函數 from 表名 where 條件 group by 分組字段1,分組字段2...order by 列名/聚合函數/別名 asc/desc select d.dname,d.loc,d.deptno, nvl(count(e.empno),0),nvl(max(e.sal),0)最高工資,nvl(min(e.sal),0)最低工資,nvl(round(avg(e.sal),2),0)平均工資 from emp e,dept d where d.deptno=e.deptno(+) group by d.dname,d.loc,d.deptno 83、字符處理函數 lower(字符串/列名);把字符串/列值中所有的大寫字母改成小寫字母 dual:虛擬表,專門用來進行測試的表 upper(列名/字符串):把列值/字符串中所有的小寫字母改成大寫字母 length(列名/字符串):統計當前列值/字符串中字符的個數 select ename,job,lower(ename),lower(job) from emp select upper('ximenchunxue')from dual select ename,length(ename)from emp 84、給出一個整數并返回與之對應的字符串 CHR(數字)返回與指定字符對應的十進制數字 ASCII('字符')首字母大寫函數 INITCAP(列/字符串)85、在左或右填充指定長度的字符串 LPAD('列/字符串',總長度,'填充字符')RPAD('列/字符串',總長度,'填充字符')還可以組合使用 86、查找函數 instr(列/字符串,查找的字符串,開始位置,出現位置) 87、替換函數 replace(列名/字符串,指定字符,新的字符串) select replace('ename','e','-')from dual 88、substr(參數1,參數2,參數3):截取字符串 參數1:列名/字符串,指定要截取的列或者字符串 參數2;如果為正數表示從正數的標號開始截取,起始是1,比如參數2(5),從第五個字母開始截取。反之如果為負數表示從倒數第幾個字符開始截取,比如參數2(-3),表示從倒數第三個字符開始截取。參數3:表示要截取字符的個數 沒有參數3表示截取所有 89、求出emp表中ename的最后3個字符(兩種方法) 第一種方法 select substr('ename',-3,3)from emp 第二種方法 select substr('ename',length('ename')-2,3)from emp 90、TRIM(列名/字符串):刪除列刪除列值/字符串兩端的空格 select trim(' liu ying ')from emp 91、去掉左或右的空格 LTRIM('字符串')RTRIM('字符串')92、連接(串聯)字符串: 使用|| 連接多個字符串 93、concat(字符串1,字符串2): 串聯字符串 94、to_char();把其他類型的數據轉換為字符類型 95、數值處理函數 sqrt(數值);求出平方根 mod(參數1,參數2):求出余數 floor(數值);向下取整截斷 (變小) ceil(數值):向上取整 (變大)power(底數,指數):求出乘方 abs(數值):求出絕對值 round(數值,位數):四舍五入函數 如果位數為正數,保留幾位小數,如果位數為0,則只保留正數,如果位數為負數,則表示小數點前第幾位進行四舍五入。如果不指定位數則從小數點后面四舍五入 sign(數值):標記性函數,如果數值是正數,返回值是1,如果數值是0,返回值是0,如果數值是負數,返回值是-1 96、trunc:截取函數 trunc(數值,參數):如果參數為正數,表示保留幾位小數,如果參數為0,表示舍棄所有的小數,如果參數為負數,表示對小數點前第幾位舍棄。如果不指定參數,表示從小數點后面全部舍棄。97、having 子句 跟group by 結合使用,對分組以后的數據進行再次過濾 格式1: select 列名/聚合函數 from 表名 where 條件 ;對表中所有數據進行過濾 group by 列名 having 子句;對分組后的數據進行過濾 order by 列名/別名/聚合函數 asc /desc 98、也可以和多字段分組結合 格式2: select 字段1,字段2...,列名/聚合函數 from 表名 where 條件 ;對表中所有數據進行過濾 group by 字段1,字段2...having 子句;對分組后的數據進行過濾 order by 列名/別名/聚合函數 asc /desc 列出至少有一個員工的部門編號,名稱,并統計這些部門的平均工資,最高工資,最低工資 select d.dname,d.deptno,round(avg(e.sal),2), max(e.sal),min(e.sal) from dept d ,emp e where d.deptno=e.deptno(+) group by d.dname,d.deptno having count(e.empno)>1 分析:首先執行where條件,對表中所有的數據進行過濾,然后執行group by,根據某一組對余下的數據進行分組,之后使用having子句對分組后的數據再次進行過濾。最后使用order by 進行排序 having子句中經常跟聚合函數結合使用 99、案例:顯示非銷售人員的工作名稱以及從事同一工作的員工的月工資總和,并且要滿足從事同一工作的員工的月工資總和大于5000,輸出結果按月工資總和升序排列 select distinst job ,sum(sal)月工資總和 from emp where job<>'clerk' group by job having sum(sal)>5000 order by 月工資總和 100、from子句中子查詢 要求查出每個部門編號,名稱,地址,部門人數,平均工資 select d.deptno,d.dname,temp.count,temp.avg from dept d,(select deptno dno,count(sal)count,round(avg(sal),2)avg from emp group by deptno)temp where d.deptno=temp.dno(+) 思想:把聚合函數和列值分開查詢先查詢聚合函數,對查詢的結果起別名,最后查詢列值,temp表可以看成一個臨時表,temp是臨時表的別名 案例、查詢出所有在銷售部門sales的員工的編號,姓名,職位,獎金,基本工資,入職日期,部門最高工資,部門最低工資 select e.empno,e.ename,e.sal,e.comm,e.job,e.hiredate, temp.max,temp.min from emp e,(select deptno dno,max(sal)max,min(sal)min from emp group by deptno)temp where e.deptno=(select deptno from dept where dname ='SALES')and e.deptno=temp.dno 思想:把聚合函數和列值分開查詢先查詢聚合函數,對查詢的結果起別名,最后查詢列值,temp表可以看成一個臨時表,temp是臨時表的別名 案例、查詢出所有薪資高于公司平均薪資的員工編號,姓名,職位,入職日期,所在部門名稱,地址,、上級領導姓名公司的工資等級,部門人數,平均工資,平均服務年限 select e.empno,e.ename,e.hiredate,d.dname,d.loc,m.ename,s.grade,temp.count,temp.avg,temp.avgyear from emp e,dept d,salgrade s,emp m,(select deptno dno ,count(empno)count, round(avg(sal),2)avg, round(avg(months_between(sysdate,hiredate)/12),2)avgyear from emp group by deptno)temp where e.sal >(select avg(sal)from emp)and e.deptno=d.deptno and e.sal between s.losal and s.hisal and e.deptno=temp.dno and e.mgr=m.empno(+) 101、select子句查詢和from子句查詢: from子句是把聚合函數放到from中 select 子句是把聚合函數放到select語句里面 102、with子句 使用with子句將emp表中的數據定義為臨時表 with e as(select * from emp)select * from e;103、查詢中每個部門的編號,名稱,地址,人數,平均工資 with e as(select deptno dno,count(empno)count, round(avg(sal),2)avg from emp group by deptno)select d.deptno,d.dname,d.loc,e.count,e.avg from e,dept d where d.deptno=e.dno(+)104、每個部門工資最高的員工編號,姓名,職位,入職日期,工資,部門編號,部門名稱,按照部門編號升序 with x as(select deptno dno,max(sal)max from emp group by deptno)select e.empno,e.ename,e.job,e.hiredate,e.sal,d.dname,d.deptno from x,emp e,dept d where e.deptno=x.dno and x.max=e.sal and d.deptno=x.dno order by d.deptno 105、約束 設計表的時候,提前添加一些限制(條件),只有滿足這些條件的數據可以插入到表中,這些限制(條件)就是約束,只能滿足這些約束的數據可以真正保存到表中 1.主鍵約束 2.唯一約束 3.檢查約束 4.默認值約束 5.外鍵約束 6.非空約束 106、主鍵約束 被主鍵約束修飾的列,該列的列值必須非空而且唯一,通過主鍵約束來避免表的數據出現冗余(重復的數據) 1.一個表中只能有一個主鍵(約束) 2.使用主鍵修飾一個列或者多個列的組合值,修飾多個列的組合值,稱為聯合主鍵或者復合主鍵 106、創建表的時候指定主鍵名字 create table worker2(id number(4)constraint pk_w2_id primary key, name varchar2(50))107、創建表的時候設置聯合主鍵 create table worker3(id number(4), name varchar2(50), age number(3), address varchar2(50), constraint pk_w3_id_name primary key(id,name)) 108、修改表的時候設置主鍵約束 alter table 表名 add constraint 約束名 primary key(列名1,列名2...) 109、刪除主鍵 只能用來刪除主鍵 格式: alter table 表名 drop primary key 可以刪除大部分約束 格式: alter table 表名 drop constraint 約束名 110、唯一約束 用來指定一個列或者多個列的組合值具有唯一性,防止在該列中輸入重復的列值,一張表中可以有多個唯一約束 1.使用唯一約束修飾的列,該列的列值可以為空值 2.不能使用唯一約束修飾主鍵所在的列。111、修改表的時候設置唯一約束 格式: alter table 表名 add constraint 約束名 unique(列名1,列名2,列名3...) 112、主鍵約束和唯一約束的區別 1.一張表中只有一個主鍵約束,但是可以有多個唯一約束 2.主鍵約束修飾的列,該列的列值必須不能為null,而被唯一約束修飾的列,該列列值可以為null 113、刪除唯一約束 alter table 表名 drop constraint 約束名 114、檢查約束 用于限定某列的值必須要滿足什么條件,只有滿足特定條件的數據才可以插入進去,避免用戶輸入一些非法的數據 1、創建表的時候設置檢查約束 create table worker10(id number(4)primary key, name varchar2(50)unique, sex char(2)check(sex in('男','女')), age number(3), email varchar2(50)) 2、修改表的時候指定檢查約束 格式: alter table 表名 add constraint 約束名 check(約束名) 115、刪除檢查約束 格式: alter table 表名 drop constraint 約束名 116、默認值約束 系統默認為列設置的數值,如果在執行insert語句中,該列沒有插入列值,使用默認值作為該列的列值,而且每一個列只能設置一個默認值。 117、創建表時候設置默認值約束 create table worker14(id number(4)primary key, name varchar2(50), age number(3)default 20, salary number(7,2)default 5000) 118、修改表時候設置默認值 alter table 表名 modify 列名 數據類型 default 默認值 119、刪除默認值:--使用modify 把默認值設置為null alter table 表名 modify 列名 數據類型 default null 120、非空約束 該列的列值不能為空(null) 121、創建表的時候設置非空約束 create table worker15(id number(4)primary key, name varchar2(50)not null unique, age number(3), address varchar2(50)) 122、修改表的時候設置非空約束 使用modify,可以設置多個列的非空約束 alter table 表名 modify(列名1 not null)modify(列名2 not null)....modify(列名n not null) 123、刪除非空約束 使用modify,可以刪除多個列的非空約束 alter table 表名 modify(列名1 null)modify(列名2 null)…… modify(列名n null) 124、外鍵約束 用于維護兩張表之間的關聯關系,被外鍵約束所修飾的列該列的列值必須跟與之關聯另外一張表中,主鍵所在的列的列值對應 子表:外鍵所在的表,稱為子表 父表/主表:沒有外鍵的表,稱為父表。 當執行插入操作的時候,要先往主表中插入數據,然后在往子表中插入數據 外鍵的作用就是維護兩張表之間的關聯的關系,外鍵所修飾的列值,必須參照與之關聯的主表中主鍵所在的列的列值 125、序列 序列是oracle中的一個數據庫對象,通過序列可以生成自動增長的數字,經常使用序列生成的數字作為主鍵所在列的列值 創建序列的格式 create sequence 序列名 126、nextval:第一次使用nextval返回是默認值(如果不設置默認值,默認情況返回是1),之后每次調用nextval都生成一個自增的數字 select id_seq1.nextval from dual currval:獲得序列當前的值 select id_seq3.currval from dual 127、序列的初始值 start with 初值 第一次使用nextval的時候,返回的就是初值 增長的步長(每次使用nextval,生成數據的增量,默認步長是1 increment by 增量 序列最大值 : maxvalue 最大值 序列最小值: minvalue 最小值 create sequence id_seq4 start with 100 increment by 10 minvalue 1 maxvalue 100000000 128、索引 索引是建立在表中列上的數據庫對象,用于提高數據查詢的速度,而且索引一旦被創建以后就會被oracle系統指定進行維護,在查詢語句中不需要指定使用的是哪一個索引 create table worker12(id number(4)primary key, name varchar2(50)unique) 1)一種提高查詢效率的機制,提高索引可以最大化提高查詢的速度 2)主鍵所修飾的列,系統會默認添加一個索引。3)使用唯一約束修飾的列,系統會默認添加一個索引 129、索引的創建 格式 create index 索引名名稱 on 表名(列名) 刪除索引 drop index索引名稱 130、索引的優點和缺點 優點:提高查詢速度 缺點: 1.索引會占用磁盤空間 2.索引會提高查詢數據的速度,但是減緩了對數據的修改(insert ,update,delete)速度 131、事物 把對表的一系列操作封裝到一個事務中,要么一起成功,要么一起失敗 commit:提交事物,執行commit把之前對表中所有的操作,真實發生修改,在數據庫底層真正修改數據。 rollback:回退(回滾)之前所有未提交(commit)的操作。撤銷之前沒有提交修改的操作(insert。update,delete) 132、關聯查詢 所需要查詢的數據來源于多張表,通過關聯查詢,在同一條SQL語句查詢多張表的信息 格式 select 別名1.*/列名,別名2.*/列名...from 表1 別名1,表2 別名2 where 關聯條件 笛卡爾積:在關聯查詢中,如果沒有加入關聯條件,兩張表中數據會進行任意的組合,這種現象稱為笛卡爾積。笛卡爾積是數學中的一個概念在關聯查詢中,必須要避免出現笛卡爾積。關聯條件:必須先查看兩張表之間的關聯關系,然后在編寫關聯條件 133、內連接;只查詢兩張表中有關系的數據,不查詢沒有關聯關系的數據。之前寫的所有的關聯查詢都屬于內連接 1.等值連接:關聯條件中是以=進行連接,稱為等值連接。2.非等值連接:關聯條件不是以=連接,稱為非等值連接 自連接:把一張表看成兩張表,自己跟自己進行連接 另外一種內連接(很少見)格式 select 別名1.*/列名,別名2.*/列名 from 表名1 別名1 inner join 表名2 別名2 on 關聯條件 where 條件 134、使用Oracle的專用語法實現外連接 外連接:既要查詢兩張表中有關聯關系的數據,還要查詢沒有關聯關系的數據。在Oracle中可以在關聯條件中加入(+)來實現外連接操作 oracle外連接專用語法只能應用oracle數據庫,不能應用于其它的數據庫 oracle外連接是在對方的關聯條件后面加上(+) 135、標準SQL外連接查詢(重點):使用標準SQL語句 實現外連接查詢操作,可以匹配任意的數據庫 左外連接查詢:以左表為主,查詢左表中所有的數據,以及與之關聯的右表中的數據 格式: select 別名1.*/列名,別名2.*/列名 from 左表 別名1 left(outer)join 右表 別名2 on 關聯條件 where 條件 右外連接查詢:以右表為主,查詢右表中所有的數據,以及與之有關聯的左表中的數據 格式: select 別名1.*/列名,別名2.*/別名 from 左表 別名1 right(outer)join 右表 別名2 on 關聯條件 where 條件 全外連接:連接與之關聯的所有表中所有的數據 格式: select 別名1.*/列名,別名2.*/列名 from 表1 別名1 full(outer)join 表2 別名2 on 關聯條件 where 條件 136、交叉連接cross join 格式: select 別名1.*/列名,別名2.*/列名 from 表1 別名1 cross join 表2 別名2 where 條件 交叉連接作用于兩個關系上,并且第一個關系的每個元組與第二個關系的所有元組進行連接這樣的操作形式與笛卡爾積是完全相同的 137、自然連接 natural join 運算作用于兩個關系最終會通過兩個關系產生一個關系作為結果,自然連接只考慮那些在兩個關系模式中都出現的屬性上取值相同的元組對 格式: select 別名1.*/列名,別名2.*/列名 from 表1 別名1 natural join 表2 別名2 where 條件 select * from emp natural join dept 自然連接自動匹配關聯數據消除笛卡爾積是內連接的方式 138、Using子句 格式: select 別名1.*/列名,別名2.*/列名 from 表1 別名1 join 表2 Using(關聯列名稱)where 條件 select * from emp join dept using(deptno)using不使用關聯字段也可以消除笛卡爾積 139、on子句 在SQL:1999語法中由用戶手工設置關聯條件 格式: select 別名1.*/列名,別名2.*/列名 from 表1 別名1 join 表2 on(關聯條件)where 條件 select * from emp e join salgrade s on(e.sal between s.losal and s.hisal) 140、日期函數 主要用于處理date類型的數據 常見的日期格式 年月日;yyy-mm-dd(y:年份 m:月份 d:幾號) 年月日時分秒;yyy-mm-dd hh24:mi:ss hh24: 24小時制,小時 mi: 分鐘 s: 秒鐘 系統默認的日期格式 dd-mon月-yy eg:11-11月-11 2011-11-11 sysdate:指代當前的系統時間 select sysdate from dual 修改日期時間格式 先輸入alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss' 然后輸入select sysdate from dual; 141、to_char()函數:把date類型的數據轉換為char類型數據進行顯示 to_char(date數據,'日期格式')select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mm:ss')from dual 142、to_char()函數中主要轉變數字: 9 顯示 一位數字,顯示 千位符.顯示 小數點 0 顯示 前導0 L 根據語言環境,自動選擇貨幣 $ 顯示 美元符號 select to_char(9568436.635,'000,000,000,000.000000')from dual select to_char(9568436.635,'L999,999,999.999')顯示貨幣, to_char(9568436.635,'$999,999,999.999')顯示美元 from dual; 143、months_between(d1,d2):兩個日期d1和d2之間間隔了多少個月 select empno,enmae,job,sal,hiredate, months_between(sysdate,hiredate)from emp add_moths(d1,數字):d1之后數字個月 案例3個月后的今天 select sysdate,add_months(sysdate,3)from dual 數字為負數表示之前 144、下一個指定日期 next_day(日期,星期數) 求出指定日期當月的最后一天 last_day(日期) 145、時間日期分割,或計算給定兩個日期的間隔 extract(格式from數據)select extract(year from systimestamp)years ,extract(month from systimestamp)months ,extract(day from systimestamp)days,extract(hour from systimestamp)hours ,extract(minute from systimestamp)minutes,extract(second from systimestamp)seconds from dual; 146、將字符串轉變為時間戳 to__timestamp()select to_timestamp('2015-12-10 12:25:30','yyyy-mm-dd hh24:mi:ss')from dual 147、將制定數據類型轉變為數字型 to_number(列/字符串)select to_number('10')*to_number('21')from dual; 148、to_date()函數:把char類型數據轉換為date類型的數據,經常用于跟insert語句結合使用 to_date('日期格式字符串','日期格式') 149、使用默認的日期格式插入數據 insert into emp(empno,ename,hiredate)values(6911,'孫權','21-12月-16') 150、視圖 1)視圖是一張虛擬表,通過視圖查看一張或者多張表中的數據。 2)視圖中不存儲任何物理數據,視圖是查看數據的窗口。所以刪除一個視圖,對表中的數據沒有任何影響。 3)視圖中的數據都是來源于表,是在視圖被使用的動態生成的。 通過視圖可以集中,簡化,定義數據的顯示,用戶可以通過視圖來訪問表中的數據,而不需要直接查詢表。 151、創建視圖的格式 create view 視圖名as 查詢語句 案例:查詢emp表中所有的數據,查詢結果作為視圖emp_view1 create view emp_view1 as select * from emp 152、修改視圖的格式 create or replace view 視圖名稱 as 查詢語句 例:查詢emp表中工資高于1000所有員工的編號,姓名,職位,工資,查詢結果修改視圖emp_view1 create or replace view emp_view1 as select empno,ename,job,sal from emp where sal > 1000 153、通過視圖修改(insert ,update,delete)表中數據 create view dept_view3 as select * from dept 154、通過視圖插入語句 insert into dept_view3 values(70,'財務','杭州')155、通過視圖修改語句 update dept_view3 set loc = '蘇州' where dname = '測試' 通過視圖刪除語句 delete from dept_view3 where deptno in(50,60,70) 156、只讀視圖:只能通過該類視圖查看表中的數據,不能通過視圖修改表中的數據 格式: create view 視圖名稱 as 查詢語句 with read only 157、刪除視圖 格式:drop view 視圖名稱 drop view emp_view1 158、根據舊表創建新表 create table 新表 as select * from 舊表 159、oracle數據庫默認端口號:1521 MySQL默認端口號:3306 SQL Server默認端口號:1433 Https默認 端口:443 HTTP默認端口:80 FTP默認端口:21 SOCKS代理協議服務器常用端口號:1080 Telnet(遠程登錄)協議代理服務器常用端口:23 TOMCAT默認的端口號:8080 ORACLE EMCTL默認的端口號:1158 MS SQL*SERVER數據庫monitor:1434 QQ默認的端口號:1080 Oracle XDB FTP服務,默認的端口號:2100 Oracle XDB(XML 數據庫),默認的端口號:8080 WebLogic,默認的端口號:7001 Webshpere應用程序,默認的端口號:9080 JBOSS,默認的端口號:8080 webshpere管理工具,默認的端口號:9090 DB2 默認端口號為:5000 PostgreSQL默認端口號為:5432 200資源(網頁等)被永久轉移到其它URL 404內部服務器錯誤 select e.empno 員工編號,e.ename 員工姓名, to_char(e.hiredate,'yyyy-mm-dd')入職日期,e.job 工作,m.ename 領導姓名, e.sal 月工資,(e.sal+ nvl(e.comm,0))*12 年薪,s.grade 工資等級,d.deptno 部門編號, d.loc 地址,d.dname 部門名稱 from emp e,dept d,salgrade s,emp m where d.deptno=e.deptno and e.mgr=m.empno and e.sal between s.losal and s.hisal and e.sal between 1500 and 3500 and to_char(e.hiredate,'yyyy')= '1981' order by 年薪 desc, 工作 desc 160、集合運算 集合運算時一種二目運算符,包括交,差,并,笛卡爾積 union all(并集)返回若干個查詢結果全部內容,重復的元組也會顯示 select * from dept union all select * from dept where deptno=10;結果為5條數據(有1條重復) union(并集)返回若干個查詢結果全部內容,重復的元組不會顯示 select * from dept union select * from dept where deptno=10;結果4條數據 intersect(交集)返回若干個查詢結果相同中的部分 select * from dept intersect select * from dept where deptno=10;結果為1條數據 minus(差集)返回若干個查詢結果中不同的部分 select * from dept minus select * from dept where deptno=10 結果為3條數據 161、分析函數 函數名稱([參數])over(partition by 子句 字段,..Order by 子句 字段,…[asc | desc] [nulls first | nulls last] windowing子句); 函數名稱: 類似于count(),sun()等 over子句: 為分析函數指明一個查詢結果集,此語句 在select中使用 partition by 子句: 將一個簡單的結果分為N組(或者分區),而后按照不同的組對數據進行統計 order by子句: 明確指明數據在每個組中的排列順序,分析函數的結果與順序無關 nulls first | nulls last: 表示返回數據行中包含null值出現在排列序列的前還是尾 windowing子句(代名詞): 給出在定義變化固定的數據窗口方法,分析函數將對此數據進行操作 數據庫老師畫的重點 數據庫:數據庫是長期存儲在計算機內、有組織、可共享的大數據集合。數據庫操縱功能:查詢select、插入insert、刪除delete、修改update 數據庫系統的特點:1數據結構化2數據的共享高,冗余度低,易擴充3數據獨 立性高4數據由DBMS統一管理和控制 數據模型的組成要素:數據結構、數據操作、完整性約束 概念模型:要出大體,畫圖 信息世界中的基本概念———— 1、實體:客觀存在并可以相互區別的事物稱為實體 2、屬性:實體所具有的某一特性 3、碼(key):唯一標識實體的屬性集稱為碼 4、域(domain):域是一組具有相同數據類型的集合 5、實體型(entity type):具有相同屬性的實體必然具有共同的特征和性質。用實體名 及屬性名集合來抽象和刻畫同類實體,稱為實體型。 6、實體集(entity set):同一類型的實體的集合 7、聯系:在現實世界中,事物內部以及事物之間是有聯系的,這些聯系在信息世界中 反應為實體(型)內部的聯系和實體(型)之間的聯系。實體內部的聯系通常是指 組成實體的各屬性之間的聯系;實體之間的聯系通常是指不同實體集之間的聯系 最常用的數據模型: 1、層次模型(Hierarchical Model) 2、網狀模型(Network Model) 3、關系模型(Relational Model) 4、面向對象模型(Object Oriented Model) 5、對象關系模型(Object Relational Model)其中層次模型和網狀模型統稱為格式化模型 數據庫系統的三級模式結構: 1、模式(scheme):模式也稱邏輯模式,是數據庫中全體數據的邏輯結構和特征的描述,是所有用戶的公共數據視圖。他是數據庫系統模式結構的中間層,既不設計涉及數據的物理存儲細節和硬件環境,也與具體的應用程 序、所使用的應用開發工具及高級程序設計語言無關。 2、外模式(external schema):外模式也稱為子模式(subschema)或用戶模式,他是數 據庫用戶(包括應用程序員和最終用戶)能看見和使用 的局部數據的邏輯結構和特征的描述,是數據庫用戶的數據視圖,是與某一應用有關的數據的邏輯表示。 3、內模式(internal scheme):內模式也稱存儲模式(storage schema),一個數據庫只有 一個內模式。他是數據庫物理結構和存儲方式的描述,是 數據在數據庫內部的表達方式。數據庫的二級映像功能與數據庫獨立性———— 為了能夠在系統內部實現這3個抽象層次的聯系和轉換,數據庫管理系統在這三個模式之間提供了兩層映像: ·外模式/模式 映像 ·模式/內模式 映像 正是這兩層映像保證了數據庫系統中的數據能夠具有較高的邏輯獨立性和物理獨立性 關系(relation):D1*D2*D3··*Dn的子集叫做在域D1、D2、D3···Dn上的關系,表示 為R(D1、D2、D3···Dn) 這里的的R表示關系的名字,n是關系的目或度(degree)關系中每個元素是關系中的元組,通常用t表示 當n=1時,稱關系為單元關系(unary relation),或一元關系 當n=2時,稱該關系為二元關系(binary relation) 關系是笛卡爾積的有限子集,所以關系也是一個二維表,表的每行對應一個元組,表的每列對應一個域。由于域可以相同,為了加以區分,必須對每列起一個名字,稱為屬性(attribute)。n目關系必有n個屬性。 若關系中的某一屬性組的值能夠唯一的標識一個元組,則稱該屬性組為候選碼(candidate key) 若一個關系有多個候選碼,則選定其中一個為主碼(primary key)候選碼的諸屬性稱為主屬性(prime attribute)。不包含在任何候選碼中的屬性稱為非主屬性(non-prime attribute)或非碼屬性(non-key attribute)P46 沒有搞明白干嘛使得!!!!!!!!!!! 關系的三類完整性約束:實體完整性、參照完整性、用戶定義的完整性 實體完整性和參照完整性被稱作關系的兩個不變性 1、實體完整性(entity integrity):主碼中的屬性即主屬性不能取空值 2、參照完整性(referential integrity): 若屬性(或屬性組)F是基本關系R的外碼,它與基本關系S的的主碼K相對應(基 本關系R和S不一定是不同的關系),則對于R中每個元組在F上的值必須為: ·或者取空值(F的每個屬性值均為空值)·或者等于S中某個元組的主碼值 SQL(Structured Query Language),即結構化查詢語言,是關系數據庫的標準語言。SQL 的特點: 1、綜合統一 2、高度非過程化 3、面向集合的操作方式 4、以同一種語法結構提供多種使用方式 5、語言簡潔、易學易用 SQL的動詞: 數據查詢:select 數據定義:create、drop、alter(房間)修改表 數據操縱:insert、update(家具)修改數據、delete 數據控制:grant、revoke 繪制ER圖———— 在ER圖中有如下四個成分: 矩形框:表示實體,在框中記入實體名。菱形框:表示聯系,在框中記入聯系名。 橢圓形框:表示實體或聯系的屬性,將屬性名記入框中。對于主屬性名,則在其名稱下 劃一下劃線。 連線:實體與屬性之間;實體與聯系之間;聯系與屬性之間用直線相連,并在直線上 標注聯系的類型。(對于一對一聯系,要在兩個實體連線方向各寫1; 對于一對 多聯系,要在一的一方寫1,多的一方寫N;對于多對多關系,則要在兩個實體 連線方向各寫N,M。 基本表是本身獨立存在的表,在SQL中一個關系就對應一個基本表。一個(或多個)基本表對應一個存儲文件,一個表可以帶若干索引,索引也可以放在存儲文件中。存儲文件的邏輯結構組成了關系數據庫的內模式。存儲文件的物理結構是任意的,對用戶是透明的。 視圖是從一個或幾個基本表導出的表。它本身不獨立存儲在數據庫中,即數據庫中只存放視圖的定義而不存放視圖對應的數據。這些數據仍存放在導出視圖的基本表中,因此視圖是一個虛表。視圖在概念上與基本表等同,用戶可以在視圖上再定義視圖。 基本表的定義、刪除與修改: 1、定義基本表:create table ***() 2、定義主鍵:Primary key == not null(中間不用連接符號)unique 3、定義外碼的語句:foreign key(某個字段)references 某表(某字段) 4、定義主碼語句:primary key(***,***) 5、修改基本表:alter table 某表名 add 列名<數據類型>[完整性約束] drop <完整性約束名>(字段名) alter column<列名><數據類型> 6、刪除表:drop table 表名[restrict | cascade級聯刪除] 7、建立索引:create [unique] [clustered] index 索引名 on 表名(列名[asc | desc],······)·clustered 表示是聚簇索引 ·unique表明此索引的每一個索引值只對應唯一的數據記錄 ·用戶可以在最經常查詢的列上建立聚簇索引以提高查詢效率 ·在一個基本表上只能建立一個聚簇索引 ·建立局促索引后,更新該索引列上的數據時,往往導致表中記 錄的物理順序的額變更,代價較大,因此對于經常更新的列不 宜建立聚簇索引 8、刪除索引:drop index <索引名> 上機的時候不太一樣:drop index 表名。索引名字 9、數據的查詢: select [all | distinct] <目標列表達式>,······ from 表名或者視圖名,··· where 條件表達式 group by 列名1 [having 條件表達式] order by 列名2 [asc | desc] ·如果有group by 子句,則結果按“列名1”的值進行分組,該屬性列值相 等的元組為一個組。通常會在每組中作用聚集函數。如果group by 子句帶 having短語,則只有滿足指定條件的組才予以輸出。 ·如果有order by 子句,則結果表按“列名2”的值的升序或降序排序 ·select Sname Name,‘Year of Birth:’Birth,2013-Sage Birthday,lower (Sdept)Department from Student lower表示小寫 常用的查詢條件———— 比 較:大于、等于、小于、不等于(< >/!=)、大于/小于等于、不小于、不大于、not+上述比較運算符 確定范圍:between and,not between and 確定集合:in,not in 字符匹配:like,not like 空 值:is null,is not null 多重條件(邏輯運算):and,or,not 例子———— ·select Sname,Sage from Student where Sdept(not)in(‘cs’,‘ma’,‘is’) 字符匹配:[not] like ‘字符串’[escape‘換嗎字符’] 百分號表示任意長度、下劃線表 示任意單個字符 聚集函數———— count([distinct | all] *) 統計元組個數 count([distinct| all] 列名) 統計一列中值的個數 sum([distinct| all] 列名) 計算一列值的總和(此列必須是數值型)avg([distinct| all] 列名) 計算一列的平局值(此列必須是數值型)max([distinct| all] 列名) 求一列中的最大值 min ·如果指定distinct短語,則表示在計算時要取消指定列中的重復值。如果不指定distinct 短語或者指定all短語(all為缺省值),則表示不取消重復。 ·注意在聚集函數遇到空值時,除count(*)外,都跳過空值而只處理非空值。·注意where子句中不能用聚集函數作為條件表達式 group by子句———— where 子句與having 短語的區別在于作用對象不同。Where 子句作用對象作用于基本表或試圖,從中選擇條件的元組。Having短語作用于組,從中選擇滿足條件的組。 例子:select Sno from SC group by Sno having count(*)>3 查詢了選修3門以上課程的學生學號 鏈接查詢—————— 例子: 非自然鏈接 ·select Student.*,SC.* from Student,SC Where Student.Sno=SC.Sno 自然鏈接 ·select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade from Student,SC where Student.Sno=SC.Sno 自身鏈接 ·select FIRST.Cno,SECOND.Cpno from Course FIRST,Course SECOND where FIRST.Cpno=SECOND.Cpno 外連接 ·select Student.Sno,Sname,Sage,Sdept,Cno,Grade from Student left outer join SC on Student.Sno=SC.Sno ·左外鏈接列出左邊關系中所有的元組,右外連接列出右邊關系中的所有元組 嵌套查詢 ·select Sname from Student where Sno in(select Sno from SC where Cno=‘2’) ·找出每個學生超過他選修課程平均成績的課程號 Select Sno,Cno From SC x Where Grade >=(select avg(Grade) From SC y Where y.Sno=x.Sno) 授權———— Grant 權限,····· On 對象類型 對象名,····· To 用戶,····· [with grant option]只一句表示權限的傳遞 例子: ·Grant all privileges On Student,Course To U1,U2 ·grant update(Sno),select on Student to u4 ·revoke update(Sno) on table Student from u4 一個滿足BCNF的關系模式有: ·所有非主屬性對每一個碼都是完全函數依賴 3NF 編輯 3NF,即第三范式是要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那么在員工信息表中列出部門編號后就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三范式(3NF)也應該構建它,否則就會有大量的數據冗余。簡而言之,第三范式就是屬性不依賴于其它非主屬性。滿足第三范式(3NF)必須先滿足第二范式(2NF) 2NF(第二范式) 第二范式(2NF)是在第一范式(1NF)的基礎上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數據庫表中的每個實例或行必須可以被唯一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。如圖3-2 員工信息表中加上了員工編號(emp_id)列,因為每個員工的員工編號是唯一的,因此每個員工可以被唯一區分。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。 數據庫總結:共三天的課程 數據庫的概念:數據庫是一組有序的數據的集合; 數據庫的作用:為了有效的管理數據; 數據類型: 一 字符串相關的類型:一般用于人名、大于2147483647(10位數)的數字、地址等字符信息 使用格式:字段名 char(存放字符的長度) 或者 字段名 varchar(存放字符的長度)Char:代表的是定長的字符串類型,定義了多長,就分配多長的存儲空間,只要不超過定義的長度,分配給char的空間長度就不會改變,余下的部分用空格代替; Varchar:代表的是可變長度的字符串類型,定義的長度可以理解為是虛擬的空間,只要字符串的長度不超過定義的長度,那么varchar的分配空間長度就是字符串實際的長度,余下的部分自動消失; 二 數字相關的類型:一般用于工資、人數統計等方面; 使用格式:字段名 int/float/double 【此處不用定義字段的長度】 int :取值的范圍-2147483648~2147483647,后面可以設置主鍵及自增長; float/double:用于帶有小數的數據定義 decimal:多用于金錢的數據 三 時間相關的數據類型:一般用于時間的統計,例如登錄時間、修改時間、退出時間等; 使用格式:字段名 date/time/datetime/timestamp 【此處不用定義字段的長度】,插入表的時候格式與字符串的插入格式一樣,都是用單引號插入 date:日期類型 格式:yyyy-MM-dd time:時間類型 格式:hh:mm:ss Datetime:日期時間 格式:yyyy-MM-dd hh:mm:ss Timestamp:時間戳 格式:yyyy-MM-dd hh:mm:ss 數據庫的操作: 一 查看所有數據庫:select databases;二 查看所有表:select tables;三 創建數據庫:create database 數據庫名稱; use 數據庫名稱; 四 創建表:create table 表名(字段1 類型(長度)[約束], 字段2 類型(長度)[約束], 字段n 類型(長度)[約束])注:字段n的結尾處不需要用逗號分隔 五 刪除當前表/數據庫:drop table 表名/ 數據庫名; 六 向表中插入數據:insert into 表名(字段1,字段2,字段n)values(值1,值2,值n),(值1,值2,值n),(值1,值2,值n),(值1,值2,值n)...注:此處的插入數據可以用逗號隔開,想要插入幾條數據就插入幾個值。 七 查看當前表的值:select * from 表名 注:*是通配符,代表全部的意思,此處*還可以用表中的字段名代替,那么查看就是相應的字段名下的數據。 約束: 一 主鍵約束:primary key 代表的是唯 一、不重復,非空的約束 使用格式: 字段名 類型(長度)primary key 自增長:auto_increment 必須與主鍵約束一同使用,字段的類型是整型,插入數據的時候可以不用向設置自增長的字段添加數據,起始的默認數字是:1 二 唯一約束:unique 不可以重復,唯一 使用格式: 字段名 類型(長度)unique 注:空格是不可以作為字符串使用的,空格相當于null,如果向設置unique的字段內插入數據是存在【‘空格’、null、(‘’)】當中兩個或兩個以上的時候就會報錯【’null’是字符串,不是空】 三 非空約束:not null 插入數據時必須要為設置not null的字段插入數據,這個字段不能為空 使用格式: 字段名 類型(長度)not null 注:空格是不可以作為字符串使用的,空格相當于null,如果向設置not null的字段內插入數據是存在【‘空格’、null、(‘’)】當中一個或一個以上的時候就會報錯 四 默認約束:default 為字段設置默認值,當不為設置默認約束的字段插入數據是,系統自動將默認值賦予這個字段 使用格式: 字段名 類型(長度)default 值 五 檢查約束:check(檢查的內容)使用格式: 字段名 類型(長度)check(檢查的內容)注:在SQL語句中沒有實際的含義,但是需要會用 六 外鍵約束:foreign key 必須是另一個表的主鍵(唯一的),設置了外鍵的字段,受到關聯表中相應主鍵的字段的約束,當要為外鍵約束插入數據的時候,必須先為被關聯的表插入相應主鍵的數據; 使用格式: 創建表時候就設置外鍵約束 字段名 類型(長度),Foreign key(字段名)references 表名(對應主鍵的字段名)表已經創建完,插入外鍵約束 Alter table 表名 add constraint fk_f foreign key(要設置外鍵的字段名)references 被關聯的表名(被關聯的字段名);表的結構: 查看表結構:desc/describe 表名;修改表名:alter table 表名 rename 新表名 添加新字段:alter table 表名 add 字段名 類型(長度)修改字段:alter table 表名 change 舊字段 新字段 新字段類型(長度)刪除字段:alter table 表名 drop 字段名 記錄的操作: 一 插入記錄:insert into 表名(字段名1,字段名n)values(值1,值n)二 修改記錄:update 表名 set 字段名=值 where 條件 注:這里如果不加where條件,那么這個表的這個字段名下的數據全部賦值成為“值” 三 刪除記錄:delete from表名 where 條件 注:此處刪除的是表中的符合where條件的整條記錄 注意:使用delete和update的時候要千萬注意,必須要寫where條件語句,要不然就會將當前表中的所有數據改變,在想改回來的話會非常非常費勁!!! 四 查詢記錄:select 字段名1,字段名n from 表名 where 查詢條件 查詢去掉重復的值:關鍵字 distinct 格式:select distinct 字段名1,字段名n from 表名命別名/賦值表: 關鍵字 as 命別名:select 字段名 as ‘自定義名’ from 表名 賦值表:create table 新表名 as select * from 舊表名 3 查詢條件語句的范圍:in(等值判斷)/not in select 字段名1,字段名n from 表名 where 字段名 in/not in(值1,值n)4 模糊查詢:like 匹配標識符:’_’代表一個字符、%代表多個字符 Select 字段名 from 表名 where 字段名 like ‘_sth%’ 注:like后面的判斷值如果是數字的話要加單引號,例如想要查詢的條件是12345,可以這樣寫:’%3%’,單引號必須加 5 區間查詢:limit m,n 查詢從第m個記錄開始,一共n條記錄,這里的m指的是類似Java數組里的下標,計數從0開始 Limit m 查詢從頭開始的一共m條記錄 Select */字段名 from 表名 limit m,n 6 查詢值是否存在某段區間內:between 最大值 and 最小值(int 型的最大值、最小值)Select 字段名1,字段名n from 表名 where 字段名 between 最大值 and 最小值: 注意這里面的條件含有等于最大值和等于最小值 字段名 between 最大值 and 最小值= 字段名>=最小值 and 字段名<=最大值 邏輯運算符在此處可通用:< <= > >= = != 集合函數: 使用方法與Java中的方法的使用類似,注意的是函數名后面緊跟著(),中間不能有空格 一 符合條件的記錄的個數:countil Select count(字段名)from 表名 where 查詢條件 二 求某個字段的值的總和:sum Select sum(字段名)from 表名 where 查詢條件 三 求某個字段的值的平均值:avg Select avg(字段名)from 表名 where 查詢條件 四 求某個字段的值的最大值:max Select max(字段名)from 表名 where 查詢條件 五 求某個字段的值的最大值:min Select min(字段名)from 表名 where 查詢條件 多表查詢: 笛卡爾積:select(字段1,字段n)from 表1,表n 自己想要的查詢(找到所有被查詢的表的相同的字段): Select(a.字段1,a.字段n,b.字段1,b.字段n)from 表名 as a,表名 as b where a.字段名=b.字段名; 聯合查詢: 左連接:select 字段名/* from 左表名 left join 右表名 on 左表名.字段名=右表名.字段名 查詢結果:左表全部顯示,右表與左表相同的字段名的部分顯示 右連接:select 字段名/* from 左表名 right join 右表名 on 左表名.字段名=右表名.字段名 查詢結果:右表全部顯示,左表與右表相同的字段名的部分顯示 內連接:select 字段名/* from 左表名 inner join 右表名 on 左表名.字段名=右表名.字段名 查詢結果:只有左表與右表相同的部分才顯示 全連接:select 字段名/* from 左表名 full join 右表名 查詢結果:’*’的結果是笛卡爾積 ‘字段名’的結果是這個字段名下的笛卡爾積 函數:函數名與小括號之間不能有空格,字符串必須用單引號圈起來 一 求字符串長度:length Select length(字符串)二 字符串的截取:substring(字符串,m)/(字符串,m,n)Select substring(字符串,m)/(字符串,m,n)三 小寫轉大寫:upper Select upper(字符串)四 大寫轉小寫:lower Select lower(字符串)五 加密:MD5 Select MD5(字符串)六 顯示現在的時間:now Select now() 迷糊中: group by order by 子查詢 課 程 設 計 報 告 課程名稱數據庫課程設計—總結題目個人CD盤管理系統_________________________________ 指導教師設計起止日期 學院計算機學院 系別專業計算機科學與技術 學生姓名班級/學號 成績___________________ 課程設計總結: 經過近2個月的設計,CD盤管理系統基本開發完成,該系統是一個簡單的關于數據庫與現實相結合的管理系統,它集各種功能用于一身,在系統的各個模塊中體現了它的功能,針對音樂愛好者的需求方面進行設計的,方便了用戶的一些信息操作,為音樂愛好者節省了管理成本,提高管理效率。該系統的界面簡單大方,非常方便用戶的操作,同時,也為以后系統的擴展留出了足夠的空間。 在此次設計中后臺主要采用了servlet和JavaBean技術,數據庫則加入了存儲過程和觸發器的控制。我進一步理解了servlet和JavaBean的工作機制和所提供的便利,也感受到了存儲過程和觸發器所帶來的方便。 servlet具有以下的優勢:方便Servlet提供了大量的實用工具例程,例如自動地解析和解碼HTML表單數據、讀取和設置HTTP頭、處理Cookie、跟蹤會話狀態等。* 功能強大在Servlet中,許多使用傳統CGI程序很難完成的任務都可以輕松地完成。例如,Servlet能夠直接和Web服務器交互,而普通的CGI程序不能。Servlet還能夠在各個程序之間共享數據,使得數據庫連接池之類的功能很容易實現。 2可移植性好Servlet用Java編寫,Servlet API具有完善的標準。因此,為IPlanet Enterprise Server寫的Servlet無需任何實質上的改動即可移植到Apache、Microsoft IIS或者WebStar。幾乎所有的主流服務器都直接或通過插件支持Servlet。3 節省投資不僅有許多廉價甚至免費的Web服務器可供個人或小規模網站使用,而且對于現有的服務器,如果它不支持Servlet的話,要加上這部分功能也往往是免費的(或只需要極少的投資)。 JavaBean具有以下特點: 用戶可以使用JavaBean將功能、處理、值、數據庫訪問和其他任何可以用java代碼創造的對象進行打包,并且其他的開發者可以通過內部的JSP頁面、Servlet、其他JavaBean、applet程序或者應用來使用這些對象。用戶可以認為JavaBean提供了一種隨時隨地的復制和粘貼的功能,而不用關心任何改變。JavaBean可分為兩種:一種是有用戶界面(UI,User Interface)的JavaBean;還有一種是沒有用戶界面,主要負責處理事務(如數據運算,操縱數據庫)的JavaBean。JSP通常訪問的是后一種JavaBean。 存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可以用流控制語 句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的運算。可保證數據的安全性和完整性。通過存儲過程可以使沒有權限的用戶在控制之下間接地存取數據庫,從而保證數據的安全。通過存儲過程可以使相關的動作在一起發生,從而可以維護數據庫的完整性。在運行存儲過程前,數據庫已對其進行了語法和句法分析,并給出了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。由于執行SQL語句的大部分工作已經完成,所以存儲過程能以極快的速度執行。可以降低網絡的通信量。使體現企業規則的運算程序放入數據庫服務器中,以便集中控制。當企業規則發生變化時在服務器中改變存儲過程即可,無須修改任何應用程序。企業規則的特點是要經常變化,如果把體現企業規則的運算程序放入應用程序中,則當企業規則發生變化時,就需要修改應用程序工作量非常之大(修改、發行和安裝應用程序)。如果把體現企業規則的運算放入存儲過程中,則當企業規則發生變化時,只要修改存儲過程就可以了,應用程序無須任何變化。 觸發器可通過數據庫中的相關表實現級聯更改;不過,通過級聯引用完整性約束可以更有效地執行這些更改。觸發器可以強制比用 CHECK 約束定義的約束更為復雜的約束。與 CHECK 約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息。觸發器也可以評估數據修改前后的表狀態,并根據其差異采取對策。一個表中的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許采取多個不同的對策以響應同一個修改語句。 在本系統的設計過程中,首先通過對CD盤管理系統功能進行詳細的分析,得到系統功能模塊圖,然后根據系統功能分析,圍繞它進行系統的設計,介紹開發環境和開發技術,再可行性分析、功能和性能需求,然后得出系統業務流圖、數據流圖、E-R圖,并進行數據庫的設計和模塊化的實現。由于之前有稍微接觸過Java Web方面的知識,再加上利用自己的課余時間的學習,做起來感覺沒太多的困難。經過這次系統設計過程,加深了我對數據庫操作的認識,更加熟悉了Java Web的構架,如servlet,struts,SOA等等。完成本設計后,才知道平日里書本上所學的東西太少,僅是些概念知識,沒運用到實踐中來,知識是無法得到升華的。只有不斷地學習才能夠跟上科技和知識的發展步伐。 數據庫課程總結 軟件0701 07301024 楊彥妍 在學習數據庫之前一直覺得數據庫沒有什么深入研究的價值,覺得無非是將數據存起來進行增刪改查的操作就是了。直到真正接觸到了數據庫這門課才真地發現了這里面得奧妙和值得專研的價值。不知不覺中已經過了將近一個學期,這是第一次接觸王老師的課堂,但是老師清晰地講解讓我這一個學期收益匪淺。 數據已然成為當今信息社會的一種極為重要的資源,各個部門無時無刻不在于數據打交道,對于這些大量數據的處理使得數據庫應運而生。作為學習軟件的我們對于數據庫的學習更加是必不可少。 雖然對于SQL語言這些東西以前基本上沒有太多的接觸,但是清晰易懂語言的模式并沒有對學習造成太大的困擾。而實際上這學期的雙語教學的確讓我的學習變的有些吃力,不是因為讀不懂,而是讀過之后理解僅僅停留在字面意思上,不能很透徹地理解到位。但是老師課堂上深入淺出的講解,和對于課件的翻譯讓我對此有了很大的彌補。對于數據庫的理解已經不僅僅是知道增刪改查這些簡單的基本操作,知道表之間的連接,一些運算,一些模式等等。實際上,對于數據庫進行建立與操作是十分復雜的,中間要經過很多考慮對于現實的結合,對于軟硬件的要求都需要考慮在內。 從某種意義上看來說,對于數據庫的學習不僅僅改變了我對與數據庫的看法,同時也改變了我對于程序設計的看法。從前簡單的看到就做是不科學的,應該經過規劃和研究分析才能上手。于此同時,老師留的項目其實是對于我們的所學習知識的一種檢驗與擴充。因為項目結合很多的其他知識,同時做項目的過程是一個對于知識的重新審視與鞏固的過程。 總地來說,這學期的數據庫課程讓我覺得有所收獲,有所得。加強了對于課程本身的理解,同時也知道了更廣的知識面。其實感受最深的還是老師的講課方式,很詳細很透徹,不懂的地方老師還會很耐心地講解,總很和藹,問問題的時候也不會緊張。 關于意見、建議,總體上來說,老師的方法很好。如果真說意見,建議的話,我覺得針對雙語教學,上課讓同學翻譯一些要點是必要的。因為本身大家對于英語的理解就不容易透徹,再加上一部分同學的英語水平并不是很好,所以容易造成誤解。如果自己翻譯,老師更正的話,會讓我們的記憶更加深刻,理解更加透徹,掌握更加牢固。另一點就是我覺得可以減少對于PPT 的依賴。因為每次上課的時候,看課件有時候并不是很清楚,但是當老師在黑板上演示過后就覺得特別的理解,很清晰,感覺線索被理順了,明了了。 這就是我對于今年著學期上數據庫的一些感受,真的很希望以后還有機會選王老師的課。第二篇:數據庫總結
第三篇:數據庫總結
第四篇:數據庫課程設計總結
第五篇:數據庫課程總結