移動(dòng)互聯(lián)網(wǎng)數(shù)據(jù)庫應(yīng)用與開發(fā)(Oracle)重點(diǎn)

1.關(guān)系模型的表達(dá)方式:二維表。

2.數(shù)據(jù)庫中存儲(chǔ)的基本對(duì)象是數(shù)據(jù)略步。

3.數(shù)據(jù)庫系統(tǒng)的核心是DBMS描扯。

4.DBMS的主要功能?

1)數(shù)據(jù)庫的定義功能( DDL 趟薄,數(shù)據(jù)庫三級(jí)結(jié)構(gòu)绽诚、兩級(jí)映象)
2)數(shù)據(jù)庫的操縱功能( DML ,過程性 DML (層次和網(wǎng)狀)和非過程性 DML (關(guān)系型) )
3)數(shù)據(jù)庫的保護(hù)功能(恢復(fù)杭煎、并發(fā)恩够、完整性、安全性)
4)數(shù)據(jù)庫的維護(hù)功能( DB 的載入岔帽、轉(zhuǎn)換玫鸟、轉(zhuǎn)儲(chǔ)等)
5)數(shù)據(jù)字典(存放三級(jí)結(jié)構(gòu)定義的數(shù)據(jù)庫)

5.SQL

例:查詢需要使用的學(xué)生表student和班級(jí)表classes。

學(xué)生表student

班級(jí)表classes
SELECT FROM 查詢 
INSERT INTO 新增
UPDATE 修改
DELETE 刪除
ALTER TABLE 修改表結(jié)構(gòu)

條件查詢

WHERE AND 與條件  OR 或條件 () 表示條件的組合
LIKE
IS NULL
IS NOT NULL

分組條件

GROUP BY 分組條件 HAVING 對(duì)分組后的數(shù)據(jù)進(jìn)行篩選

排序

ORDER BY    ASC(升序),DESC(降序)

統(tǒng)計(jì)函數(shù):SUM,AVG,COUNT,MIN,MAX
多表關(guān)聯(lián)

INNER JOIN  = JOIN
LEFT JOIN   = LEFT OUTER JOIN
RIGHT JOIN  = RIGHT OUTER JOIN

例:以學(xué)生表和學(xué)校表進(jìn)行關(guān)聯(lián)查詢犀勒。

學(xué)生表和學(xué)校表進(jìn)行的關(guān)聯(lián)查詢

子查詢:將查詢語句A的查詢結(jié)果作為查詢語句B的查詢條件使用
單行子查詢:子查詢的結(jié)果必定只有一個(gè)值屎飘,查詢的過程中使用了統(tǒng)計(jì)函SUM/AVG/COUNT/MIN/MAX。
多行子查詢
①IN條件判斷

SELECT fields FROM table WHERE field1 in (SELECT field2 FROM table WHERE ...);

注:field1 與 field2的字段類型相同
②ANY運(yùn)算符 > < = >= <= !=
接條件判斷贾费,只要條件滿足期中一個(gè)就可
field > any(子查詢):查詢條件是 field 大于 子查詢結(jié)果的任意一個(gè)值就行
③all 運(yùn)算符
關(guān)聯(lián)子查詢:將主查詢語句的某些字段拿到子查詢內(nèi)作為子查詢的查詢條件钦购。
盡量避免使用,當(dāng)數(shù)據(jù)量過大時(shí)會(huì)影響數(shù)據(jù)性能褂萧。

6.表的創(chuàng)建

