22 Oracle數據庫基礎入門

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

查詢結果圖:

相關文章
相關標籤/搜索