Oracle數(shù)據(jù)庫(kù)的安裝
基礎(chǔ)概念
數(shù)據(jù)庫(kù):能夠長(zhǎng)期保存,支持多用戶(hù)共享,通過(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用戶(hù)
show user ;
//顯示用戶(hù)名稱(chēng)
select * from tab ;
//顯示當(dāng)前用戶(hù)下表的情況
desc tabname ;
//顯示表結(jié)構(gòu)
select * from? tabname;
//顯示表的內(nèi)容
表結(jié)構(gòu)
1、 部門(mén)表:dept
DEPTNO 表示部門(mén)編號(hào),由兩位數(shù)字所組成
DNAME 部門(mén)名稱(chēng),最多由14個(gè)字符所組成
LOC 部門(mén)所在的位置
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 雇員所在的部門(mén)編號(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)化查詢(xún)語(yǔ)言
DQL:數(shù)據(jù)查詢(xún)語(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)隔開(kāi)
distinct: 唯一,去重復(fù)
空值問(wèn)題:空值和任何數(shù)據(jù)進(jìn)行算數(shù)運(yùn)算的結(jié)果都為空
限制查詢(xún)和排序
語(yǔ)法:
select [distinct] {*|{列名|表達(dá)式 [as] [列別名] [,...]}}
from 表名
[where 條件表達(dá)式] ;
where 作用: 限制查詢(xún)
條件表達(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:
--查詢(xún)沒(méi)有獎(jiǎng)金的人
select? ename , job ,sal,comm from emp
where comm is null
like:? 通配符:
_:一個(gè)長(zhǎng)度的任意字符
%:任意長(zhǎng)度的任意字符
escape:轉(zhuǎn)義字符
--查詢(xún)一個(gè)名字中包含S的人員信息
select * from emp
where ename? like? '%S%';
--查詢(xún)名字中倒數(shù)第二個(gè)字母是T的人員信息
select * from emp
where ename like '%T_';
between? and:
-- 查詢(xún)工資在1000到2000之間的10部門(mén)人員信息
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)一次查詢(xún)多個(gè)表的數(shù)據(jù)
--查詢(xún)smith的姓名、工資和部門(mén)名稱(chēng)
語(yǔ)法:
select [distinct] {*|{列名|表達(dá)式 [as] [列別名] [,...]}}
from 表名
[where 條件表達(dá)式]
[order? by 列名|表達(dá)式|列別名 |數(shù)字? [asc] [desc] [,...]];
內(nèi)部連接:不是外部連接的都是內(nèi)部連接
等值連接: 連接條件只用等于號(hào)
不等值連接:連接條件不只用等于號(hào)
!?。?!內(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ù)的類(lèi)型
字符函數(shù):
字符轉(zhuǎn)換:
Lower()
Upper()
initcap()
字符處理:
substr()? //字符串截取
length()? //字符的個(gè)數(shù)
concat()
instr()? //求某一個(gè)字符串在另一個(gè)字符串中的位置
lpad()? //填充
rpad()
trim()? //去掉前后空格
replace()//替換字符串
--要求查詢(xún)名字中含有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.:
-- 查詢(xún)每個(gè)員工的姓名和部門(mén)名稱(chēng)
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ì)
種類(lèi):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] [,...]];
子查詢(xún):把多個(gè)有關(guān)聯(lián)的查詢(xún)組合成一個(gè)查詢(xún),其中部分先執(zhí)行的查詢(xún)用括號(hào)括起來(lái)。
使用位置:除了group by 都可以
分類(lèi):
子查詢(xún)結(jié)果分類(lèi):
單行子查詢(xún):
子查詢(xún)返回結(jié)果為1行
多行子查詢(xún):
子查詢(xún)結(jié)果超過(guò)1行
使用 any all in
多列子查詢(xún):
子查詢(xún)使用的位置分類(lèi):
where子查詢(xún): 子查詢(xún)的作用是提供一個(gè)條件
from子查詢(xún): 作用1:可以自定義新的數(shù)據(jù)集合,經(jīng)過(guò)自己的設(shè)計(jì),完成更復(fù)雜的查詢(xún)需求
作用2:提升某些運(yùn)算的優(yōu)先級(jí)
select子查詢(xún):
相關(guān)子查詢(xún):
所在,自己,同
DML: 一切皆是查詢(xún)
? 查詢(xún):
? 增加:insert
? 刪除:delete
? 修改:update
? 刪除:把查詢(xún)語(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ù)類(lèi)型:
? ? 字符
? ? char :固定字符? ? ,效率高,容易浪費(fèi)
? ? varchar2:不固定字符 ,效率慢,節(jié)省空間
? ? 數(shù)字
? ? Number(所有數(shù)的位數(shù),小數(shù)的位數(shù))
? ? 日期
? ? Date? timstamp 支持毫秒
? ? 作業(yè):oracle :5,6,7,9所有的題
? ? 能力好一點(diǎn)的:5章嘗試用子查詢(xún), 7,9嘗試多表
? ? ? ? ? java:安裝,配置
? ? ? ? ? ? ? ? 2的10以?xún)?nèi)次冪