oracle初步學習總結
oracle初步學習總結
1.介紹
1.1.定義
一種高效率、可靠性好的、適應高吞吐量的關係資料庫
1.2.特點
可移植性好、使用方便、功能強
1.3.組成
Oracle資料庫伺服器由一個數據庫和至少一個數據庫例項組成。 資料庫是一組儲存資料的檔案,而資料庫例項則是管理資料庫檔案的記憶體結構。
1.4.和mysql的區別
區別 |oracle|mysql
區別 | oracle | mysql |
---|---|---|
收費 | 收費 | 免費 |
併發 | 高併發強 | 高併發弱 |
記憶體 | 佔用記憶體大 | 佔用記憶體小 |
支援事務 | 支援 | 預設不支援 |
事務隔離級別 | 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