數(shù)據(jù)類型:NUMBER,VARCHAR,CHAR,BLOB,DATE
數(shù)據(jù)表的約束:外鍵約束押桃、主鍵約束、非空約束导犹、唯一約束
索引類型
①B樹索引(默認(rèn)索引唱凯,保存講過排序過的索引列和對(duì)應(yīng)的rowid值)
②位圖索引:用于被創(chuàng)建字段的變化偏少羡忘,少于基數(shù)的1%
③反向鍵索引:用于被創(chuàng)建字段是遞增的情況,讓新增的數(shù)據(jù)平均分配給各分支
④基于函數(shù)的索引
序列:序列(SEQUENCE)是序列號(hào)生成器磕昼,可以為表中的行自動(dòng)生成序列號(hào)卷雕,產(chǎn)生一組等間隔的數(shù)值(類型為數(shù)字)。不占用磁盤空間票从,占用內(nèi)存漫雕。
創(chuàng)建序列需要CREATE SEQUENCE系統(tǒng)權(quán)限。
調(diào)用NEXTVAL將生成序列中的下一個(gè)序列號(hào)峰鄙,調(diào)用時(shí)要指出序列名浸间,即用以下方式調(diào)用:序列名.NEXTVAL。
CURRVAL用于產(chǎn)生序列的當(dāng)前值吟榴,無論調(diào)用多少次都不會(huì)產(chǎn)生序列的下一個(gè)值魁蒜。如果序列還沒有通過調(diào)用NEXTVAL產(chǎn)生過序列的下一個(gè)值,先引用CURRVAL沒有意義煤墙。調(diào)用CURRVAL的方法同上梅惯,要指出序列名,即用以下方式調(diào)用:序列名.CURRVAL仿野。
表和視圖的差異
①視圖是已經(jīng)編譯好的sql語句铣减。而表不是。
②視圖沒有實(shí)際的物理記錄脚作。而表有葫哗。
③表是內(nèi)容,視圖是窗口球涛。
④表只用物理空間而視圖不占用物理空間劣针,視圖只是邏輯概念的存在,表可以及時(shí)對(duì)它進(jìn)行修改亿扁,但視圖只能有創(chuàng)建的語句來修改捺典。
⑤表是內(nèi)模式,視圖是外模式从祝。
⑥視圖是查看數(shù)據(jù)表的一種方法襟己,可以查詢數(shù)據(jù)表中某些字段構(gòu)成的數(shù)據(jù),只是一些SQL語句的集合牍陌。從安全的角度說擎浴,視圖可以不給用戶接觸數(shù)據(jù)表,從而不知道表結(jié)構(gòu)毒涧。
⑦表屬于全局模式中的表贮预,是實(shí)表;視圖屬于局部模式的表,是虛表仿吞。
⑧視圖的建立和刪除只影響視圖本身滑频,不影響對(duì)應(yīng)的基本表。

7.PL/SQL 編程

%type
record
變量的定義
游標(biāo)的使用
游標(biāo)

DECLARE
  -- 聲明游標(biāo)
  CURSOR cursor_emp(var_job in VARCHAR2:='MANAGER',var_deptno in int:=10)
  IS SELECT empno,ename,sal FROM emp WHERE deptno=var_deptno and job=var_job;
  -- 定義record數(shù)據(jù)類型
  type record_emp is record(
    var_empno emp.empno%type,
    var_ename emp.ename%type,
    var_sal emp.sal%type
  );
  -- 指定變量的類型
  emp_row record_emp;
BEGIN
  -- 打開|執(zhí)行游標(biāo)
  OPEN cursor_emp();
  -- 讀取游標(biāo) 不可改變
  LOOP
    -- 讀取一行數(shù)據(jù)
    FETCH cursor_emp INTO emp_row;
    -- 判斷是否為空
    EXIT WHEN NOT cursor_emp%found;
    -- 執(zhí)行具體的語句
    dbms_output.put_line(emp_row.var_empno||'--'||emp_row.var_ename||'--'||emp_row.var_sal);
    -- 主動(dòng)拋出異常
    dbms_output.put_line(32/0);
  END LOOP;
  CLOSE cursor_emp;  -- 關(guān)閉游標(biāo)
EXCEPTION
  when ZERO_DIVIDE then
    dbms_output.put_line('捕獲到了異常');
    CLOSE cursor_emp;  -- 關(guān)閉游標(biāo)
  when others
    CLOSE cursor_emp;  -- 關(guān)閉游標(biāo)
END;

8.用戶模式

模式:創(chuàng)建一個(gè)用戶茫藏,就相應(yīng)的創(chuàng)建了 一個(gè)模式误趴。模式是指數(shù)據(jù)庫對(duì)象,是對(duì)用戶所創(chuàng)建的數(shù)據(jù)對(duì)象的總稱务傲。
模式對(duì)象包括表、視圖枣申、索引售葡、同義詞、序列忠藤、過程和程序包等 挟伙。
授權(quán)語句

GRANT TO
ROVEKE FROM
CREATE TABLE--只能在自己擁有得模式下建立表
CREATE ANY TABLE--可以在任何模式下建立表

