Oracle入門小知識

Oracle資料

Oracle安裝步驟

Oracle數據庫 公司名 java sun oracle

Oracle10g 測試學習 免費 貴 IBM

1、安裝:

​ 下一步

注意: 記憶 密碼

​ 用戶名:System

密碼:123

安裝路徑中不要有中文或者空格

注意:

1、 sqlplus不是內部命令 path沒有oracle的bin目錄對應的路徑

環境變量path路徑以;分割

Oracle的卸載:千萬不要直接刪除對應的安裝文件夾

​ 正確卸載方式:重新運行安裝程序 自動檢測環境 提示卸載還是修復 卸載

2、簡單使用

​ 客戶端 服務器

a、 連接數據庫方式

Cmd窗口—>sqlplus—》輸入用戶名密碼(System 123)à回車

b、 訪問

在這裏插入圖片描述

c、 Oracle10g內置的用戶 解鎖 hr用戶

alter user hr account unlock 解鎖用戶hr

退出超級管理員登陸

Sqlplus連接數據庫

用戶名 hr 密碼 hr

更新密碼:隨意 建議 hr

Sql> 進入到了hr用戶

測試sql : select * from employees;

107行

Oracle基礎-1

數據的存儲

​ 臨時數據存儲:變量、數組、對象、集合

​ 持久化數據存儲:IO流 文件系統

​ 缺陷:

​ 1、 不安全

​ 2、 沒有用戶驗證

​ 3、 沒有數據類型(String)

​ 4、 存儲量小

​ 5、 數據保護機制(備份)

一、概念

​ 1、 數據庫:將數據以一定的形式進行存儲、管理的軟件(存儲操作數據)

​ 軟件:程序 硬件:服務器:提供服務 計算機

​ 2、 分類

​ a) 關係型數據庫 特點:數據以表結構存儲,表與表之間存在關係

​ Oracle mysql sqlServer

​ b) 非關係型數據庫 特點:不以表結構存儲

​ Redis(key=value) mongoDB (json串 字符串)

​ 3、 Oracle數據存儲結構

​ 表:基本的數據存儲單位

​ 行:表中的一個基本對象 實例

​ 列:表中的一條屬性 字段

​ 主鍵:列 唯一標識一行數據 特性:非空唯一

​ 外鍵:表與表之間關係的體現

​ 4、 安裝卸載

​ 5、 訪問

​ a) Sqlplus cmd窗口 默認

​ b) Isqlplus 瀏覽器訪問 oracle11g後不支持

​ 瀏覽器:http://localhost:8080/apex

​ 輸入用戶名密碼

​ 選擇sql窗口

​ c) 第三方工具

​ 運行PLSQL Developer–>輸入用戶名和密碼—》file—》新建—》sql Windows

書寫sql語句—》在這裏插入圖片描述(F8)

​ Hr用戶中內置employees 員工表、departments部門表、locations位置表

二、Sql 結構化查詢語言

所有關係型數據庫通用的查詢語言 oracle、mysql、sqlserver

1、 簡單查詢

​ select 展示的內容 from 表名 從什麼位置查詢什麼內容

​ a) 查詢所有

​ select * from 表 查詢表中所有的數據

​ *: 統配符 代表所有

​ 注意:* 數據庫會將*翻譯成所有的列名 查詢效率較低

​ select 列名1,列名2…列名10 from 表名

​ b) 查詢局部數據

​ Select 列名,列名 from 表名

​ c) 列運算(+ - * / )

​ Select 列 from 表名

​ d) 列別名 as

​ Select 列 as 別名 , 列 as 別名 from 表明

​ e) 列拼接 ||

​ Select 列||列 from 表名

​ 注意:sql語句不區分大小寫,數據庫執行的時候 全大寫執行

2、 條件查詢 where

​ a) 等值條件查詢 = !=(<>)

​ Select * from 表明 where 條件

​ 注意:null值不能用=判斷

​ Is null 爲空

​ Is not null 非空

​ b) 比較條件查詢 >>= < <=

​ Select * from 表名 where 列條件

​ c) 區間條件查詢 and or [not]between 值 and 值

​ select * from employees where 列名 between值 and 值

​ d) 枚舉條件查詢 in

​ Select * from 表明 where 列 in(值1,值2,值3)

