1. 程式人生 > 其它 >oracle初步學習總結

oracle初步學習總結

技術標籤:oraclesqljava資料庫oracle

oracle初步學習總結

1.介紹

1.1.定義

一種高效率、可靠性好的、適應高吞吐量的關係資料庫

1.2.特點

可移植性好、使用方便、功能強

1.3.組成

Oracle資料庫伺服器由一個數據庫和至少一個數據庫例項組成。 資料庫是一組儲存資料的檔案,而資料庫例項則是管理資料庫檔案的記憶體結構。

1.4.和mysql的區別

區別 |oracle|mysql

區別oraclemysql
收費收費免費
併發高併發強高併發弱
記憶體佔用記憶體大佔用記憶體小
支援事務支援預設不支援
事務隔離級別read commited(已提交讀)repeatable read(可重複讀)
提交方式預設手動提交預設自動提交

2.安裝

oracle和其視覺化操作工具PLSQL的安裝方式:

百度雲連結:
https://pan.baidu.com/s/1uIYvhAsLyHm_SoJlGWXajg
提取碼:omck

3.建立表空間和使用者

3.1.表空間

(1)建立表空間

create tablespace itheima
datafile 'e:\oracleCode\itheima.dbf'
size 100m
autoextend on
next 10m;

注意:從上往下分別代表名稱,位置,大小(M),自動擴容每次擴充套件10M
(2)刪除表空間

drop tablespace 表空間名

3.2.使用者

(1)建立使用者

create user itheima
identified by itheima
default
tablespace itheima

注意:
user後邊是使用者名稱
identifiedby 後邊是使用者的密碼
default tablespace 後邊是表空間名稱
(2)給使用者授權(否則無法登陸)

grant dba to 使用者名稱

注意:
oracle有以下三種許可權:
CONNECT角色:–是授予終端使用者的權利
RESOURCE角色:–是授予開發人員的
DBA角色:擁有全部特權,是系統最高許可權

4.oracle資料型別

在這裡插入圖片描述

5.表的管理

5.1.建表

(1)語法:

 create table 表名(
       欄位名1 資料型別 [default 預設值],
       欄位名2 資料型別 [default 預設值],
       ...
       欄位名3 資料型別 [default 預設值],
);

(2)例子:

create table person(
       pid number(10),
       name varchar2(10),
       gender number(1) default 1,
       birthday date
);

5.2.刪除表

DROP TABLE 表名

5.3.修改表

在sql中使用alter可以修改表
(1) 新增語法:

ALTER TABLE 表名稱 ADD(列名1 型別[DEFAULT 預設值],列名2 型別[DEFAULT 預設值]...)

範例:在person表中增加列address

alter table person add(address varchar2(10));

(2) 修改語法:

ALTER TABLE 表名稱 MODIFY(列名1 型別[DEFAULT 預設值],列名2 型別[DEFAULT 預設值]...)

範例:把person表的address列的長度修改成20長度

alter table person modify(address varchar2(20));

(3)修改列名:

ALTER TABLE 表名稱 RENAME COLUMN 老列名 TO 新列名

範例:將emp表的ename欄位名修改為ename2

alter table emp rename column ename to ename2

5.4. 資料庫表資料的crud

(1)增加:

INSERT INTO 表名(列名1,列名2...) VALUES(1,值2...)

(2)修改:
全部修改:

UPDATE 表名 SET 列名1=1,列名2=2....

區域性修改:

UPDATE 表名 SET 列名1=1,列名2=2....WHERE 修改條件;

(3) 刪除
區域性刪除:

DELETE FROM 表名WHERE刪除條件

刪除所有:

DELETE FROM 表名

注意:oracle的事務對資料庫的變更的處理,我們必須做提交事務才能讓資料真正的插入到資料庫中,在同樣在執行完資料庫變更的操作後還可以把事務進行回滾,這樣就不會插入到資料庫。如果事務提交後則不可以再回滾。
提交:commit
回滾:rollback
(4)查詢
①基本查詢:

select 欄位名1,欄位名2,... from 表名

②查詢所有:

select 1 from 表名
select * from 表名

從效率上來說,1>anycol>*,因為不用查字典表
③條件查詢

select 欄位名1,欄位名2,... from 表名 where 條件

5.5.序列

(1)背景:oracle 中列完成自動增長的功能, 需要使用者手工依靠序列完成
(2)建立:

create sequence seqpersonid
increment by 1
start with 1
maxvalue 999999999;

注意:
sequence後是序列名,by、with、maxvalue後面分別是每次增加值,起始值,最大值
(3)使用
在插入資料時需要自增的主鍵中可以這樣使用

insert into emp(eid,ename,hiredate) values(seqpersonid.nextval,'田七',sysdate)

注意:nextval :取得序列的下一個內容,currval :取得序列的當前內容

6.單行函式