權(quán)限查詢的相關(guān)表:USER_TAB_PRIVS,DBA_SYS_PRIVS
創(chuàng)建角色

CREATE ROLE roleName INDETIFIED BY password;

刪除角色

DROP ROLE roleName;

為用戶賦予角色

GRANT roleName TO userName;

賦予角色權(quán)限

GRANT [權(quán)限列表] TO roleName;

回收角色權(quán)限

REVOKE [權(quán)限列表] FROM roleName;

激活角色

SET ROLL

9.日志系統(tǒng)

1)數(shù)據(jù)文件:數(shù)據(jù)文件當(dāng)然是用來存儲(chǔ)實(shí)際數(shù)據(jù)的啦,數(shù)據(jù)文件是存儲(chǔ)數(shù)據(jù)的物理概念模孩,我們還有一個(gè)更大的邏輯概念尖阔,叫做表空間,表空間跟數(shù)據(jù)文件又是一個(gè)什么樣的關(guān)系呢榨咐?簡單的說就是一個(gè)表空間至少包含可一個(gè)數(shù)據(jù)文件介却,創(chuàng)建數(shù)據(jù)庫對(duì)象的時(shí)候指定的是使用的表空間,所以就不難理解為什么一個(gè)對(duì)象(比如一張大表)可以跨越多個(gè)數(shù)據(jù)文件了块茁。
2)控制文件:控制文件在Oracle數(shù)據(jù)庫中扮演著很重要的角色齿坷,沒有控制文件(或者控制文件損壞了),運(yùn)行著的實(shí)例立即崩潰数焊,關(guān)閉著的死活打不開永淌,你以為你是誰,可以說佩耳,控制文件一旦損壞遂蛀,數(shù)據(jù)庫必然down了。Oracle數(shù)據(jù)庫實(shí)例啟動(dòng)過程中干厚,當(dāng)啟動(dòng)到unmount時(shí)李滴,此時(shí)只是在內(nèi)存中為Oracle實(shí)例分配了實(shí)例空間,然后如果繼續(xù)要啟動(dòng)到mount狀態(tài)萍诱,這個(gè)時(shí)候控制文件就閃亮登場了悬嗓,因?yàn)镺racle要依據(jù)控制文件找到數(shù)據(jù)文件跟重做日志文件的路徑,確定找到了再進(jìn)去mount狀態(tài)裕坊,至于打開數(shù)據(jù)庫就是確定這些文件都一致包竹,沒有問題的話就能打開了。
3)日志文件
不對(duì)日志文件進(jìn)行歸檔。這種模式可以大大減少數(shù)據(jù)庫備份的開銷周瞎,但可能回導(dǎo)致數(shù)據(jù)的不可恢復(fù)苗缩。
歸檔日志文件:這是指為避免聯(lián)機(jī)日志文件重寫時(shí)丟失重復(fù)數(shù)據(jù)而對(duì)聯(lián)機(jī)日志文件所做的備份,當(dāng)Oracle轉(zhuǎn)向一個(gè)新的日志文件時(shí)声诸,將以前的日志文件進(jìn)行歸檔酱讶。為了防止出現(xiàn)歷史“缺口”的情況,一個(gè)給定的日志文件在它成功歸檔之前是不能重新使用的彼乌。歸檔的日志文件泻肯,加上聯(lián)機(jī)日志文件,為數(shù)據(jù)庫的所有改變提供了完整的歷史信息慰照。

上述學(xué)生表和班級(jí)表的查詢練習(xí):

①從學(xué)生表當(dāng)中查詢所有數(shù)據(jù)

SELECT * FROM student;

②從學(xué)生表當(dāng)中查詢學(xué)生的姓名灶挟、學(xué)號(hào)、年齡毒租、性別

SELECT stu_name,stu_code,stu_age,stu_gender FROM student;

③從學(xué)生表中查詢年齡大于18歲的學(xué)生

SELECT * FROM student WHERE stu_age > 18;

④從學(xué)生表中查詢年齡大于18歲的女學(xué)生

SELECT * FROM student WHERE stu_age > 18 AND student_gender = ‘女’;

⑤從學(xué)生表中查詢年齡大于18歲的女學(xué)生并且按照年齡降序稚铣,班級(jí)升序的條件排序

SELECT * FROM student 
WHERE stu_age > 18 AND student_gender = ‘女’
ORDER BY stu_age DESC,class_id ASC;