​ e) 模糊條件查詢 like

​ Select * from employees where 列 like ‘值’

​ 佔位符

​ % :可以存在0-n個字符

​ _ : 可以存在1個字符

3、 排序 order by

​ Select * from employees orderby 列名 【規則】

​ 默認 升序 asc

​ 降序 desc

​ 多列排序:select * from 表明 order by 列名【規則】,列名【規則】

​ 注意:order by 寫在 sql語句的最後

4、 Oracle中的單行函數

​ a) 查詢當前系統時間 sysdate

​ Select sysdate from 表名

​ 系統內置了一張表,沒有實際意義數據 ,爲了維護sql語句語法完整

​ dual 虛表 啞表

​ Select sysdate from dual;

​ 使用:插入日期類型數據方便

​ b) to_char(“日期類型數據”,”轉化的格式”) 將日期類型的數據轉化爲字符串

​ yyyy:年

​ MM:月

​ dd:日

​ hh:時

​ mm:分

​ ss:秒

​ select to_char(sysdate,‘yyyy-dd-MM hh:mm:ss’) from dual

​ 使用:展示日期類型數據、日期類型數據的截取

​ c) to_date(“字符串類型的日期”,”轉化的格式”)將字符串轉化爲日期類型的數據

​ select to_date(‘1999-01-02’,‘yyyy-dd-MM’) from dual;

​ 使用:插入數據

5、 組函數(聚合函數)

​ 一組數據會產生一個結果

​ max() 最大值

​ min() 最小值

​ avg() 平均值

​ sum() 和

​ count() 條數

​ count(列) 代表統計本列不爲空的條數

​ count(*) 代表統計所有條數

​ 注意:一張表如果不進行分組,默認表就是一個組

6、 分組 group by

​ Select * from 表 group by 分組條件

​ 例:查詢每個部門的平均薪資

​ 分組條件:部門

​ 結果:平均薪資

​ select department_id,avg(salary) from employees group by department_id;

​ 多條件分組

​ Select * from 表 group by 分組條件, 分組條件

​ 例:查詢每個部門的每個工種的平均薪資

​ select department_id, job_id, avg(salary) from employees group by department_id, job_id;

​ 例://查詢1997年每個月份入職的員工人數

​ 分組 月份

​ 結果 人數

​ select to_char(hire_date,‘MM’) , count(*)

​ from employees where to_char(hire_date,‘yyyy’)=‘1997’ group byto_char(hire_date,‘MM’)

​ 硬性語法要求:

​ 1、 只有出現在group by 後的列 才能出現在select 後

​ 2、 組函數也可以出現在select後

​ 3、 單行函數如果出現在group by 後,select後必須使用相同的函數

7、 Having 分組後的條件篩選

​ 例子:查詢1997年每個月份入職的員工人數大於兩人的月份和人數

​ select to_char(hire_date,‘MM’),count(*)

​ fromemployees

​ where to_char(hire_date,‘yyyy’)=‘1997’

​ group by to_char(hire_date,‘MM’)

​ having count(*)>2

​ 什麼時候用where 用普通列或者數據當前條件

​ 什麼時候用having 用組函數當做條件

8、 Sql語句關鍵字執行順序

​ Select from where order by group by having

​ 1、 from 確定數據來源 找表

​ 2、 where 初步篩選數據

​ 3、 group by 對數據進行分組操作

​ 4、 having 對分組後的數據進行再次篩選

​ 5、 select 確認最終結果數據

​ 6、 order by 對最終結果進行排序

​ 寫:select…from…where…group by… having…order by

Oracle基礎-2

一、查詢相關的高級語法

​ a) 僞列

​ select *查詢不會展示的一些列 , 只能通過手工指定展示對應列內容

​ i. rowid 一行數據在計算中的物理存儲位置的表示

​ 已知rowid 的值時,使用rowid進行查詢, 效率快

​ ii. 表別名

​ 語法: select * from employees 別名

​ 展示一個表中所有的內容,並且同時展示僞列內容需要表起別名

​ Select e.* , rowed from employees e

​ iii. rownum 行數

​ 自動爲當前結果數據編號 默認從1開始

​ 注意:

					rownum 只能進行 < <= >=1 =1

					區間查詢:工資最高的五個人的信息

