1.Oracle數據庫的介紹html
ORACLE 數據庫系統是美國ORACLE 公司(甲骨文)提供的以分佈式數據庫爲核心的一組軟件產品,是目前最流行的客戶/服務器(CLIENT/SERVER)或 B/S 體系結構的數據庫之一。好比SilverStream 就是基於數據庫的一種中間件。ORACLE 數據庫是目前世界上使用最爲普遍的數據庫管理系統,做爲一個通用的數據庫系統,它具備完整的數據管理功能;做爲一個關係數據庫, 它是一個完備關係的產品;做爲分佈式數據庫它實現了分佈式處理功能。但它的全部知識,只 要在一種機型上學習了 ORACLE 知識,便能在各類類型的機器上使用它。sql
2.Oracle數據庫的體系結構數據庫
<1>數據庫(Database)
Oracle 數據庫是數據的物理存儲。這就包括(數據文件ORA 或者 DBF、控制文件、聯機日誌、參數文件)。其實Oracle 數據庫的概念和其它數據庫不同,這裏的數據庫是一個操做系統只有一個庫。能夠看做是Oracle 就只有一個大數據庫。
<2>實例(Instance)
一個 Oracle 實例(Oracle Instance)有一系列的後臺進程(Backguound Processes)和內存結構(Memory Structures)組成。一個數據庫能夠有 n 個實例。
<3>用戶
用戶是在實例下創建的。不一樣實例能夠建相同名字的用戶。
<4>表空間
表空間是 Oracle 對物理數據庫上相關數據文件(ORA 或者 DBF 文件)的邏輯映射。一個數據庫在邏輯上被劃分紅一到若干個表空間,每一個表空間包含了在邏輯上相關聯的一組結構。每 個數據庫至少有一個表空間(稱之爲system 表空間)。服務器
3.建立表空間建立用戶以及用戶受權分佈式
能夠利用navicat實現,具體操做步驟見:https://www.cnblogs.com/luckyplj/p/11365245.html函數
4.Oracle的數據類型學習
5.Oracle自帶的Scott用戶大數據
默認密碼:tigerspa
注意:默認狀況下,scott用戶是鎖着的,須要利用SYSTEM這個超級管理員用戶進行解鎖。操作系統
進入以下界面:
6.Oracle的單行函數
(1)字符函數
<1>把小寫的字符轉換成大寫的字符
SELECT UPPER('yes') FROM dual;
<2>把大寫字符變成小寫字符
SELECT LOWER('LUCKY') FROM dual;
(2)數值函數
<1>四捨五入函數:ROUND()
SELECT ROUND(56.12) FROM dual;
<2>直接截取,不看小數部分
SELECT TRUNC(56.12) FROM dual;
(3)日期函數
<1>查詢scott用戶下的數據庫emp表中全部員工的入職距離如今幾天
SELECT SYSDATE-e.HIREDATE FROM EMP e;
注意:EMP e是給EMP表取了一個別名。
<2>將日期類型轉換爲yyyy-mm-dd hh:mm:ss的格式的字符串
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MM:SS') FROM dual;
(4)通用函數
案例:算出emp表中全部員工的年薪,獎金裏面有null值,又由於null值和任何數字作算數運算,結果都爲null,全部會出現異常現象。
初始sql:
SELECT e.sal*12+e.comm FROM EMP e;
出現以下現象:
應將sql語句修改成:
SELECT e.sal*12+NVL(e.COMM,0) FROM EMP e;
7.Oracle的條件表達式
(1)案例:給emp表中的員工起別名
SELECT e.ENAME, CASE e.ENAME WHEN 'SMITH' THEN '曹操' WHEN 'ALLEN' THEN '劉備' WHEN 'WARD' THEN '司馬懿' ELSE '無名' END FROM EMP e;
結果:
8.多行函數(聚合函數)
(1)統計記錄數 count()
範例:查詢出全部員工的記錄數
SELECT COUNT(1) FROM emp;
查詢結果圖:
(2)最小值查詢 min()
範例:查詢出來員工最低工資
SELECT MIN(sal) FROM emp;
查詢結果圖:
(3)最大值查詢 max()
範例:查詢出員工的最高工資
SELECT MAX(sal) FROM emp;
查詢結果圖:
(4)查詢平均值 avg()
範例:查詢出員工的平均工資
SELECT AVG(sal) FROM emp;
查詢結果圖:
(5)求和函數 sum()
範例:查詢出 20 號部門的員工的工資總和
SELECT SUM(sal) FROM emp e WHERE e.DEPTNO=20;
查詢結果圖:
9.分組查詢
分組查詢須要使用 GROUP BY 來分組
分組查詢中,出如今group by 後面的原始列,才能出如今select後面,沒有出如今group by 後面的列,想加在select後面,必須加上聚合函數。聚合函數有一個特性,能夠把多行記錄變成一個值。
範例1:查詢出每一個部門的平均工資。
SELECT e.DEPTNO, AVG( sal ) FROM emp e GROUP BY e.DEPTNO;
查詢結果圖:
範例2:查詢出平均工資高於2000的部門信息。(該案例還涉及到了SQL語言中的having函數)
SELECT e.DEPTNO, AVG( sal ) FROM emp e GROUP BY e.DEPTNO HAVING AVG(sal)>2000;
查詢結果圖:
範例3:查詢出每一個部門工資高於800的員工的平均工資。
SELECT e.DEPTNO, AVG( sal ) FROM emp e WHERE e.SAL>800 GROUP BY e.DEPTNO
查詢結果圖:
where條件語句和having語句的區別:
where是過濾分組前的數據,having是過濾分組後的數據。
表現形式:where必須在group by 以前,having是在group by 以後。
10.多表查詢
使用一張以上的表作查詢就是多表查詢。
範例:查詢出僱員的編號,姓名,部門的編號和名稱,地址
SELECT e.EMPNO, e.ENAME, d.DEPTNO, d.dname, d.loc FROM emp e, dept d WHERE e.DEPTNO = d.DEPTNO;
查詢結果圖:
11.自鏈接
自鏈接概念:其實就是站在不一樣的角度把一張表當作多張表。
範例1:查詢出員工姓名和員工領導姓名
SELECT e1.ENAME,e2.ENAME FROM emp e1,emp e2 WHERE e1.MGR=e2.EMPNO;
sql語句解釋:e1表的領導是e2表的員工,能夠將e1表當作員工表,e2表當作領導表。
查詢結果圖:
範例2:查詢出員工姓名、員工部門名稱、員工領導名稱、員工領導部門名稱
SELECT e1.ENAME, d1.DNAME, e2.ENAME, d2.dname FROM emp e1, emp e2, dept d1, dept d2 WHERE e1.MGR = e2.EMPNO AND e1.DEPTNO = d1.DEPTNO AND e2.DEPTNO = d2.DEPTNO;
查詢結果圖:
12.子查詢
子查詢:在一個查詢的內部還包括另外一個查詢,則此查詢稱爲子查詢。
Sql 的任何位置均可以加入子查詢。
(1)子查詢返回一個值
範例:查詢出工資和員工SCOTT同樣的員工信息。
SELECT * FROM emp e WHERE e.SAL IN ( SELECT e.SAL FROM emp e WHERE e.ENAME = 'SCOTT' )
sql語句:*表示全部
查詢結果圖:
(2)子查詢返回一個集合
範例:查詢出工資和10號部門任意員工同樣的員工信息。
SELECT * FROM emp e WHERE e.SAL IN ( SELECT e.SAL FROM emp e WHERE e.DEPTNO=10 )
查詢結果圖:
(3)子查詢返回一張表
範例:查詢每一個部門的最低工資和最低工資員工姓名和所在部門名稱
SELECT t.DEPTNO, t.MSAL, e.ename, d.dname FROM ( SELECT e.DEPTNO, MIN( e.SAL ) msal FROM emp e GROUP BY e.DEPTNO ) t, emp e, dept d WHERE t.deptno = e.DEPTNO AND t.MSAL = e.SAL AND e.DEPTNO = d.DEPTNO;
sql語句分析:
//這兩句是找到每個部門中工資最少的員工
t.deptno = e.DEPTNO AND t.MSAL = e.SAL
查詢結果圖: