一 ORACLE的表的分類 REGULAR TABLE 普通表 ORACLE推薦的表 使用很方便 人為控制少 PARTITIONED TABLE 分區(qū)表 人為控制記錄的分布 將表的存儲(chǔ)空間分為若干獨(dú)立的分區(qū) 記錄按一定的規(guī)則存儲(chǔ)在分區(qū)里 適用于大型的表 二 建表 CREATE TABLE 表名 (EMPNO NUMBER( ) NAME VARCHAR ( )) PCTFREE PCTUSED STORAGE (INITIAL K NEXT K MAXEXTENTS PCTINCREASE ) TABLESPACE 表空間名稱 [LOGGING|NOLOGGING]所有的對表的操作都要記入REDOLOG ORACLE建議使用NOLOGGING [CACHE|NOCACHE] 是否將數(shù)據(jù)按照一定的算法寫入內(nèi)存 關(guān)于PCTFREE 和PCTUSED A 行遷移和行鏈接 B PCTFREE 制止INSERT 為 UPDATE留FREE 空間 C PCTUSED 為恢復(fù)INSERT操作 而設(shè)定的 三 拷貝一個(gè)已經(jīng)存在的表 CREATE TABLE 新表名 STORAGE( ) TABLESPACE 表空間 AS SELECT * FROM 老表名 當(dāng)老表存在約束 觸發(fā)的時(shí)候 不會(huì)拷過去 四 修改表的參數(shù) ALTER TABLE 名稱 PCTFREE PCTUSED STOAGE(MAXEXTENTS ) 五 手工分配空間 ALTER TABLE 名稱 ALLOCATE EXTENT(SIZE K DATAFILE ) SIZE選項(xiàng) 按照NEXT分配 表所在表空間與所分配的數(shù)據(jù)文件所在的表空間必須一樣 六 水線 水線定義了表的數(shù)據(jù)在一個(gè)BLOCK中所達(dá)到的最高的位置 當(dāng)有新的記錄插入 水線增高 當(dāng)刪除記錄時(shí) 水線不回落 減少查詢量 七 如何回收空間 ALTER TABLE 名稱 DEALLOCATE UNUSED [KEEP [M|K]] 當(dāng)空間分配過大時(shí) 可以使用本命令 如果沒有加KEEP 回收到水線 如果水線《MINEXTENTS的大小回收到MINEXTENTS所指定的大小 八 TRUNCATE 一個(gè)表 TRUNCATE TABLE 表名 表空間截取MINEXTENT 同時(shí)水線重置 九 DROP 一個(gè)表 DROP TABLE 表名 [CASCADE CONSTRAINTS] 當(dāng)一個(gè)表含有外鍵的時(shí)候 是不可以直接DROP的 加CASCADE CONSRIANTS將外鍵等約束一并刪掉 十 信息獲取 dba_object dba_tables:建表的參數(shù) DBA_SEGMENTS: 組合查詢的連接字段 DBA_TABLES的table_name+dba_ojbect的object_name+dba_segments的SEGMENT_NAME 第十一章 索引的管理 一 索引的分類 邏輯上 單列索引 復(fù)合索引 唯一索引 非唯一索引 物理上 B TREE OR BITMAP B TREE (NORMAL和反向索引) 二 CREATE INDEX CREATE INDEX 名稱 ON 表名(列名) PCTFREE STORAGE( ) TABLESPACE 名稱 沒有定義PCTUSED 索引是按照一定存儲(chǔ)的 如果通過PCTUSED允許恢復(fù)對BLOCK的INSERT操作 可能影響INDEX的效率 三 建立索引的注意事項(xiàng) 索引對查詢性能有提高 但對DML語句有影響 索引也應(yīng)該放在一個(gè)專用的表空間 定義索引的EXTENT的大小時(shí) = *DB BLOCK 建立索引時(shí) 應(yīng)采用 NOLOGGING 方式 四 修改索引 ALTER INDEX 名稱 STORAGE(新值) 五 分配空間給索引 ALTER INDEX 名稱 ALLOCATE EXTENT(SIZE K DATAFILE ) 六 重建索引 提高查詢性能 當(dāng)一個(gè)索引重建時(shí) 老的索引會(huì)在新索引建立完成后 被刪除 新索引建立過程中 老的索引仍可用于查詢 硬盤的開銷大 七 DROP一個(gè)索引 DROP INDEX 名稱 八 信息獲取 DBA_INDEXES:建索引的參數(shù) DBA_IND_COLUMNS: 第十二章 用戶的管理 一 ORACLE的安全域 TABLESPACE QUOTAS 表空間的使用定額 DEFAULT TABLESPACE 默認(rèn)表空間 TEMPORARY TABLESPACE 指定臨時(shí)表空間 ACCOUNT LOCKING 用戶鎖 RESOURCE LIMITE 資源限制 DIRECT PRIVILEGES 直接授權(quán) ROLE PRIVILEGES 角色授權(quán)先將應(yīng)用中的用戶劃為不同的角色 二 創(chuàng)建用戶時(shí)的清單 選擇一個(gè)用戶名稱和檢驗(yàn)機(jī)制 A 看到用戶名 實(shí)際操作者是誰 業(yè)務(wù)中角色 選擇合適的表空間 決定定額 口令的選擇 臨時(shí)表空間的選擇 先建立一個(gè)臨時(shí)表空間 然后在分配 不分配 使用SYSTEM表空間 CREATE USER 授權(quán) A 用戶的工作職能 B 用戶的級別 三 用戶的創(chuàng)建 命令 CREATE USER 名稱 IDENTIFIED BY 口令 DEFAULT TABLESPACE 默認(rèn)表空間名 TEMPOARAY TABLESPACE 臨時(shí)表空間名 QUOTA M ON 表空間名 [PASSWORD EXPIRE] 當(dāng)用戶第一次登陸到ORACLE 創(chuàng)建時(shí)所指定的口令過期失效 強(qiáng)迫用戶自己定義一個(gè)新口令 [ACCOUNT LOCK] 加用戶鎖 QUOTA UNLIMITED ON TABLESPACE 不限制 有多少有多少 [PROFILE 名稱] 受PROFILE文件的限制 四 如何控制用戶口令和用戶鎖 強(qiáng)迫用戶修改口令 ALTER USER 名稱 IDENTIFIED BY 新口令 PASSWORD EXPIRE 給用戶加鎖 ALTER USER 名稱 ACCOUNT [LOCK|UNLOCK] 注意事項(xiàng) A 所有操作對當(dāng)前連接無效 B 的操作適用于當(dāng)用戶忘記口令時(shí) 五 更改定額 命令 ALTER USER 名稱 QUOTA ON 表空間名 ALTER USER 名字 QUOTA (數(shù)值)K|M|UNLIMITED ON 表空間名 使用方法 A 控制用戶數(shù)據(jù)增長 B 當(dāng)用戶擁有一定的數(shù)據(jù) 而管理員不想讓他在增加新的數(shù)據(jù)的時(shí)候 C 當(dāng)將用戶定額設(shè)為零的時(shí)候 用戶不能創(chuàng)建新的數(shù)據(jù) 但原有數(shù)據(jù)仍可訪問 六 DROP一個(gè)USER DROP USER 名稱 適合于刪除一個(gè)新的用戶 DROP USER 名稱 CASCADE 刪除一個(gè)用戶 將用戶的表 索引等都刪除 對連接中的用戶不好用 七 信息獲取 DBA_USERS:用戶名 狀態(tài) 加鎖日期 默認(rèn)表空間 臨時(shí)表空間 DBA_TS_QUOTAS:用戶名 表空間名 定額 兩個(gè)表的連接字段 USERNAME GRANT CREATE SESSION TO 用戶名 第十三章 PROFILE的管理(資源 文件) 一 PROFILE的管理內(nèi)容 CPU的時(shí)間 I/O的使用 IDLE TIME(空閑時(shí)間) CONNECT TIME(連接時(shí)間) 并發(fā)會(huì)話數(shù)量 口令機(jī)制 二 DEFAULT PROFILE 所有的用戶創(chuàng)建時(shí)都會(huì)被指定這個(gè)PROFILE DEFAULT PROFILE的內(nèi)容為空 無限制 三 PROFILE的劃分 CALL級LIMITE 對象是語句 當(dāng)該語句資源使用溢出時(shí) A 該語句終止 B 事物回退 C SESSION連接保持 SESSION級LIMITE 對象是 整個(gè)會(huì)話過程 溢出時(shí) 連接終止 四 如何管理一個(gè)PROFILE CREATE PROFILE 分配給一個(gè)用戶 象開關(guān)一樣打開限制 五 如何創(chuàng)建一個(gè)PROFILE 命令 CREATE PROFILE 名稱 LIMIT SESSION_PER_USER CPU_PER_SESSION IDLE_TIME CONNECT_TIME 六 限制參數(shù) SESSION級LIMITE CPU_PER_SESSION:定義了每個(gè)SESSION占用的CPU的時(shí)間 ( / 秒) SESSION_PER_USER:每個(gè)用戶的并發(fā)連接數(shù) CONNECT_TIME:一個(gè)連接的最長連接時(shí)間(分鐘) LOGICAL_READS_PER_SESSION: 一次讀寫的邏輯塊的數(shù)量 CALL級LIMITE CPU_PER_CALL:每個(gè)語句占用的CPU時(shí)間 LOGICAL_READS_PER_CALL: 七 分配給一個(gè)用戶 CREATE USER 名稱 PROFILE 名稱 ALTER USER 名稱 PROFILE 名稱 八 打開資源限制 RESOURCE_LIMT:資源文件中含有 ALTER SYSTEM SET RESOURCE_LIMIT=TRUE 默認(rèn)不打開 九 修改PROFIE的內(nèi)容 ALTER PROFILE 名稱參數(shù) 新值 對于當(dāng)前連接修改不生效 十 DROP一個(gè)PROFILE DROP PROFILE 名稱 刪除一個(gè)新的尚未分配給用戶的PROFILE DROP PROFILE 名稱 CASCADE 注意事項(xiàng) A 一旦PROFILE被刪除 用戶被自動(dòng)加載DEFAULT PROFILE B 對于當(dāng)前連接無影響 C DEFAULT PROFILE不可以被刪除 十一 信息獲取 DBA_USERS: 用戶名 PROFILE DBA_PROFILES: lishixinzhi/Article/program/Oracle/201311/18833
為管城等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及管城網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站制作、做網(wǎng)站、管城網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
oracle入門知識(shí)
一個(gè)表空間只能屬于一個(gè)數(shù)據(jù)庫每個(gè)數(shù)據(jù)庫最少有一個(gè)控制文件(建議 個(gè) 分別放在不同的磁盤上)
每個(gè)數(shù)據(jù)庫最少有一個(gè)表空間(SYSTEM表空間)
建立SYSTEM表空間的目的是盡量將目的相同的表存放在一起 以提高使用效率 只應(yīng)存放數(shù)據(jù)字典
每個(gè)數(shù)據(jù)庫最少有兩個(gè)聯(lián)機(jī)日志組 每組最少一個(gè)聯(lián)機(jī)日志文件
一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間一個(gè)數(shù)據(jù)文件一旦被加入到一個(gè)表空間中 就不能再從這個(gè)表空間中移走 也不能再加入到其他表空間中
建立新的表空間需要建立新的數(shù)據(jù)文件
MIT后 數(shù)據(jù)不一定立即寫盤(數(shù)據(jù)文件)
一個(gè)事務(wù)即使不被提交 也會(huì)被寫入到重做日志中
oracle server可以同時(shí)啟動(dòng)多個(gè)數(shù)據(jù)庫
一套操作系統(tǒng)上可以安裝多個(gè)版本的ORACLE數(shù)據(jù)庫系統(tǒng)(UNIX可以 NT不可以)
lishixinzhi/Article/program/Oracle/201311/16610
Oracle主要數(shù)據(jù)類型
概述 各種數(shù)據(jù)庫所支持的數(shù)據(jù)類型大同小異 與標(biāo)準(zhǔn)SQL語言中的數(shù)據(jù)類型可能略有出入
類型 varchar 可以在聲明字段時(shí)設(shè)置它的長度上限 而且使用它之后 就不必再考慮空格的存在
若插入的字符串的長度低于長度上限 系統(tǒng)就會(huì)自動(dòng)將其縮減為字符串的真實(shí)長度
number(m n) 既可以用來表示整型 也可以表示浮點(diǎn)型 但m不可以超過 如果n為 或者省略n 就代表它是整數(shù)
date 用來存放日期和時(shí)間
blob 通常是在應(yīng)用程序中使用到它 而不是在數(shù)據(jù)庫中利用SQL指令直接使用
比如通過JDBC技術(shù)訪問數(shù)據(jù)庫 讀寫blob或clob類型的字段 即讀寫長的字符串信息等等
char 它是一種定長的字符類型 在Oracle數(shù)據(jù)庫不區(qū)分字符和字符串 它們被統(tǒng)稱為字符型或文本型
所謂定長的字符型是指 插入的字符串若沒有達(dá)到約定的字段長度 系統(tǒng)就會(huì)在字符串尾部自動(dòng)補(bǔ)空格
同樣 讀取時(shí)的字段長度永遠(yuǎn)是聲明時(shí)的字段長度 而且在比較字符串內(nèi)容的時(shí)候 也需要考慮到空格的過濾
nchar 它也是定長的字符串類型 它是SQL語言標(biāo)準(zhǔn)中規(guī)定的 通常采用Unicode編碼來保存不同國家或不同語言的字符
varchar SQL標(biāo)準(zhǔn)在定義varchar時(shí)并沒有保證能夠向前和向后兼容 即有可能隨著語言標(biāo)準(zhǔn)的修改而產(chǎn)生不兼容的問題
所以O(shè)racle定義了同varchar型類似的varchar 型 就是為了在Oracle以后的版本中 都永遠(yuǎn)支持varchar 類型
Oracle這么做就是為了確保此類型向前后兼容 以達(dá)到能夠在Oracle系列數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)的導(dǎo)入和導(dǎo)出的目的
long 它和varchar 的差別在于 它不支持對字符串內(nèi)容進(jìn)行檢索 即查詢時(shí)不可以對它的內(nèi)容進(jìn)行條件查詢
而varchar 和char nchar型等等都可以在查詢的時(shí)候直接檢索字符串的內(nèi)容
補(bǔ)充 select * from v$nls_parameters;數(shù)據(jù)庫的配置信息以數(shù)據(jù)表的形式存在 通常稱其為關(guān)于數(shù)據(jù)的數(shù)據(jù)或數(shù)據(jù)字典
實(shí)際上它查詢的是數(shù)據(jù)字典中的一個(gè)視圖 其中NLS_CHARACTERSET對應(yīng)的是當(dāng)前的數(shù)據(jù)庫字符集
缺省均為使用數(shù)據(jù)庫字符集 教程中使用的是安裝時(shí)默認(rèn)的ZHS GBK字符集 即漢字占 個(gè)字節(jié) 英文占 個(gè)字節(jié)
而NLS_NCHAR_CHARACTERSET對應(yīng)的是nchar或nvarchar 類型所采用的輔助字符集 即AL UTF 字符集
實(shí)際上AL UTF 是一種 位定長的Unicode編碼的字符集 而數(shù)據(jù)庫字符集以及這種國家字符集都可以修改
但數(shù)據(jù)庫字符集修改后可能會(huì)面臨很嚴(yán)重的后果 除非是數(shù)據(jù)庫管理員 普通用戶不必對這方面進(jìn)行深究
數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入導(dǎo)出的時(shí)候 如果源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫所采用的字符集不同 也很容易出問題
函數(shù)
概述 函數(shù)可以認(rèn)為是能夠完成相對獨(dú)立的功能的一段代碼的集合 Oracle函數(shù)相當(dāng)于其它語言中的方法或過程
Oracle函數(shù)可以分為單行函數(shù)和多行函數(shù)兩大類 Oracle函數(shù)都是有返回值的
所謂的單行函數(shù)是針對查詢結(jié)果中的每一行都起作用 都會(huì)返回一個(gè)結(jié)果
多行函數(shù)也就是所謂分組函數(shù) 是針對一組查詢的記錄 或者說多行 返回一個(gè)結(jié)果
單行 操作數(shù)據(jù)項(xiàng) 接受參數(shù)并返回處理結(jié)果 對每一返回行均起作用 可修改數(shù)據(jù)類型 可嵌套使用
單行函數(shù)分為字符函數(shù) 數(shù)值函數(shù) 日期函數(shù) 轉(zhuǎn)換函數(shù) 通用函數(shù)
多行 也稱分組函數(shù) 即對一組數(shù)據(jù)進(jìn)行運(yùn)算 針對一組數(shù)據(jù)(多行記錄)只能返回一個(gè)結(jié)果
多行函數(shù)包括avg() count() max() min() sum()等
比如select avg(sal) max(sal) min(sal) sum(sal) max(hiredate) min(hiredate) from emp;
續(xù)一 使用Oracle的系統(tǒng)函數(shù)中的單行函數(shù)可實(shí)現(xiàn)諸多功能 如對數(shù)據(jù)進(jìn)行計(jì)算 控制數(shù)據(jù)的輸出格式
設(shè)置和改變?nèi)掌诘娘@示格式 進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換 使用NVL等函數(shù)處理空值 實(shí)現(xiàn)IF THEN ELSE多路分支邏輯等等
續(xù)二 轉(zhuǎn)換函數(shù)不會(huì)改變表中數(shù)據(jù)的字段類型和值 它就相當(dāng)于將數(shù)據(jù)復(fù)制了一份 所轉(zhuǎn)換的是復(fù)制之后的數(shù)據(jù)
數(shù)據(jù)類型轉(zhuǎn)換包括隱含轉(zhuǎn)換和顯式轉(zhuǎn)換兩種方式 建議使用顯式的數(shù)據(jù)類型轉(zhuǎn)換 確保SQL語句的可靠性
續(xù)三 通用函數(shù)適用于包括空值在內(nèi)的任何類型數(shù)據(jù) 通常用來實(shí)現(xiàn)空值的處理 空值的過濾或設(shè)置缺省值等
通用函數(shù)包括nvl() nvl () nullif() coalesce() case表達(dá)式 decode()等
嵌套 單行函數(shù)可以嵌套使用 嵌套層次無限制 分組函數(shù)最多可嵌套兩層 嵌套函數(shù)的執(zhí)行順序是由內(nèi)到外
單行比如select empno lpad(initcap(trim(ename)) ) 姓名 job sal from emp;
多行比如select max(avg(sal)) from emp group by deptno; 其實(shí)這里再使用分組函數(shù)就沒有意義了
說明 通常數(shù)據(jù)庫層面提供的函數(shù) 只是進(jìn)行數(shù)據(jù)的簡單的處理 或者說是只能實(shí)現(xiàn)極為常規(guī)的功能
所以就不應(yīng)該 或者說是不要指望在數(shù)據(jù)庫查詢的層面來實(shí)現(xiàn)特別復(fù)雜的業(yè)務(wù)邏輯
如果應(yīng)用程序的邏輯跟數(shù)據(jù)庫混在一起的話 會(huì)不利于代碼的維護(hù)和更新
而且也不利于數(shù)據(jù)庫的管理 包括數(shù)據(jù)移植 數(shù)據(jù)庫導(dǎo)入導(dǎo)出等等
日期類型
概述 在計(jì)算機(jī)操作系統(tǒng)或者各種高級編程語言中 日期通常會(huì)被保存成一個(gè)長整數(shù) 通常記錄的是毫秒
Oracle內(nèi)部以數(shù)字格式存儲(chǔ)日期和時(shí)間信息 世紀(jì) 年 月 日 小時(shí) 分鐘 秒
缺省的日期格式是DD—MON—YY 可使用sysdata函數(shù)獲取當(dāng)前系統(tǒng)日期和時(shí)間
運(yùn)算 日期型數(shù)據(jù)可以直接加或減一個(gè)數(shù)值 結(jié)果認(rèn)為日期 約定的該數(shù)值代表的是相加減的天數(shù)
兩個(gè)日期型數(shù)據(jù)可以相減 結(jié)果為二者相差多少天 二者不能 因?yàn)槿掌谙嗉邮菦]有意義的
NVL()函數(shù)
概述 它用于將空值null替換為指定的缺省值 適用于字符 數(shù)字 日期等類型數(shù)據(jù)
格式 NVL(exp exp ) 如果表達(dá)式exp 值為null 則返回exp 值 否則返回exp 值
舉例 select empno ename sal m sal+nvl(m ) from emp;
select empno ename job nvl(job No job yet ) from emp;
NVL ()函數(shù)
概述 它用于實(shí)現(xiàn)條件表達(dá)式功能
格式 NVL (exp exp exp ) 如果表達(dá)式exp 值不為null 則返回exp 值 否則返回exp 值
舉例 select empno ename sal m nvl (m sal+m sal) 總收入 from emp;
NULLIF()函數(shù)
概述 它用于數(shù)據(jù)等價(jià)性比較并根據(jù)比較結(jié)果返回null或其中一個(gè)被比較的數(shù)值 實(shí)際開發(fā)中應(yīng)用并不是很多
格式 nullif(exp exp ) 如果表達(dá)式exp 與exp 的值相等 則返回null 否則返回exp 的值
舉例 select name 原名 nullif(pen_name name) 化名 from author;
COALESCE()函數(shù)
概述 它用于實(shí)現(xiàn)數(shù)據(jù)“接合”功能
格式 coalesec(exp exp ) 依次考察各參數(shù)表達(dá)式 遇到非null值即停止并返回該值
若表達(dá)式均為null值 則返回null 通常最后一個(gè)表達(dá)式都是能確保不是空值的字段
舉例 select empno ename sal m coalesec(sal+m sal ) 總收入 from emp;
CASE表達(dá)式
概述 它用于實(shí)現(xiàn)多路分支結(jié)構(gòu)
格式 case exp when parison_exp then return_exp
[when parison_exp then return_exp
when parison_expn then return_expn
else else_exp]
end
舉例 select empno ename sal
case deptno when then 財(cái)務(wù)部
when then 研發(fā)部
when then 銷售部
else 未知部門
end 部門
from emp;
說明 CASE中的每一個(gè)表達(dá)式(如deptno 財(cái)務(wù)部等)都可以是復(fù)合而成的
這種對齊方式的書寫是為了增加可讀性 當(dāng)然也可以把代碼寫在同一行上
其中case到end之間的整體就相當(dāng)于普通查詢中的一個(gè)字段 end后面的“部門”是別名
DEDODE()函數(shù)
概述 和case表達(dá)式類似 它也用于實(shí)現(xiàn)多路分支結(jié)構(gòu)
格式 decode(col|expression search result
[ search result ]
[ default])
舉例 select empno ename sal
decode(deptno 財(cái)務(wù)部
研發(fā)部
銷售部
未知部門 )
部門
from emp;
COUNT()函數(shù)
格式 count(*)返回組中總記錄數(shù)目
count(exp)返回表達(dá)式exp值非空的記錄
count(distinct(exp))返回表達(dá)式exp值不重復(fù)的 非空的記錄數(shù)目
舉例 select count(*) from emp; 缺省的情況下 整個(gè)表就是一組
select count(m) from emp; 返回emp表中m字段不為空的記錄(行)數(shù)目
select count(distinct(deptno)) from emp; 查找deptno值為非空且不重復(fù)的記錄數(shù)目
分組函數(shù)與空值
概述 分組函數(shù)省略列中的空值 可使用NVL()函數(shù)強(qiáng)制分組函數(shù)處理空值
舉例 select avg(m) from emp; 等價(jià)于sum(m)/count(m)
select sum(m) from emp; 計(jì)算表中非空的m值的總和
select avg(nvl(m )) from emp; 等價(jià)于avg(nvl(m ))/count(*)
GROUP BY子句
概述 它用于將表中數(shù)據(jù)分成若干小組
格式 select column group_function(column)
from table
[where condition]
[group by group_by_expression]
[order by column];
舉例 select deptno avg(sal) from emp group by deptno;
說明 出現(xiàn)在SELECT列表中的字段 如果不是包含在組函數(shù)中 那么該字段必須同時(shí)在GROUP BY子句中出現(xiàn)
包含在GROPY BY子句中的字段則不必須出現(xiàn)在SELECT列表中 子句執(zhí)行順序是where→group by→order by缺省按升序排列
補(bǔ)充 select deptno job avg(sal) from emp group by deptno job order by deptno desc; 基于多個(gè)字段的分組
select deptno avg(sal) from emp; 非法
注意 如果沒有GROUP BY子句 SELECT列表中不允許出現(xiàn)字段(單行函數(shù))與分組函數(shù)混用的情況
WHERE中不允許使用分組函數(shù) 如select deptno avg(sal) from emp where avg(sal) group by deptno; 非法
這跟子句執(zhí)行的順序有關(guān) where子句最先執(zhí)行 在執(zhí)行where子句的時(shí)候還沒有執(zhí)行過group by子句
于是程序不知道這是在分組 也不曾計(jì)算過avg(sal)的組內(nèi)平均工資 所以在where子句中不允許使用分組函數(shù)
由于還沒有執(zhí)行過group by子句 所以此時(shí)就不確定如何怎么分組以及分多少個(gè)組
所以where子句中只能進(jìn)行初級過濾 此時(shí)可以使用HAVING子句實(shí)現(xiàn)對平均工資的過濾
HAVING子句
概述 它用于過濾分組
格式 select column group_function(column)
from table
[where condition]
[group by group_by_expression]
[having group_condition]
[order by column];
舉例 select deptno job avg(sal)
from emp
where hiredate = to_date( yyyy mm dd )
group by by deptno job
having avg(sal)
lishixinzhi/Article/program/Oracle/201311/19087
其實(shí)Oracle并不復(fù)雜,要有信心學(xué)好。
第一個(gè)階段:掌握Oracle的安裝、NET配置、熟練運(yùn)用Oralce的相關(guān)操作。
第二個(gè)階段:表、視圖、觸發(fā)器、序列的創(chuàng)建。注意Oracle的表是對應(yīng)用戶的。另外Oracle一個(gè)服務(wù)就相當(dāng)與一個(gè)數(shù)據(jù)庫。SQLServer是一個(gè)服務(wù),可以建多個(gè)庫。
第三個(gè)階段:學(xué)習(xí)Oracle的異常處理,性能優(yōu)化、各種備份機(jī)制。
最后給你ACE高手的網(wǎng)站
1、SQL是必知的,無論那個(gè)方向,入門只需要一份簡單的文檔就可以,網(wǎng)上很多。
2、確定方向:
數(shù)據(jù)庫維護(hù)管理方向:國內(nèi)已經(jīng)出了幾本書,找一本,翻爛它,也可以入門
數(shù)據(jù)分析開發(fā)方向:主要是高級的SQL技巧
數(shù)據(jù)處理開發(fā)方向:存儲(chǔ)過程、函數(shù)、包等
3、多看視頻,播布客、驢子上都有一些。這個(gè)用來做知識(shí)拓展深化
4、沒有項(xiàng)目實(shí)踐可以考慮參加機(jī)構(gòu)的培訓(xùn)(雖然可以侃侃價(jià),但成本還是不低的)
oracle是塊結(jié)構(gòu)語言,oracle程序劃分成幾個(gè)部分,并在每個(gè)部分中寫入邏輯代碼塊,每個(gè)塊由三個(gè)子部分組成。
聲明部分:此部分是以關(guān)鍵字DECLARE開頭。這是一個(gè)可選部分,并定義了程序中要使用的所有變量,游標(biāo),子程序和其他元素。
可執(zhí)行命令部分:此部分包含在關(guān)鍵字BEGIN和END之間,這是一個(gè)強(qiáng)制性部分。由程序的可執(zhí)行oracle語句組成。應(yīng)該有至少一個(gè)可執(zhí)行代碼行,可以只是一個(gè)NULL命令,表示不執(zhí)行任何操作。
異常處理部分 :此部分以關(guān)鍵字EXCEPTION開頭。這是一個(gè)可選部分,包含處理程序中錯(cuò)誤的異常。
每個(gè)oracle語句以分號(hào)(;)結(jié)尾。使用BEGIN和END可以將oracle塊嵌套在其他oracle塊中。以下是Poracle塊的基本結(jié)構(gòu)。
Hello World示例:
END;行表示oracle塊的結(jié)尾。要從oracle命令行運(yùn)行代碼,需要在代碼的最后一行之后鍵入/字符。當(dāng)上述代碼在oracle提示符下執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果:
oracle標(biāo)識(shí)符:oracle標(biāo)識(shí)符是常量,變量,異常,過程,游標(biāo)和保留字。標(biāo)識(shí)符包括一個(gè)字母,可選地后跟多個(gè)字母,數(shù)字,美元符號(hào),下劃線和數(shù)字符號(hào),不得超過30個(gè)字符。
默認(rèn)情況下,標(biāo)識(shí)符不區(qū)分大小寫。例如,可以使用integer或INTEGER來表示一個(gè)數(shù)值。 不能使用保留關(guān)鍵字作為標(biāo)識(shí)符。
擴(kuò)展資料
oracle注釋程序:注釋可以在編寫的oracle代碼中包含的說明性文字,并幫助其他人閱讀源代碼。所有編程語言都允許某種形式的注釋。
oracle支持單行和多行注釋。注釋中的所有字符都被oracle編譯器忽略。oracle單行注釋以分隔符開頭 --(雙連字符),多行注釋由/*和*/括起來。
當(dāng)上述代碼在oracle提示符下執(zhí)行時(shí),會(huì)產(chǎn)生以下結(jié)果:
oracle變量的名稱由可選的字母,數(shù)字,美元($)符號(hào),下劃線和數(shù)字符號(hào)組成,不能超過30個(gè)字符。 默認(rèn)情況下,變量名不區(qū)分大小寫。不能將保留的oracle關(guān)鍵字用作變量名稱。
oracle編程語言允許定義各種類型的變量,如:日期時(shí)間數(shù)據(jù)類型,記錄,集合等,我們將在后面的章節(jié)中介紹。 在本章中僅學(xué)習(xí)基本的變量類型。