​ Select * fromemployees where rownum<=5 order by salary desc //語法正確 結果不對

二、子查詢(嵌套查詢)[效率低 瞭解 面試]

​ 查詢語句中嵌套其他的查詢語句

​ 根據嵌套的sql語句的查詢結果 ,將子查詢分爲了三類

​ 單行單列子查詢:嵌套sql語句的查詢結果是單個數據

​ //查詢工資最高的員工信息

​ select * fromemployees wheresalary =(select max(salary) fromemployees)

​ 使用:作爲其他sql的查詢條件

​ 多行單列子查詢

​ //查詢 last_name 爲‘King’所在部門的員工信息

​ 1、 last_name 爲‘King’所在部門

​ selectdepartment_id fromemployees wherelast_name = ‘King’

​ 2、根據部門查詢員工信息

​ select * from employees where department_id in(80,,90)

​ 組合

​ select * from employees

​ where department_id in(

​ select department_id from employees where last_name = ‘King’

​ )

​ 使用:作爲其他sql的枚舉值

​ 多行多列子查詢

​ //工資最高的五個人的信息

​ 1、 查詢工資倒敘排序

​ select * from employeesorder by salary desc

​ 2、 根據排序結果完成取rownum <=5

​ 組合select * from (select * from employees order by salary desc) where rownum<=5

​ 使用:作爲其他sql的表

三、分頁(rownum+子查詢)

1、 固定原表數據rownum 查詢的條件

​ Select e.* , rownum as rn from employees

2、 根據固定之後的rownum進行區間查詢

​ Select * from (1) where rnbetween ? and ?

​ 組合:

​ select * from ( select e.* , rownum as r from employees e ) where r between 6 and 10

​ 要求:sql背會

​ Mysql分頁: Select * fromemployees limit 11 5

​ 僞列 rowed 物理存儲位置

​ Rownum自動從1開始標號

 	表 別名   *  僞列

​ 子查詢(嵌套查詢) 單行單列 多行單列 多行多列

分頁:rownum+子查詢 固定內層rownum的值

​ Select * from(select e.*,rownum as r from employees e) where r between ? and ?

四、表連接【重點】

結果數據來源於兩張或者多張表,需要進行表連接展示數據

語法:select tab1.,tab2. from 表 tab1 連接方式 表tab2 on連接條件

連接方式:

內連接[inner] join

​ 特點:結果中只包含滿足條件的數據

​ 例子:

​ select e.* , d.*

​ fromemployees e inner joindepartments d

​ on e.department_id = d.department_id

外連接

​ 左外連接 left outer join【重點】

​ 特點:結果中包含滿足條件的數據+左表中不滿足條件的數據

​ 右外連接right outer join

​ 特點:結果中包含滿足條件的數據+右表中不滿足條件的數據

​ 全外連接full outer join

​ 特點:結果中包含滿足條件的數據+左表中不滿足條件的數據+右表中不滿足條件的數據

自連接:是一種連接概念連接方式 自己連自己 【特殊需求】


​ 注意:

​ 自連接就是把一張表看作相同的兩張表用別名區分

​ 連接方式使用內連、外連都可以

多表連接:

​ Select 展示內容 from 表 連接 表

​ On 連接條件

​ 連接方式 表

​ On 連接條件

​ 例子:

​ //查詢員工 及其部門 及其部門所在位置相關信息

​ select e.,d. ,l.*

				 from employees e inner join departments d

​ one.department_id =d.department_id

​ inner joinlocations l

					ond.location_id =l.location_id

Oracle基礎-3

一、建表

create table 表名(

列名1 類型 [約束] ,

列名2 類型 [約束] ,

列名3 類型 [約束]

)

a) 標識符命名(表明和列名)

不能以數字開頭 可以有:字符 _ # 數字 長度 30字符 [可讀性]

不能和保留字衝突

b) 數據類型

​ i. 數字類型 number

number(n) 最大可以存儲n位的整數 number(5)

number(n,s) 小數一共有n爲 小數爲佔s位 number(5,2)

number 38位整數 number最大值爲38

Integer 38位整數

​ ii. 字符類型(字符串)

char 定長字符串 char(10) 最大存儲10個字節 2000byte

varchar 可變長字符串 通用mysql也有 4000byte

varchar2可變長字符串 oracle特有數據類型 4000byte

​ iii. 日期類型

date

​ iv. 大數據類型 [瞭解]

Clob 文本類型大數據 文本文檔數據 4G

Long 文本類型數據 二進制數據圖片、視頻、音頻 2G

Blob 二進制數據 二進制數據圖片、視頻、音頻 4G

c) 約束

​ i. 主鍵 primary key

用來唯一標識一行數據非空唯一 表中只能有一個主鍵約束

​ ii. 非空 not null

保證本列數據不能出現null值

​ iii. 唯一 unique

保證列中如果有值 值不能重複 如果沒值 null 可以重複

​ iv. 檢查 check

對數據進行校驗

例子:

​ 長度: tel number(11) check(length(tel)=11)

​ 內容: sex varchar2(6) check(sexin(‘N’,’V’,’O’) )

​ v. 外鍵 foreign key

外鍵是表與表之間關係的體現

注意:

1、 外鍵列數據都來源與另外一張表的主鍵或者 唯一列

2、 外鍵列的值可以爲空

3、 外鍵列的值一定是另外一張表中的已經存在的值

添加外鍵語法:列類型 引用 表(列)

列名 類型 references 表(列)

​ 外鍵添加位置:

​ 表與表之間存在關係:1對1

​ 外鍵:隨意

表與表之間存在關係:1對多

​ 外鍵:多的一方

表與表之間存在關係:多對多

​ 外鍵: 第三張表關係表

建表的語法

建表外鍵的添加

練習:

​ 創建person表創建身份證表 外鍵

​ 創建學生表 創建班級表

​ 創建老師表

Create table 表名(

​ 列名 類型 約束,

​ 列名 類型 約束

​ Primary key not null unique check()

​ References 表(列)

建表思路:

1、 確定表名

2、 列名 列中存儲的數據

3、 確定表與表之間的關係

二、Sql語句的分類

a) DQL 數據查詢語言 select from group byhaving order by 子查詢 表連接

b) DDL 數據定義語言 表的創建刪除 修改

c) DML數據操縱語言 表中數據的增刪改

d) TCL 事物控制語言 控制事物

三、DDL【重點】

創建表:create table 表名(列 類型 約束)【重點】

刪除表:drop table 表名

​ 一旦存在外鍵關聯關係 刪除那張被外鍵關聯表

​ 1、先刪除關聯本表那張表,再刪本表

​ 2、級聯刪除:刪除表的同時 移除關聯關係

​ Drop table 表名 cascade constraint

​ 修改表中列【瞭解】

​ 表中添加一列:alter table 表名 add 新列名類型 約束

​ 表中刪除一列:alter table 表名 drop column 列名

​ 修改列的名字:alter table 表名 rename column 原來的列名 to 新列名

​ 修改列的類型:alter table 表名 modify 列名 新類型新約束

Desc 表名:查看對應表的結構

四、DML 數據操縱語言 數據的增刪改

​ a) 插入insert

​ insert into 表名 values (值)

​ 注意:值要和創建表時列的順序 一一對應

	  Insert into 表名(列名1,列名2)  values  (值1,值2)

​ b) 刪除delete

​ Delete from 表名 全表刪除 清空表中所有的數據

​ Delete from 表名 where 條件 按條件刪除數據【常用】

​ c) 修改 update

​ update 表名 set 列名=值 , 列名 = 值 修改全表對應列的內容

​ update 表名 set 列名=值 , 列名=值 where 條件【常用】

五、TCL 事物控制語言

​ 事物控制:保證數據操作的完整性,正確性

​ 事物:完成功能的一組sql 是一個不可分割的整體,原子操作

​ 事物控制:控制一組sql要不一起成功 , 要不一起失敗

​ 事物控制語法:

​ commit 提交確認操作

​ rollback回滾撤銷操作

​ 事物控制邊界【重點】

​ 事物控制的開始:上一次出現事物控制語句開始

​ 事物控制的結束:到本次出現事物控制語句結束

​ 事物控制的原理:

​ 數據庫會爲每個用戶開闢一塊存儲空間(回滾段),用戶存放用戶執行的sql語句,當用戶一旦執行事物相關的操作 數據庫會根據操作完成對應工作。提交 commit,將回滾段中sql語句放到數據庫中實際執行;回滾 rollback , 將回滾段中的sql語句清空