6.1.字串函式

(1)把小寫的字元轉換成大小的字元upper

select upper('yes') from dual

(2) 把大寫字元變成小寫字元lower

select lower('YES') from dual

(3) 首字母大寫函式initcap

select initcap('yes') from dual

(4) 字串連結函式||和CONCAT
①方式1:||
特點:連結個數無限制
Eg;

select ENAME || HIREDATE from EMP
SELECT '姓名:' || ENAME FROM EMP
SELECT '姓名:' || ENAME || 'TEST' || 'LALALA' FROM EMP

②方式2:CONCAT
特點:只能連線兩個引數,兩個以上需要巢狀

SELECT CONCAT(ENAME,HIREDATE) FROM EMP
SELECT CONCAT('姓名:',ENAME) FROM EMP
SELECT CONCAT(CONCAT(CONCAT('姓名:',ENAME),'TEST'),'LALALA') FROM EMP

(5) 字串擷取函式substr
格式1.從str的a位置擷取長度為b的字串

select substr(str,a,b) from dual

格式2.substr(str,a),從string1的第a個字元開始擷取後面所有字母

select substr(str,a) from dual

(6) 字串替換函式replace和translate
① TRANSLATE(char, from, to)
作用:返回將出現在from中的每個字元替換為to中的相應字元以後的字串。
若from比to字串長,那麼在from中比to中多出的字元將會被刪除
Eg:

select translate('abcdefga','abc','wo') from dual

結果:wodefgw
分析:該語句要將’abcdefga’中的’abc’轉換為’wo’,
由於’abc’中’a’對應’wo’中的’w’,
故將’abcdefga’中的’a’全部轉換成’w’;
而’abc’中’b’對應’wo’中的’o’,
故將’abcdefga’中的’b’全部轉換成’o’;
'abc’中的’c’在’wo’中沒有與之對應的字元,
故將’abcdefga’中的’c’全部刪除;

② REPLACE(str, oldStr,newStr)
作用:將str字串中oldStr全部轉換為字串newStr。
Eg:

select replace('abcdefga','abc','wo') from dual

(7) 獲取字串長度函式:LENGTH和LENGTHB
①返回字串長度:

SELECT LENGTH('你好') FROM DUAL

②返回字串的位元組長度

SELECT LENGTHB('你好') FROM DUAL

6.2.數值函式

(1) 四捨五入函式ROUND()

select round(26.18,1) from dual

(2)取餘函式mod

select mod(10,3) from dual

(3)向下取整函式

select trunc(56.16) from dual

6.3.日期函式

(1)sysdate:當前時間
eg:
查詢僱員進入公司的天數(sysdate –入職日期)/7就是週數

select sysdate-e.hiredate from emp e

(2)MONTHS_BETWEEN(dateA,dateB):兩個時間段之間的月份差
注意:在日期加減時有一些規律
日期–數字= 日期
日期+ 數字= 日期
日期–日期= 數字

6.4. 轉換函式

(1)TO_CHAR:字串轉換函式, 可以將年月日分開
範例:查詢所有的僱員將將年月日分開,此時可以使用TO_CHAR函式來拆分
拆分時需要使用萬用字元
年:y, 年是四位使用yyyy
月:m, 月是兩位使用mm
日:d,日是兩位使用dd

select ename,
to_char(hiredate,'yyyy') 年,
to_char(hiredate,'MM') 月,
to_char(hiredate,'dd') 日
from emp

(2) TO_DATE:日期轉換函式,可以把字串的資料轉換成日期型別

insert into emp(ename,hiredate) values('田七',to_date('1996-12-04','yyyy-MM-dd'))

6.5. 通用函式

(1)空值處理nvl
nvl(comm,0):comm欄位值為null的用0表示
(2)decode:類似if-else
語法:

DECODE(col/expression, [search1,result1],[search2, result2]....[default])

Col/expression:列名或表示式
Search1,search2…:用於比較的條件
Result1, result2…:返回值
如果col/expression和Searchi匹配就返回resulti,否則返回default的預設值
(3)case when類似if-else

CASE expr WHEN comparison_expr1 THEN return_expr1 
[WHEN comparison_expr2 THEN return_expr2 
WHEN comparison_exprn THEN return_exprn  
ELSE else_expr]
END

7.多行函式(聚合函式)

7.1.統計記錄數count()

eg:查詢所有員工記錄數

select count(*) from emp 

注意:建議使用count(欄位名),它比count(*)效率高

7.2.最小值查詢min()

eg:查詢出來員工最低工資

select min(sal) from emp 

7.3.最大值查詢max()

eg:查詢出來員工最高工資

select max(sal) from emp 

7.4.查詢平均值avg()

eg:查詢出來員工平均工資

select avg(sal) from emp 

7.5.求和函式sum()

eg:查詢出來員工工資總和

select sum(sal) from emp