【文章內(nèi)容簡(jiǎn)介】
9。,39。yyyymmdd39。) and pro_name=( select pro_name from new_product where pro_addr in (39。bj39。,39。sh39。)) 三、子查詢中的GROUP 函數(shù)的應(yīng)用 實(shí)例 1: SQL SELECT last_name, title, salary 2 FROM s_emp 3 WHERE salary 4 (SELECT AVG(salary) 5 FROM s_emp)。 實(shí)例2: 選擇出工資最高的員工的家庭住址: select emp_addr from employees where salary = (select max(salary) from employees)。 這是一個(gè)簡(jiǎn)單實(shí)用的例子,可以衍生出很多情況,在實(shí)際應(yīng)用經(jīng)常出現(xiàn),請(qǐng)大家多多思考。 實(shí)例3: SQL SELECT dept_id, AVG(salary) 2 FROM s_emp 3 GROUP BY dept_id 4 HAVING AVG(salary) 5 (SELECT AVG(salary) 6 FROM s_emp 7 WHERE dept_id = 32)。 子查詢被多次執(zhí)行,因?yàn)樗霈F(xiàn)在HAVING 子句中。 SQL SELECT title, AVG(salary) 2 FROM s_emp 3 GROUP BY title 4 HAVING AVG(salary) = 5 (SELECT MIN(AVG(salary)) 6 FROM s_emp 7 GROUP BY title)。 對(duì)子查詢,我們了解這么多在理論上已經(jīng)覆蓋了所有的知識(shí)點(diǎn),對(duì)于UPDATE 和DELETE的子查詢,不作為重點(diǎn),但也要練習(xí)掌握。今天到這,謝謝大家。 課程 六 運(yùn)行時(shí)應(yīng)用變量本課重點(diǎn): 創(chuàng)建一個(gè)SELECT語(yǔ)句,提示USER在運(yùn)行時(shí)先對(duì)變量賦值。 自動(dòng)定義一系列變量,在SELECT運(yùn)行時(shí)進(jìn)行提取。 在SQL PLUS中用ACCEPT定義變量 注意:以下實(shí)例中標(biāo)點(diǎn)均為英文半角 一、概述: 變量可以在運(yùn)行時(shí)應(yīng)用,變量可以出現(xiàn)在WHERE 字段,文本串,列名,表名等。 我們這里的運(yùn)行時(shí),指的是在SQL PLUS中運(yùn)行。 ACCEPT :讀取用戶輸入的值并賦值給變量 DEFINE:創(chuàng)建并賦值給一個(gè)變量 在做REPORT時(shí)經(jīng)常使用,比如對(duì)某個(gè)部門的銷售信息進(jìn)行統(tǒng)計(jì),部門名稱可以以變量代替。 SQL PLUS不支持對(duì)輸入數(shù)據(jù)的有效性檢查,因此提示要簡(jiǎn)單且不模棱兩可。 二、應(yīng)用實(shí)例: SQL SELECT id, last_name, salary 2 FROM s_emp 3 WHERE dept_id = amp。department_number。 可以在賦值前后進(jìn)行比較: SET VERIFY ON ..... 1* select * from emp where lastname=39。amp。last_name39。 輸入 last_name 的值: adopt 原值 1: select * from emp where lastname=39。amp。last_name39。 新值 1: select * from emp where lastname=39。adopt39。 如果在原語(yǔ)句中沒(méi)有單引號(hào),那么在輸入值的時(shí)候要手工加上單引號(hào)。一般字符和日期型要在語(yǔ)句中加上單引號(hào)。 SET VERIFY OFF 之后,原值和新值這兩句消失。這在ORACLE8I中是默認(rèn)為ON。 子句為變量:WHERE amp。condition。 要注意引號(hào) 三、DEFINE和ACCEPT的應(yīng)用: SET ECHO OFF //使內(nèi)容不 顯示在用戶界面 ACCEPT p_dname PROMPT ’Provide the department name: ’ SELECT , , ”REGION NAME” FROM s_dept d, s_region r WHERE = AND UPPER() LIKE UPPER(’%amp。p_dname%’) / SET ECHO ON 存為文件: SQL START l7prompt Provide the department name: sales SQL DEFINE dname = sales SQL DEFINE dname DEFINE dname = ”sales” (CHAR) SQL SELECT name 2 FROM s_dept 3 WHERE lower(name) = ’amp。dname’。 可以正常執(zhí)行了。 SQL DEFINE dname 主要是顯示當(dāng)前的變量是否賦值,值是什么。當(dāng)然,我們可以用UNDEFINEGO 來(lái)使變量恢復(fù)初始,不然它會(huì)一直保持下去。 如果變量在SQL SCRIPT文件中確定 :可以SQL START l7param President 來(lái)賦值。 總結(jié):本課主要針對(duì)較古老的SQLPLUS方法,在REPORT和結(jié)果集生成方面使用變量,達(dá)到方便操作,動(dòng)態(tài)修改的目的。 課程 七 其他數(shù)據(jù)庫(kù)對(duì)象 SEQUENCE 創(chuàng)建實(shí)例: SQL CREATE SEQUENCE s_dept_id2 INCREMENT BY 13 START WITH 514 MAXVALUE 99999995 NOCACHE6 NOCYCLE。Sequence created. NEXTVAL和CURRVAL的用法 只有在INSERT 中,才可以作為子查詢出現(xiàn)?! ∫韵聨讉€(gè)方面不可用子查詢: SELECT 子句OF A VIEW 有DISTINCT的出現(xiàn)的SELECT。 有GROUP BY,HAVING,ORDER BY的SELECT 子句?! ELECT 或DELETE,UPDATE 中的子查詢。 DEFAULT選項(xiàng)中不能用?! 【庉婼EQUENCE 只有OWNER或有ALTER權(quán)限的用戶才能修改SEQUENCE 未來(lái)的NUMBER受修改的影響。 不能修改START WITH,如果變,則要RE-CREATE?! ⌒薷臅?huì)受到某些有效性檢驗(yàn)的限制,如MAXVALUE 刪除: DROP SEQUENCE sequence?! RACLE對(duì)象之INDEX 一、INDEX概述: 是ORACLE的一種數(shù)據(jù)對(duì)象,用POINTER來(lái)加速查詢行。通過(guò)快速路徑存取方法定位數(shù)據(jù)并減少I/O?!NDEX獨(dú)立于表。INDEX由ORACLE SERVER來(lái)使用和保持?! 《⑺饕绾谓?? 自動(dòng):通過(guò)PRIMARY KEY和UNIQUE KEY約束來(lái)建立。 用戶手工建立非唯一性索引。 三、創(chuàng)建方法: 語(yǔ)法:CREATE INDEX indexON table (column[, column]...)。 何時(shí)建立INDEX: 此列經(jīng)常被放到WHERE字段或JOIN來(lái)作條件查詢。 此列含有大量的數(shù)據(jù)。 此列含有大量的空值。 兩個(gè)或幾個(gè)列經(jīng)常同時(shí)放到WHERE字段進(jìn)行組合查詢 表很大而且只有少于24% 的ROW可能被查詢的時(shí)候。 以下情況不要建立索引: 表很小; 表被更新頻繁。 四、查看已經(jīng)存在的索引: USER_INDEXES可以查詢索引名和類型。 USER_IND_COLUMNS包含索引名、表名、列名。 實(shí)例: SQL SELECT , ,2 col_pos, 3 FROM user_indexes ix, user_ind_columns ic4 WHERE = 5 AND = ’S_EMP’。 五、刪除索引: DROP INDEX index。 SYNONYMS 同義詞 語(yǔ)法: CREATE [PUBLIC] SYNONYM synonym for object。 注意:此對(duì)象不能包含在一個(gè)包里; 一個(gè)私有的同義詞不能與同一USER的其他對(duì)象重名。 DROP SYNONYM D_SUM; 課程 八 用戶訪問(wèn)控制 本課重點(diǎn): 創(chuàng)建用戶 創(chuàng)建角色來(lái)進(jìn)行安全設(shè)置 使用GRANT或REVOKE 來(lái)控制權(quán)限 注意:以下實(shí)例中標(biāo)點(diǎn)均為英文半角 一、概述: ORACLE通過(guò)用戶名和密碼進(jìn)行權(quán)限控制。 數(shù)據(jù)庫(kù)安全:系統(tǒng)安全和數(shù)據(jù)安全 系統(tǒng)權(quán)限:使用戶可以訪問(wèn)數(shù)據(jù)庫(kù) 對(duì)象權(quán)限:操縱數(shù)據(jù)庫(kù)中的對(duì)象 SCHEMA:各種對(duì)象的集合 二、系統(tǒng)權(quán)限: 超過(guò)80個(gè)權(quán)限可用。 DBA有最高的系統(tǒng)權(quán)限: CREATE NEW USER REMOVE USERS REMOVE ANY TABLE BACKUP ANY TABLE 三、創(chuàng)建用戶 CREATE USER user IDENTIFIED BY password。 系統(tǒng)權(quán)限:CREATE SESSION Connect to the database. CREATE TABLE Create tables in the user’s schema. CREATE SEQUENCE Create a sequence in the user’s schema. CREATE VIEW Create a view in the user’s schema. CREATE PROCEDURE Create a stored procedure, function, or package in the user’s schema. 授權(quán)用戶系統(tǒng)權(quán)限: GRANT privilege [, privilege...] TO user [, user...]。 GRANT CREATE TABLE TO SCOTT; 四、角色的使用 概念:角色是一組權(quán)限的命名,可以授予給用戶。這樣就如同給了某個(gè)用戶一個(gè)權(quán)限包。 創(chuàng)建、授予給角色: CREATE ROLE MANAGER; GRANT CREATE TABLE,CREATE VIEW TO MANAGER; GRANT MANAGER TO CLARK 五、修改密碼: ALTER USER user IDENTIFIED BY password。 六、對(duì)象權(quán)限: 語(yǔ)句: GRANT {object_priv(, object_priv...)|ALL}[(columns)]ON objectTO {user[, user...]|role|PUBLIC}[WITH GRANT O