Oracle數(shù)據(jù)庫(kù)的安裝
基礎(chǔ)概念
數(shù)據(jù)庫(kù):能夠長(zhǎng)期保存,支持多用戶共享渴析,通過(guò)數(shù)據(jù)模型盡可能的減少冗余的數(shù)據(jù)集合。
數(shù)據(jù)庫(kù)管理系統(tǒng):用來(lái)創(chuàng)建吮龄,維護(hù)俭茧,管理,運(yùn)行數(shù)據(jù)庫(kù)的軟件漓帚。
數(shù)據(jù)模型:
概念模型:解決存什么問(wèn)題
邏輯模型:解決怎么存問(wèn)題
邏輯模型
層次模型
網(wǎng)狀模型
關(guān)系模型(主流的模型)
物理模型:解決存在哪的問(wèn)題
Oracle三大文件:數(shù)據(jù)文件母债, 重做日志文件,控制文件
基礎(chǔ)命令
sqlplus? sys/1 as? sysdba;
//登錄系統(tǒng)管理員身份
alter user scott account unlock;
//解鎖
alter user scott identified by tiger;
//設(shè)置默認(rèn)密碼tiger
conn scott/tiger;
//連接scott用戶
show user ;
//顯示用戶名稱
select * from tab ;
//顯示當(dāng)前用戶下表的情況
desc tabname ;
//顯示表結(jié)構(gòu)
select * from? tabname;
//顯示表的內(nèi)容
表結(jié)構(gòu)
1、 部門表:dept
DEPTNO 表示部門編號(hào)毡们,由兩位數(shù)字所組成
DNAME 部門名稱迅皇,最多由14個(gè)字符所組成
LOC 部門所在的位置
2、 雇員表:emp
EMPNO 雇員的編號(hào)衙熔,由四位數(shù)字所組成
ENAME 雇員的姓名登颓,由10位字符所組成
JOB 雇員的職位
MGR 雇員對(duì)應(yīng)的領(lǐng)導(dǎo)編號(hào),領(lǐng)導(dǎo)也是雇員
HIREDATE 雇員的雇傭日期
SAL 基本工資红氯,其中有兩位小數(shù)框咙,五倍整數(shù),一共是七位
COMM 獎(jiǎng)金脖隶,傭金
DEPTNO 雇員所在的部門編號(hào)
3扁耐、 工資等級(jí)表:salgrade
GRADE 工資的等級(jí)
LOSAL 此等級(jí)的最低工資
HISAL 此等級(jí)的最高工資
NSQL: not sql (大數(shù)據(jù),內(nèi)存數(shù)據(jù)庫(kù)...)
SQL語(yǔ)句: 結(jié)構(gòu)化查詢語(yǔ)言
DQL:數(shù)據(jù)查詢語(yǔ)言
DML: 數(shù)據(jù)操作語(yǔ)言(增加數(shù)據(jù)产阱,修改數(shù)據(jù)婉称,刪除數(shù)據(jù))
DDL: 數(shù)據(jù)定義語(yǔ)言
DCL: 數(shù)據(jù)控制語(yǔ)言(數(shù)據(jù)使用的權(quán)限)
TPL: 事務(wù)處理語(yǔ)言
簡(jiǎn)單的DQL語(yǔ)言:
select? 查什么
from? 從哪查
語(yǔ)法:
select [distinct] {*|{列名|表達(dá)式 [as] [列別名] [,...]}}
from 表名;
[]:可有可無(wú)可選項(xiàng)
{}:括號(hào)內(nèi)自動(dòng)為一組
*: 一個(gè)表的所有列
|:或者的意思
列名:列的名字
表達(dá)式:
算數(shù)表達(dá)式: 進(jìn)行算數(shù)運(yùn)算
字符串表達(dá)式:? '||'? 拼接運(yùn)算符, 兩個(gè)字符串可以做拼接成一個(gè)字符串的運(yùn)算
as: 列別名的關(guān)鍵字 (默認(rèn)就存在)
列別名: 給列或者表達(dá)式換一個(gè)名字 ,如果名字中有特殊符號(hào)用雙引號(hào)引起來(lái)
,...: 同一組內(nèi)的內(nèi)容可以重復(fù)出現(xiàn)构蹬,中間用 逗號(hào)隔開
distinct: 唯一王暗,去重復(fù)
空值問(wèn)題:空值和任何數(shù)據(jù)進(jìn)行算數(shù)運(yùn)算的結(jié)果都為空
限制查詢和排序
語(yǔ)法:
select [distinct] {*|{列名|表達(dá)式 [as] [列別名] [,...]}}
from 表名
[where 條件表達(dá)式] ;
where 作用: 限制查詢
條件表達(dá)式 =? 關(guān)系表達(dá)式 [邏輯運(yùn)算符...]
關(guān)系表達(dá)式 =? 列名 |表達(dá)式? 比較運(yùn)算符? 列名 |表達(dá)式?
變化后語(yǔ)法:
select [distinct] {*|{列名|表達(dá)式 [as] [列別名] [,...]}}
from 表名
[where? {列名 |表達(dá)式? 比較運(yùn)算符? 列名 |表達(dá)式} [邏輯運(yùn)算符...]] ;
比較運(yùn)算符 :得到的結(jié)果一定是真假
普通比較運(yùn)算符:> <? =? >=? <=? !=
特殊比較運(yùn)算符:is null; between? and ;in ; like
isnull:
--查詢沒(méi)有獎(jiǎng)金的人
select? ename , job ,sal,comm from emp
where comm is null
like:? 通配符:
_:一個(gè)長(zhǎng)度的任意字符
%:任意長(zhǎng)度的任意字符
escape:轉(zhuǎn)義字符
--查詢一個(gè)名字中包含S的人員信息
select * from emp
where ename? like? '%S%';
--查詢名字中倒數(shù)第二個(gè)字母是T的人員信息
select * from emp
where ename like '%T_';
between? and:
-- 查詢工資在1000到2000之間的10部門人員信息
select * from emp
where deptno =10 and
sal between? 1000 and 2000;
邏輯運(yùn)算符: and 與? or 或? not 非
日期的比較: 語(yǔ)言問(wèn)題庄敛?
select? ename, hiredate,? hiredate+1 from emp
where hiredate < '1-1月-17'
空值問(wèn)題:
空值如果和任意數(shù)據(jù)進(jìn)行比較運(yùn)算的結(jié)果也為null值
邏輯運(yùn)算:得到的結(jié)果一定是真假
and TRUE FALSE null
TRUE TRUE FALSE null
FALSE FALSE FALSE FALSE
null null FALSE null
or TRUE FALSE null
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE null
null TRUE null null
排序
語(yǔ)法:
select [distinct] {*|{列名|表達(dá)式 [as] [列別名] [,...]}}
from 表名
[where 條件表達(dá)式]
[order? by 列名|表達(dá)式|列別名 |數(shù)字? [asc] [desc] [,...]];
多表連接:當(dāng)發(fā)現(xiàn)所查數(shù)據(jù)不再同一表內(nèi)的時(shí)候俗壹,需要使用多表鏈接來(lái)一次查詢多個(gè)表的數(shù)據(jù)
--查詢smith的姓名、工資和部門名稱
語(yǔ)法:
select [distinct] {*|{列名|表達(dá)式 [as] [列別名] [,...]}}
from 表名
[where 條件表達(dá)式]
[order? by 列名|表達(dá)式|列別名 |數(shù)字? [asc] [desc] [,...]];
內(nèi)部連接:不是外部連接的都是內(nèi)部連接
等值連接: 連接條件只用等于號(hào)
不等值連接:連接條件不只用等于號(hào)
T蹇尽1脸!怖亭!內(nèi)部連接:
外部連接:不是內(nèi)部連接的都是外部連接
+:在右邊叫左外連接
+:在左邊叫右外連接
N表關(guān)聯(lián)最少需要n-1個(gè)條件
函數(shù):一些提前準(zhǔn)備好的代碼(往往有固定的功能)
系統(tǒng)函數(shù)? + 自定義函數(shù)
系統(tǒng)函數(shù):
單行函數(shù):多行數(shù)據(jù)通過(guò)函數(shù)運(yùn)算的結(jié)果還是多行數(shù)據(jù)
多行函數(shù):多行數(shù)據(jù)通過(guò)函數(shù)運(yùn)算的結(jié)果只有一行數(shù)據(jù)
單行函數(shù):
函數(shù)語(yǔ)法:
使用場(chǎng)景:能使用列名或者表達(dá)式都可以使用函數(shù)
函數(shù)名( 入?yún)?
入?yún)⒁?guī)定數(shù)據(jù)的類型
字符函數(shù):
字符轉(zhuǎn)換:
Lower()
Upper()
initcap()
字符處理:
substr()? //字符串截取
length()? //字符的個(gè)數(shù)
concat()
instr()? //求某一個(gè)字符串在另一個(gè)字符串中的位置
lpad()? //填充
rpad()
trim()? //去掉前后空格
replace()//替換字符串
--要求查詢名字中含有S的人員信息 涎显,不允許使用substr,like
select * from emp
where? instr(ename ,'S')>0;
select ename ,replace(ename,'S') from emp
where? ename != replace(ename,'S')
數(shù)字函數(shù):
? abs: 絕對(duì)值
? round:四舍五入
? trunc:截取
? ceil:向上取整
? floor:向下取整
? mod:取余運(yùn)算
? sign:判斷正負(fù)數(shù)
日期函數(shù):
sysdate:當(dāng)前時(shí)間
months_between():求兩個(gè)時(shí)間點(diǎn)之間差了幾個(gè)月
add_months():指定日期過(guò)幾個(gè)月后的日期
next_day():返回離當(dāng)前日期最近的指定星期的日期
last_day():本月最后一天
轉(zhuǎn)換函數(shù):
通用函數(shù):
nvl:處理空值
select ename ,sal ,comm,sal+nvl(comm,0)
from emp;
case:
decode:
例子1.:
-- 查詢每個(gè)員工的姓名和部門名稱
select ename,
? ? ? case deptno
? ? ? ? when 10 then
? ? ? ? ? 'ACCOUNTING'
? ? ? ? when 20 then
? ? ? ? ? 'RESEARCH'
? ? ? ? when 30 then
? ? ? ? ? 'SALES'
? ? ? ? else
? ? ? ? ? 'OPERATIONS'
? ? ? end
? from emp;
select ename,
? ? ? decode(deptno,
? ? ? ? ? ? ? 10,
? ? ? ? ? ? ? 'ACCOUNTING',
? ? ? ? ? ? ? 20,
? ? ? ? ? ? ? 'RESEARCH',
? ? ? ? ? ? ? 30,
? ? ? ? ? ? ? 'SALES',
? ? ? ? ? ? ? 'OPERATIONS')
? from emp;
? 例子2.:
select ename,
? ? ? case
? ? ? ? when sal < 1000 then
? ? ? ? ? '窮'
? ? ? ? when sal between 1000 and 2000 then
? ? ? ? ? '貧'
? ? ? ? when sal > 2000 and sal <= 3000 then
? ? ? ? ? '勉強(qiáng)能活'
? ? ? ? else
? ? ? ? ? '高富帥'
? ? ? end
? from emp;
select ename,
? ? ? decode(sign(sal - 1000),
? ? ? ? ? ? ? -1,
? ? ? ? ? ? ? '窮',
? ? ? ? ? ? ? 0,
? ? ? ? ? ? ? '貧',
? ? ? ? ? ? ? 1,
? ? ? ? ? ? ? decode(sign(sal - 2000),
? ? ? ? ? ? ? ? ? ? -1,
? ? ? ? ? ? ? ? ? ? '貧',
? ? ? ? ? ? ? ? ? ? 0,
? ? ? ? ? ? ? ? ? ? '貧',
? ? ? ? ? ? ? ? ? ? 1,
? ? ? ? ? ? ? ? ? ? decode(sign(sal - 3000),
? ? ? ? ? ? ? ? ? ? ? ? ? ? -1,
? ? ? ? ? ? ? ? ? ? ? ? ? ? '勉強(qiáng)能活',
? ? ? ? ? ? ? ? ? ? ? ? ? ? 0,
? ? ? ? ? ? ? ? ? ? ? ? ? ? '勉強(qiáng)能活',
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1,
? ? ? ? ? ? ? ? ? ? ? ? ? ? '高富帥')))
? from emp;
轉(zhuǎn)換函數(shù):
to_char() 兴猩!? ? 'yyyy-mm-dd? hh24:mi:ss'
to_date() !
to_number()
多行函數(shù):無(wú)論多少條數(shù)據(jù)期吓,只有一個(gè)條結(jié)果,空值不參與任何統(tǒng)計(jì)
種類:Max,Min,Avg,Sum,Count
使用場(chǎng)景:select ,order by
求表內(nèi)數(shù)據(jù)的行數(shù):count(1),count(*)
函數(shù)名([distinct]列名|表達(dá)式)
分組語(yǔ)句:
group by
select [distinct] {*|{列名|表達(dá)式 [as] [列別名] [,...]}}
from 表名
[where 條件表達(dá)式]
[group by 列名|表達(dá)式 [,...]]
[having? 條件表達(dá)式]
[order? by 列名|表達(dá)式|列別名 |數(shù)字? [asc] [desc] [,...]];
子查詢:把多個(gè)有關(guān)聯(lián)的查詢組合成一個(gè)查詢,其中部分先執(zhí)行的查詢用括號(hào)括起來(lái)倾芝。
使用位置:除了group by 都可以
分類:
子查詢結(jié)果分類:
單行子查詢:
子查詢返回結(jié)果為1行
多行子查詢:
子查詢結(jié)果超過(guò)1行
使用 any all in
多列子查詢:
子查詢使用的位置分類:
where子查詢: 子查詢的作用是提供一個(gè)條件
from子查詢: 作用1:可以自定義新的數(shù)據(jù)集合讨勤,經(jīng)過(guò)自己的設(shè)計(jì),完成更復(fù)雜的查詢需求
作用2:提升某些運(yùn)算的優(yōu)先級(jí)
select子查詢:
相關(guān)子查詢:
所在晨另,自己潭千,同
DML: 一切皆是查詢
? 查詢:
? 增加:insert
? 刪除:delete
? 修改:update
? 刪除:把查詢語(yǔ)句的from保留,用delete替換掉select子句
? 增加:insert into
? 主數(shù)據(jù)插入:
? ? insert into dept values(60,'haha',null);
insert into dept(deptno ,dname) values(70,'xixi'); ?
? 業(yè)務(wù)數(shù)據(jù)插入:
? ? insert into tabname select ...
? 修改:
? update emp
set sal = 1000
where ename = 'SMITH'
相關(guān)update借尿?
commit:提交
rollback:回滾
事務(wù)刨晴???割捅?
? DDL:數(shù)據(jù)定義語(yǔ)言
? ? create
? ? drop
? ? create :創(chuàng)造?
? ? create table Student (
? ? name char(100),
? ? age number(3),
? ? sex char(2)
? ? )
? ? 數(shù)據(jù)類型:
? ? 字符
? ? char :固定字符? ? ,效率高帚桩,容易浪費(fèi)
? ? varchar2:不固定字符 亿驾,效率慢,節(jié)省空間
? ? 數(shù)字
? ? Number(所有數(shù)的位數(shù)账嚎,小數(shù)的位數(shù))
? ? 日期
? ? Date? timstamp 支持毫秒
? ? 作業(yè):oracle :5莫瞬,6,7郭蕉,9所有的題
? ? 能力好一點(diǎn)的:5章嘗試用子查詢疼邀, 7,9嘗試多表
? ? ? ? ? java:安裝召锈,配置
? ? ? ? ? ? ? ? 2的10以內(nèi)次冪