⑥從學(xué)生表中查詢年齡大于18歲的女學(xué)生或者是年齡小于18的男學(xué)生;

SELECT * FROM student
WHERE (stu_age > 18 AND student_gender = ‘女’) OR (stu_age < 18 AND student_gender = ‘男’);

⑦從學(xué)生表中查詢學(xué)生最大墅垮、最小的年齡和學(xué)生總數(shù)惕医,學(xué)生平均年齡

SELECT max(age), min(age), count(*), avg(age) FROM student;

⑧從學(xué)生表中查詢每個(gè)班學(xué)生最大、最小的年齡和學(xué)生總數(shù)算色,學(xué)生平均年齡

SELECT class_id,max(age), min(age), count(*), avg(age) FROM student 
GROUP BY class_id;

⑨從學(xué)生表中查詢每個(gè)班學(xué)生最大抬伺、最小的年齡和學(xué)生總數(shù),學(xué)生平均年齡,篩選出班級(jí)學(xué)生總數(shù)大于5的數(shù)據(jù)結(jié)果

SELECT class_id,max(age), min(age), count(*) as total, avg(age) FROM student 
GROUP BY class_id 
HAVING total > 5;

⑩從學(xué)生表中查詢每個(gè)班學(xué)生最大剃允、最小的年齡和學(xué)生總數(shù)沛简,學(xué)生平均年齡,并且查詢結(jié)果按照班級(jí)排序。

SELECT class_id,max(age), min(age), count(*), avg(age) FROM student 
GROUP BY class_id 
ORDER BY class_id ASC;

?從學(xué)生表中查詢班級(jí)名稱和每個(gè)班學(xué)生最大斥废、最小的年齡和學(xué)生總數(shù)椒楣,學(xué)生平均年齡,并且查詢結(jié)果按照班級(jí)排序。

SELECT class_name, max(age), min(age), count(*), avg(age) FROM student 
INNER JOIN classes ON classes.class_id = student.class_id 
GROUP BY student.class_id 
ORDER BY student.class_id ASC;

?羅列出每個(gè)班級(jí)的學(xué)生信息牡肉,按班級(jí)排序

SELECT student.class_id, classes.class_name, student.code, student.name 
FROM student 
INNER JOIN classes ON classes.class_id = student.class_id
ORDER BY student.class_id ASC;
SELECT student.class_id, classes.class_name, student.code, student.name 
FROM classes 
LEFT JOIN student ON classes.class_id = student.class_id
ORDER BY student.class_id ASC;

?查詢學(xué)生人數(shù)大于5個(gè)的班級(jí)信息捧灰,并且按照班級(jí)排序

SELECT class_id,class_name FROM classes 
WHERE (SELECT count(*) FROM student WHERE student.class_id = classes.class_id)>5 
ORDER BY class_id ASC;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市统锤,隨后出現(xiàn)的幾起案子毛俏,更是在濱河造成了極大的恐慌,老刑警劉巖饲窿,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煌寇,死亡現(xiàn)場離奇詭異,居然都是意外死亡逾雄,警方通過查閱死者的電腦和手機(jī)阀溶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門腻脏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人银锻,你說我怎么就攤上這事永品。” “怎么了击纬?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵鼎姐,是天一觀的道長。 經(jīng)常有香客問我更振,道長炕桨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任殃饿,我火速辦了婚禮谋作,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乎芳。我一直安慰自己,他們只是感情好帖池,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布奈惑。 她就那樣靜靜地躺著,像睡著了一般睡汹。 火紅的嫁衣襯著肌膚如雪肴甸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天囚巴,我揣著相機(jī)與錄音原在,去河邊找鬼。 笑死彤叉,一個(gè)胖子當(dāng)著我的面吹牛庶柿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秽浇,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼浮庐,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了柬焕?” 一聲冷哼從身側(cè)響起审残,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斑举,沒想到半個(gè)月后搅轿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡富玷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年璧坟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了既穆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沸柔,死狀恐怖循衰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情褐澎,我是刑警寧澤会钝,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站工三,受9級(jí)特大地震影響迁酸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜俭正,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一奸鬓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掸读,春花似錦串远、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肾请,卻和暖如春留搔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铛铁。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工隔显, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饵逐。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓括眠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梳毙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哺窄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容