​ 提交和回滾

​ 顯式的提交:commit;

	隱式的提交:正常退出數據庫 exit

​ 顯式的回滾:rollback;

​ 隱式的回滾:不正常退出數據庫

​ 使用場景:DDL自動控制事物不許要手工控制事物 自動提交

​ DML相關的操作都是需要控制事物的 數據的增 刪 改

查詢不需要控制事物

六、Oracle中對象

​ a) 序列sequence

​ 作用:自動生成主鍵值 默認從1開始

​ 創建語法:create sequence 序列名

​ 使用:序列名.nextval 獲取序列中的下一個值

​ 查詢序列的下一個值: select 序列名.nextval fromdual

​ 場景:插入數據:insert into 表名 values(序列名.nextval,值)

​ 其他用法:

​ 序列指定數值開始:start with n 從n開始

​ 序列指定每次增長几個:increment by n 一次增長n個

​ 指定開始數值和增長幅度:

​ Create sequence 序列名 start with nincrement by m; 從n開始一次增長m個

​ 刪除序列:dropsequence 序列名

​ b) 視圖 View

​ 作用:存儲查詢的sql語句,簡化查詢語法

​ 創建:create view 視圖名 as sql

​ 使用:

​ 查詢工資前五的員工信息

​ create view emp_salary_desc asselect * from employees order by salary desc

select *from emp_salary_desc where rownum <=5

​ 注意:

​ 視圖存儲到底sql語句本身,查詢效率還是那樣子查詢

​ 爲了簡化sql語法

​ 最好不要對視圖進行增刪改操作,有可能會影響原表的數據

​ 刪除視圖:drop view 視圖名

​ c) 索引 index

​ 作用:類似與字典目錄 增加查詢效率

​ 創建索引:create index 索引名 on 表名(列名)

​ 注意:

​ 1、 經常需要作爲查詢條件的一些列(出現where後的)可以爲他添加索引

​ 2、 數據庫會在查詢過沖中自動使用索引內容

​ 3、 數據庫會自動爲每個表的主鍵添加索引

​ 4、 不建議爲每列添加索引,數據庫會在數據變動時自動維護索引值

​ 經驗:

​ 數據在千萬級,根據某些列查詢的數據在百分之三十作用列添加索引

​ 刪除索引:drop index 索引名

事物的特性:【面試】 ACID

A 原子性**:一組事物組成的sql****不可分割的一個整體**

C 一致性:事物前後的數據****保持一致

I 隔離性:事物的隔離級別 併發操作下 事物之間的控制不會錯亂

讀未提交 :可以看到未提交的數據

讀已提交 :可以看到已經提交的數據

可重複讀 :一個事物中兩次查詢結果保持一致

序列化讀 :一個事物中一張表的兩次統計保持一致

D 持久性****事物處理過後的數據必須是持久化保

    		 注意:

​ 視圖存儲到底sql語句本身,查詢效率還是那樣子查詢

​ 爲了簡化sql語法

​ 最好不要對視圖進行增刪改操作,有可能會影響原表的數據

​ 刪除視圖:drop view 視圖名

​ c) 索引 index

​ 作用:類似與字典目錄 增加查詢效率

​ 創建索引:create index 索引名 on 表名(列名)

​ 注意:

​ 1、 經常需要作爲查詢條件的一些列(出現where後的)可以爲他添加索引

​ 2、 數據庫會在查詢過沖中自動使用索引內容

​ 3、 數據庫會自動爲每個表的主鍵添加索引

​ 4、 不建議爲每列添加索引,數據庫會在數據變動時自動維護索引值

​ 經驗:

​ 數據在千萬級,根據某些列查詢的數據在百分之三十作用列添加索引

​ 刪除索引:drop index 索引名

事物的特性:【面試】 ACID

A 原子性**:一組事物組成的sql****不可分割的一個整體**

C 一致性:事物前後的數據****保持一致

I 隔離性:事物的隔離級別 併發操作下 事物之間的控制不會錯亂

讀未提交 :可以看到未提交的數據

讀已提交 :可以看到已經提交的數據

可重複讀 :一個事物中兩次查詢結果保持一致

序列化讀 :一個事物中一張表的兩次統計保持一致

D 持久性****事物處理過後的數據必須是持久化保

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章