日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Oracle数据库深入学习

發(fā)布時(shí)間:2023/12/14 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle数据库深入学习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Oracle概念

oracle數(shù)據(jù)可系統(tǒng)是美國oracle(甲骨文)公司提供的以分布式數(shù)據(jù)庫為核心的一組軟件產(chǎn)品,是目前最流行的客戶/服務(wù)器或B/S體系結(jié)構(gòu)的數(shù)據(jù)庫之一,oracle數(shù)據(jù)庫時(shí)目前世界上使用最為廣泛的數(shù)據(jù)庫管理系統(tǒng),作為一個(gè)通用的數(shù)據(jù)庫系統(tǒng),它具有完善的數(shù)據(jù)庫管理功能,是關(guān)系型數(shù)據(jù)庫,比mysql更為龐大,在現(xiàn)行的關(guān)系型數(shù)據(jù)庫中排名第一(oracle、mysql、SqlServer),時(shí)間是最為精確的。

二、Oracle的安裝

安裝教程

三、Oracle數(shù)據(jù)庫的體系結(jié)構(gòu)

1、數(shù)據(jù)庫database

Oracle數(shù)據(jù)庫是數(shù)據(jù)的物理儲存,這就包括(數(shù)據(jù)文件ORA或者DBF、控制文件、聯(lián)機(jī)日志、參數(shù)文件)。其實(shí)Oracle數(shù)據(jù)庫的概念和其他數(shù)據(jù)庫不一樣,這里的數(shù)據(jù)庫時(shí)一個(gè)操作系統(tǒng)只有一個(gè)庫,可以看做Oracle就只有一個(gè)大數(shù)據(jù)庫。

2、實(shí)例

一個(gè)數(shù)據(jù)庫可以有n個(gè)實(shí)例,有一系列的后臺進(jìn)程和內(nèi)存結(jié)構(gòu)組成。

3、數(shù)據(jù)文件dbf

是數(shù)據(jù)庫的物理儲存單位,數(shù)據(jù)庫的數(shù)據(jù)是儲存在表空間中的,真正是在某一個(gè)或者多個(gè)數(shù)據(jù)文件中,而一個(gè)表空間可以由一個(gè)或多個(gè)數(shù)據(jù)文件組成,一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間,一旦數(shù)據(jù)文件被加入到某個(gè)表空間后,就不能刪除這個(gè)文件,如果要?jiǎng)h除某個(gè)數(shù)據(jù)文件,只能刪除其所屬于的表空間才行。

4、表空間

表空間是Oracle對物理數(shù)據(jù)庫上相關(guān)數(shù)據(jù)文件的邏輯映射,一個(gè)數(shù)據(jù)庫在邏輯上被劃分成一到若干個(gè)表空間,每個(gè)表空間包含了在邏輯上相關(guān)聯(lián)的一組結(jié)構(gòu),每個(gè)數(shù)據(jù)庫至少有一個(gè)表空間(稱之為system表空間)

每個(gè)表空間由同一磁盤上的一個(gè)或多個(gè)文件組成,這些文件叫數(shù)據(jù)文件,一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間。

5、用戶

用戶是在實(shí)例下建立的,不同實(shí)例中可以建相同名字的用戶,表的數(shù)據(jù)是由用戶放入某一個(gè)表空間的,而這個(gè)表龍劍會(huì)隨機(jī)把這些表數(shù)據(jù)進(jìn)行管理和存放的,但是表不是由表空間去查詢的,而是由用戶去查詢。

6、SCOTT和HR用戶

是Oracle幫我們建好的測試賬戶,Scott賬戶常用,里面有emp、dept表等。

四、Oracle和MYSQL的差別

1、新建項(xiàng)目的方式

MYSQL : 創(chuàng)建一個(gè)數(shù)據(jù)庫,創(chuàng)建相應(yīng)的表

2、Oracle是多用戶的, MYSQL是多數(shù)據(jù)庫的

3、Oracle安全級別要高,MYSQL開源免費(fèi)

五、基本查詢

1、SQL概念

結(jié)構(gòu)化查詢語言

2、SQL分類

DDL : 數(shù)據(jù)定義語言 create alter drop truncate
DML : 數(shù)據(jù)操縱語言 insert update delete
DCL : 數(shù)據(jù)控制語言 安全 授權(quán) grant revoke
DQL : 數(shù)據(jù)查詢語言 select from子句 where子句

在oracle中將DQL放入DML中,多了TCL:事務(wù)控制語言 commit、rollback

3、Oracle中的數(shù)據(jù)字典

所謂數(shù)據(jù)字典就是編寫sql語句,全選可以一次性執(zhí)行不報(bào)錯(cuò)

/* 1.刪除數(shù)據(jù)對象 */ -- 刪除數(shù)據(jù)表 drop table t_reply; drop table t_user; -- 刪除序列 drop sequence sq_user; drop sequence sq_reply;/* 2.創(chuàng)建數(shù)據(jù)對象 */ -- 創(chuàng)建數(shù)據(jù)表 create table t_user(u_id number(4) primary key,u_userName varchar2(40) unique not null,u_password varchar2(50) not null,u_gender number(1) check(u_gender in (0,1,2)),u_age number(3) check(u_age between 12 and 120),u_registeTime date not null ); create table t_reply(r_id number(10) primary key,r_content varchar2(500) not null,r_userId number(4) not null,foreign key(r_userId) references t_user(u_id) ); -- 創(chuàng)建序列 create sequence sq_user start with 1001; create sequence sq_reply start with 10000001;/* 3.添加測試數(shù)據(jù) */ -- 處理全新的數(shù)據(jù)表和全新的序列在使用時(shí)取不到初始值的問題 insert into t_user values(1, '1', '1', 1, 25, sysdate); insert into t_reply values(1, '1', 1); delete from t_reply; delete from t_user; commit; /*insert into t_user values(1000, 'owner', '9999', 1, 25, sysdate); insert into t_reply values(10000000, '人員召集...', 1000);*/-- 添加數(shù)據(jù) insert into t_user values(sq_user.nextval, 'admin', '9999', 1, 25, sysdate); insert into t_reply values(sq_reply.nextval, '系統(tǒng)1.0上線...', sq_user.currval);/* 4.提交 */ commit;/* 5.查詢語句 */ /*select * from t_user;select * from t_reply; */

3、查詢語句的結(jié)構(gòu)

select [列名] [*] from 表名 [where 條件] [group by 分組條件] [having 過濾] [order by 排序]

4、偽表dual

dual : oracle中的虛表 ,偽表, 主要是用來補(bǔ)齊語法結(jié)構(gòu),

比如:select 1+1 from dual; 注意:直接寫一個(gè)常量比寫 * 要高效 select count(1) from emp; select count(*) from emp;

5、別名查詢

使用as 關(guān)鍵字, 可以省略,別名中不能有特殊字符或者關(guān)鍵字, 如果有就加雙引號(比如空格)

elect ename 姓名, sal 工資 from emp; select ename "姓 名", sal 工資 from emp;

6、去除重復(fù)數(shù)據(jù) distinct

加在select和列名后面,多列去除重復(fù): 每一列都一樣才能夠算作是重復(fù)

--單列去除重復(fù) select distinct job from emp;--多列去除重復(fù)的 select distinct job,deptno from emp;

7、查詢中四則運(yùn)算

需要用到偽表dual

select 1+1 from dual; --查詢員工年薪 = 月薪* 12 select sal*12 from emp;

在Oracle 中 ,雙引號主要是別名的時(shí)候使用, 單引號是使用的值, 是字符

8、空值處理函數(shù)

注意: null值 , 代表不確定的 不可預(yù)知的內(nèi)容 , 不可以做四則運(yùn)算

1)mysql的空值處理
? ifnull(參數(shù)1, 參數(shù)2):
? 判斷參數(shù)1是否為null,
? 不為null, 則函數(shù)的結(jié)果取參數(shù)1的值
? 為null, 則取參數(shù)2的值
? if(參數(shù)1, 參數(shù)2, 參數(shù)3)
? 判斷參數(shù)1是否為null,
? 為null, 則取參數(shù)3的值
? 不為null, 則取參數(shù)2的值
? 注意if函數(shù)只能處理數(shù)值字段的空值

SELECT e.`ename` 姓名,e.`sal` 底薪,e.`comm` 獎(jiǎng)金,(e.`sal`+e.`comm`) 實(shí)發(fā),IFNULL(e.`sal`+e.`comm`, e.`sal`) 實(shí)發(fā)1,IF(e.`comm`, e.`sal`+e.`comm`, e.`sal`) 實(shí)發(fā)2 FROM emp e;

2)oracle的空值處理

nvl(參數(shù)1,參數(shù)2):如果1為null,則返回2,不為null就為1

nvl2(參數(shù)1, 參數(shù)2, 參數(shù)3)1為null,則返回,3,不為null,則返回2

decode(需要判斷的字段,
? 常量值1, 結(jié)果值1,
? 常量值2, 結(jié)果值2,
? …
? 常量值n, 結(jié)果值n,
? 默認(rèn)結(jié)果值
? )

select e.ename 姓名,e.sal 底薪,e.comm 獎(jiǎng)金,nvl(e.sal+e.comm, e.sal) 實(shí)發(fā)1,nvl2(e.comm, e.sal+e.comm, e.sal) 實(shí)發(fā)2,decode(e.comm, null, e.sal, e.sal+e.comm) 實(shí)發(fā)3 from emp e;

9、字符串拼接

  • Oracle 特有的連接符: || 拼接
  • concat(str1,str2) 函數(shù), 在mysql和Oracle中都有
--查詢員工姓名 : 姓名:SCOTT select ename from emp; --使用拼接符 select '姓名:' || ename from emp;--使用函數(shù)拼接 select concat('姓名:',ename) from emp;

六、條件查詢

條件查詢就是where后面的寫法

1、關(guān)系運(yùn)算符和排序

> >= = < <= != <> 注意:不等于既可以用!=也可以用<>但是<>效率更高

2、邏輯運(yùn)算符

and or not

3、其它運(yùn)算符

like 模糊查詢 in(set) 在某個(gè)集合內(nèi) between..and.. 在某個(gè)區(qū)間內(nèi)is null 判斷為空 is not null 判斷不為空

4、模糊查詢: like

% 匹配多個(gè)字符

_ 匹配單個(gè)字符

如果有特殊字符, 需要使用escape轉(zhuǎn)義

--查詢員工姓名中,包含%的員工信息 select * from emp where ename like '%\%%' escape '\';select * from emp where ename like '%#%%' escape '#';

5、排序order by

升序: asc ascend

降序: desc descend

排序注意null問題 : nulls first | last指定null值顯示的位置

同時(shí)排列多列, 用逗號隔開

--查詢員工信息,按照獎(jiǎng)金由高到低排序 select * from emp order by comm desc nulls last;--查詢部門編號和按照工資 按照部門升序排序, 工資降序排序 select deptno, sal from emp order by deptno asc, sal desc;

分析函數(shù):用來處理排名并列問題

rank——排名可并列,之后序號不會(huì)順眼(如2個(gè)第二,下一個(gè)是第三名)

dense_rank——排名可并列,之后序號會(huì)順眼(如2個(gè)第二,下一個(gè)是第四名)

row_number——不可并列排名

over——添加分組條件

partition—by——分組

6、分組排序

  • select 分組的條件,分組之后的條件 from 表名 group by 分組的條件 having 條件過濾
  • 在分組查詢語句的檢索內(nèi)容中, 只能出現(xiàn)分組字段和聚合函數(shù)

sql的編寫順序:
? select,from,where,group by,having,order by
sql的執(zhí)行順序:
? from,where,group by,having,select,order by…

  • where和having的區(qū)別:

    where后面不能跟聚合函數(shù),可以接單行函數(shù)
    having是在group by之后執(zhí)行,可以接聚合函數(shù)

    --分組統(tǒng)計(jì)所有部門的平均工資,找出平均工資大于1500的部門 select deptno,avg(sal) from emp group by deptno having avg(sal)>1500;--報(bào)錯(cuò),給分組之后的條件取別名的時(shí)候出錯(cuò),因?yàn)閟ql語句執(zhí)行的順序問題 select deptno,avg(sal),bb from emp group by deptno having bb>1500;

七、函數(shù)

函數(shù): 必須要有返回值

1、單行函數(shù)

對某一行中的某個(gè)值進(jìn)行處理

1)數(shù)值函數(shù)

  • 取整

    select ceil(45.926) from dual; --46 向上取整 select floor(45.926) from dual; --45 向下取整
  • 四舍五入

    round(a,b)

    b如果是正數(shù)代表取到小數(shù)點(diǎn)后b位數(shù)為止

    b如果是負(fù)數(shù)代表取到十位為止

    elect round(45.926,2) from dual; --45.93 select round(45.926,1) from dual; -- 45.9 select round(45.926,0) from dual; --46 select round(45.926,-1) from dual; --50 select round(45.926,-2) from dual; --0 select round(65.926,-2) from dual; --100
  • 截?cái)?#xff08;去尾法)

    select trunc(45.926,2) from dual; --45.92 select trunc(45.926,1) from dual; -- 45.9 select trunc(45.926,0) from dual; --45 select trunc(45.926,-1) from dual; --40 select trunc(45.926,-2) from dual; --0 select trunc(65.926,-2) from dual; --0
  • 求余

    select mod(9,3) from dual; --0 select mod(9,4) from dual; --1

2)字符函數(shù)

substr(str1,起始索引,長度) --注意: 起始索引不管寫 0 還是 1 都是從第一個(gè)字符開始截取 select substr('abcdefg',0,3) from dual; --abc select substr('abcdefg',1,3) from dual; --abcselect substr('abcdefg',2,3) from dual; --bcd--獲取字符串長度 24 28 select length('abcdefg') from dual;--去除字符左右兩邊的空格 select trim(' hello ') from dual;--替換字符串 Select replace('hello','l','a') from dual;

3) 日期函數(shù)

-查詢今天的日期(查詢的是服務(wù)器上的日期) select sysdate from dual; --查詢3個(gè)月后的今天的日期 select add_months(sysdate,3) from dual; --查詢3天后的日期 select sysdate + 3 from dual;--查詢員工入職的天數(shù) select sysdate - hiredate from emp;select ceil(sysdate - hiredate) from emp;--查詢員工入職的周數(shù) select (sysdate - hiredate)/7 from emp;--查詢員工入職的月數(shù) select months_between(sysdate,hiredate) from emp;--查詢員工入職的年份 select months_between(sysdate,hiredate)/12 from emp;

4) 轉(zhuǎn)換函數(shù)

數(shù)值轉(zhuǎn)字符

select to_char(sal,'$9,999.99') from emp;select to_char(sal,'L9,999.99') from emp; /* to_char(1210.73, '9999.9') 返回 '1210.7' to_char(1210.73, '9,999.99') 返回 '1,210.73' to_char(1210.73, '$9,999.00') 返回 '$1,210.73' to_char(21, '000099') 返回 '000021' to_char(852,'xxxx') 返回' 354'*/

日期轉(zhuǎn)字符 to_char() (不區(qū)分大小寫)

select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual; select to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') from dual; --默認(rèn)的是24小時(shí)制度 --只想要年 select to_char(sysdate,'yyyy') from dual; --2017--只想要日 select to_char(sysdate,'d') from dual; --2 代表一個(gè)星期中第幾天(美國周天是一個(gè)星期的第一天) select to_char(sysdate,'dd') from dual; --10 代表一個(gè)月中的第幾天 select to_char(sysdate,'ddd') from dual; --100 代表一年中的第幾天select to_char(sysdate,'day') from dual; --monday(星期的英文) select to_char(sysdate,'dy') from dual; --mon 星期的簡寫

字符轉(zhuǎn)日期

select to_date('2017-04-10','yyyy-mm-dd') from dual;--查詢1981年 -- 1985年入職的員工信息 select * from emp where hiredate between to_date('1981','yyyy') and to_date('1985','yyyy');

5) 通用函數(shù)

nvl(參數(shù)1,參數(shù)2) 如果參數(shù)1 = null 就返回參數(shù)2nvl2(參數(shù)1,參數(shù)2,參數(shù)3) 如果參數(shù)1 = null ,就返回參數(shù)3, 否則返回參數(shù)2nullif(參數(shù)1,參數(shù)2) 如果參數(shù)1 = 參數(shù)2 那么就返回 null , 否則返回參數(shù)1coalesce: 返回第一個(gè)不為null的值select nvl2(null,5,6) from dual; --6;select nvl2(1,5,6) from dual; --5;select nullif(5,6) from dual; --5 select nullif(6,6) from dual; --nullselect coalesce(null,null,3,5,6) from dual; --3

2、多行函數(shù)(聚合函數(shù))

對某一列的所有行進(jìn)行處理

max() min count sum avg

注意:直接忽略空值

例子:

--統(tǒng)計(jì)員工的平均獎(jiǎng)金 550 錯(cuò)誤 2200/14 =,因?yàn)榭罩诞a(chǎn)生的影響 select avg(comm) from emp; --統(tǒng)計(jì)員工的平均獎(jiǎng)金 157. select sum(comm)/count(1) from emp; select ceil(sum(comm)/count(1)) from emp;

3、條件表達(dá)式

作用:查詢的時(shí)候用來替換列中所有數(shù)據(jù)的值,區(qū)別于取別名,取別名只是單純的給子彈取別名

/* 條件表達(dá)式:case 字段when 值1 then 值when 值2 then 值else默認(rèn)值end "別名" case、when通用的寫法,mysql和oracle中都可以用oracle特有的寫法:decode(字段,if1,then1,if2,then2,else1) */ --給表中姓名取一個(gè)中文名 select case enamewhen 'SMITH' then '劉備小二'when 'ALLEN' then '薩達(dá)'else '路人甲'end "中文名" from emp;--oracle 特有寫法 select decode(ename,'SMITH','劉備小二','ALLEN','薩達(dá)','路人甲') from emp;

八、多表查詢

1、笛卡爾積

實(shí)際上是兩張表的乘積,但是在實(shí)際開發(fā)中沒有太大意義,格式: select * from 表1,表2

select * from emp; select * from dept;select * from emp, dept;select * from emp e1, dept d1 where e1.deptno = d1.deptno;

2、內(nèi)連接

隱式內(nèi)聯(lián)接:
? 等值內(nèi)聯(lián)接: where e1.deptno = d1.deptno;
? 不等值內(nèi)聯(lián)接: where e1.deptno <> d1.deptno;
? 自聯(lián)接: 自己連接自己
顯式內(nèi)聯(lián)接:
? select * from 表1 inner join 表2 on 連接條件
? inner 關(guān)鍵字可以省略

--查詢員工編號,員工姓名,經(jīng)理的編號,經(jīng)理的姓名 select e1.empno,e1.ename,e1.mgr,m1.ename from emp e1, emp m1 where e1.mgr= m1.empno;--查詢員工編號,員工姓名,員工的部門名稱,經(jīng)理的編號,經(jīng)理的姓名 select e1.empno,e1.ename,d1.dname,e1.mgr,m1.ename from emp e1, emp m1,dept d1 where e1.mgr= m1.empno and e1.deptno = d1.deptno;--查詢員工編號,員工姓名,員工的部門名稱,經(jīng)理的編號,經(jīng)理的姓名,經(jīng)理的部門名稱 select e1.empno,e1.ename,d1.dname,e1.mgr,m1.ename,d2.dname from emp e1, emp m1,dept d1,dept d2 where e1.mgr= m1.empno and e1.deptno = d1.deptnoand m1.deptno = d2.deptno ;--查詢員工編號,員工姓名,員工的部門名稱,員工的工資等級,經(jīng)理的編號,經(jīng)理的姓名,經(jīng)理的部門名稱 select e1.empno,e1.ename,d1.dname,s1.grade,e1.mgr,m1.ename,d2.dname from emp e1, emp m1,dept d1,dept d2,salgrade s1 where e1.mgr= m1.empno and e1.deptno = d1.deptnoand m1.deptno = d2.deptnoand e1.sal between s1.losal and s1.hisal ;--查詢員工編號,員工姓名,員工的部門名稱,員工的工資等級,經(jīng)理的編號,經(jīng)理的姓名,經(jīng)理的部門名稱,經(jīng)理的工資等級 select e1.empno,e1.ename,d1.dname,s1.grade,e1.mgr,m1.ename,d2.dname,s2.grade from emp e1, emp m1,dept d1,dept d2,salgrade s1,salgrade s2 where e1.mgr= m1.empno and e1.deptno = d1.deptnoand m1.deptno = d2.deptnoand e1.sal between s1.losal and s1.hisal and m1.sal between s2.losal and s2.hisal ;--查詢員工編號,員工姓名,員工的部門名稱,員工的工資等級,經(jīng)理的編號,經(jīng)理的姓名,經(jīng)理的部門名稱,經(jīng)理的工資等級 --將工資等級 1,2,3,4 顯示成 中文的 一級 二級 三級...select e1.empno,e1.ename,d1.dname,case s1.gradewhen 1 then '一級'--為所有列更換成你想要的信息when 2 then '二級'when 3 then '三級'when 4 then '四級'else'五級'end "等級",--取別名e1.mgr,m1.ename,d2.dname,decode(s2.grade,1,'一級',2,'二級',3,'三級',4,'四級','五級') "等級" from emp e1, emp m1,dept d1,dept d2,salgrade s1,salgrade s2 where e1.mgr= m1.empno and e1.deptno = d1.deptnoand m1.deptno = d2.deptnoand e1.sal between s1.losal and s1.hisal and m1.sal between s2.losal and s2.hisal ;--查詢員工姓名和員工部門所處的位置 select e1.ename,d1.loc from emp e1,dept d1 where e1.deptno = d1.deptno;select * from emp e1 inner join dept d1 on e1.deptno = d1.deptno;

2、外連接

外連接: (標(biāo)準(zhǔn),通用寫法)
? 左外連接: left outer join 左表中所有的記錄,如果右表沒有對 應(yīng)記錄,就顯示空
? 右外連接: right outer join 右表中的所有記錄,如果左表沒有對應(yīng)記錄,就顯示空
? outer 關(guān)鍵字可以省略
Oracle中的外連接: (+) 實(shí)際上是如果沒有對應(yīng)的記錄就加上空值
? select * from emp e1,dept d1 where e1.deptno = d1.deptno(+);

select * from emp e1 left outer join dept d1 on e1.deptno = d1.deptno; insert into emp(empno,ename) values(9527,'HUAAN'); select * from emp e1,dept d1 where e1.deptno = d1.deptno(+);select * from emp e1 right outer join dept d1 on e1.deptno = d1.deptno; select * from emp e1,dept d1 where e1.deptno(+) = d1.deptno;

九、子查詢

查詢語句中嵌套查詢語句; 用來解決復(fù)雜的查詢語句

1、單行子查詢

= = < <= <> !=

--查詢最高工資的員工信息 --1.查詢出最高工資 --5000 select max(sal) from emp; --2. 工資等于最高工資 select * from emp where sal = (select max(sal) from emp);--查詢出比雇員7654的工資高,同時(shí)和7788從事相同工作的員工信息 --1.雇員7654的工資 1250 select sal from emp where empno = 7654; --2.7788從事的工作 ANALYST select job from emp where empno = 7788; --3.兩個(gè)條件合并 select * from emp where sal > 1250 and job = 'ANALYST';select * from emp where sal > (select sal from emp where empno = 7654) and job = (select job from emp where empno = 7788);--查詢每個(gè)部門最低工資的員工信息和他所在的部門信息 --1.查詢每個(gè)部門的最低工資,分組統(tǒng)計(jì) select deptno,min(sal) minsal from emp group by deptno; --2.員工工資等于他所處部門的最低工資 select * from emp e1,(select deptno,min(sal) minsal from emp group by deptno) t1 --將查詢到的結(jié)果作為一張表進(jìn)行兩表連查 where e1.deptno = t1.deptno and e1.sal = t1.minsal; --3.查詢部門相關(guān)信息 select * from emp e1,(select deptno,min(sal) minsal from emp group by deptno) t1,dept d1 where e1.deptno = t1.deptno and e1.sal = t1.minsal and e1.deptno = d1.deptno;

2、多行子查詢

in not in >any >all exists not exists

通常情況下, 數(shù)據(jù)庫中不要出現(xiàn)null 最好的做法加上Not null
? null值并不代表不占空間, char(100) null 100個(gè)字符

--查詢不是領(lǐng)導(dǎo)的信息 select * from emp where empno not in (select mgr from emp); select * from emp where empno <>all(select mgr from emp); --正確的寫法 select * from emp where empno not in (select mgr from emp where mgr is not null);

3、exists(查詢語句)

存在的意思,判斷一張表里面的記錄是否存在與另外一張表中,作布爾值來處理:, 當(dāng)查詢語句有結(jié)果的時(shí)候, 就是返回true,否則返回的是false,數(shù)據(jù)量比較大的時(shí)候是非常高效的

--查詢有員工的部門的信息 select * from dept d1 where exists(select * from emp e1 where e1.deptno = d1.deptno );

十、分頁

Oracle的分頁查詢需要使用偽列輔助

偽列 : 在Oracle的結(jié)果集中默認(rèn)帶有的可以使用的
? 不出現(xiàn)在結(jié)果集列中的內(nèi)容.
? rownum : 偽列序號, 從1開始
? rowid : 偽列地址

SQL執(zhí)行順序
? from … where …group by…h(huán)aving … select…rownum…order by

默認(rèn)都是從1開始。

rownum按照員工id排序后再分頁 select t.* from (select rownum rn,e.*from (select *from emp order by empno) e) t where t.rn between 5 and 9; rowid去除表中重復(fù)數(shù)據(jù) create table p(name varchar2(10) );insert into p values('黃偉福'); insert into p values('趙洪'); insert into p values('楊華');delete from p where select rowid,p.* from p; select distinct * from p;delete from p p1 where rowid > (select min(rowid) from p p2 where p1.name = p2.name);

十一、集合運(yùn)算

所有的查詢結(jié)果可能不是來自同一張表, 將查詢結(jié)果進(jìn)行合并,并去除重復(fù)項(xiàng)

1、并集

union : 去除重復(fù)的,并且排序

union all : 不會(huì)去除重復(fù)的

select * from emp where sal > 1500 union select * from emp where deptno = 20;select * from emp where sal > 1500 union all select * from emp where deptno = 20;

2、交集運(yùn)算: intersect

--工資大于1500,并且20號部門下的員工 select * from emp where sal > 1500; select * from emp where deptno = 20;select * from emp where sal > 1500 intersect select * from emp where deptno = 20;

3、差集運(yùn)算

兩個(gè)結(jié)果相減

--1981年入職員工(不包括總裁和經(jīng)理) --1981年入職員工 select * from emp where to_char(hiredate,'yyyy')='1981';--總裁和經(jīng)理 select * from emp where job = 'PRESIDENT' or job = 'MANAGER';select * from emp where to_char(hiredate,'yyyy')='1981' minus select * from emp where job = 'PRESIDENT' or job = 'MANAGER';

4、集合運(yùn)算中的注意事項(xiàng)

1.列的類型要一致
2.按照順序?qū)?br /> 3.列的數(shù)量要一致,如果不足,用空值填充

select ename,sal from emp where sal > 1500 union select ename,sal from emp where deptno = 20; --列的類型不匹配 select ename,sal from emp where sal > 1500 union select sal,ename from emp where deptno = 20;--列的數(shù)量不匹配 select ename,sal,deptno from emp where sal > 1500 union select ename,sal from emp where deptno = 20;select ename,sal,deptno from emp where sal > 1500 union select ename,sal,null from emp where deptno = 20;select ename,sal,deptno from emp where sal > 1500 union select ename,sal,66 from emp where deptno = 20;select * from emp; select * from dept;

十二、DDL語句管理表

1、表空間

邏輯單位, 通常我們新建一個(gè)項(xiàng)目,就會(huì)去新建表空間,在表空間中創(chuàng)建用戶來創(chuàng)建表

  • 創(chuàng)建表空間

    語法:
    ? create tablespace 表空間的名稱
    ? datafile ‘文件的路徑(服務(wù)器上)’
    ? size 大小
    ? autoextend on 自動(dòng)擴(kuò)展
    ? next 每次擴(kuò)展的大小

    --創(chuàng)建表空間- create tablespace canghe datafile 'C:\oracle\canghe.dbf' size 100m autoextend on next 10m;
  • 刪除表空間

--刪除表空間 drop tablespace canghe;

2、創(chuàng)建用戶

create user 用戶名
identified by 密碼
default tablespace 表空間的名稱

create user canghe identified by canghe default tablespace canghe;
  • 授權(quán)
--授予 dba的角色 grant dba to canghe; select * from scott.emp;

3、創(chuàng)建表

create table 表名(
? 列名 列的類型 [列的約束],
? 列名 列的類型 [列的約束]
? );

列的類型: varchar ,在Oracle中,目前是支持的, 但是不保證以后還支持 varchar2(長度) 可變字符長度 varchar2(10) hello 占5個(gè)字符char(長度) 固定長度字符 char(10) hello 占10個(gè)字符,用空格填充number(總長度,小數(shù)長度) 數(shù)字類型 --小數(shù)長度不能大于等于總長度date 年月日時(shí)分秒 2017/4/13 9:43:49timestamp 時(shí)間戳, 比date類型更加精確 13-APR-17 09.44.08.272000 AM +08:00LONG/CLOB : 存放一本小說BLOB : 存放電影 java 存進(jìn)去, 再讀取出來 使用子查詢的方式創(chuàng)建表create table 表名 as 查詢語句; 注意: 只會(huì)復(fù)制表結(jié)構(gòu)和表中的數(shù)據(jù),不會(huì)復(fù)制列的約束 如果查詢語句有結(jié)果, 就是復(fù)制 表結(jié)構(gòu)和數(shù)據(jù)如果查詢語句沒有結(jié)果, 就是復(fù)制 表結(jié)構(gòu) create table test1(name1 varchar2(10),name2 char(10),age number(4,2) ); create table 表名 as 查詢語句; 復(fù)制表 create table emp as select * from scott.emp;

4、修改表

  • 添加咧

    alter table 表名 add 列

  • 修改列

    修改列類型:modify

    修改列名:rename

  • 刪除咧

    alter table 表名 drop column 列名;

  • 修改列名

    alter table 表名 rename column 列名;

  • 重命名表

    rename 舊表名 to 新表名;

5、刪除表

drop table 表名

6、表的五大約束

  • 主鍵約束

    primary key

  • 非空約束

    not null

  • 唯一約束

    unique

  • 外鍵約束

    添加外鍵約束:

    alter table 表名 add foreign key(添加約束的字段) references 引用的表名 (引用的字段)

    插入:先主表、再從表

    刪除:先從表,再主表

    強(qiáng)制刪除表(不建議):

    drop table 表名 cascade constraint;

    級聯(lián)刪除:

    添加外鍵約束,使用級聯(lián)約束 ,在刪除的時(shí)候,使用級聯(lián)刪除

    ----添加外鍵約束,使用級聯(lián)約束 ,在刪除的時(shí)候,使用級聯(lián)刪除 alter table product add foreign key(cno) references category(cid) on delete cascade;insert into category values(2,'電腦辦公'); insert into product values(11,'外星人',2);--級聯(lián)刪除 : 首先去從表中找有沒有 關(guān)聯(lián)數(shù)據(jù), 如果在從表中找到關(guān)聯(lián)數(shù)據(jù),先刪除從表中關(guān)聯(lián)數(shù)據(jù),然后再刪除表中的數(shù)據(jù) delete from category where cid = 2;
  • 檢查約束

    check( 列名 in (‘值1’,‘值2’,‘值3’))

  • 十三、DML管理表數(shù)據(jù)

    1、插入數(shù)據(jù)

    • 指定列名插入

      insert into 表名 values(所有列的值都要對應(yīng)寫上)

    • 不指定列名插入

      insert into 表名(列1,列2) values(值1,值2);

    • 使用子查詢插入

      insert into 表名 查詢語句

    2、修改數(shù)據(jù)

    update 表名 set 列名 = 列的值 [where 條件]

    3、刪除數(shù)據(jù)

    delete from 表名 [where 條件]

    deletetruncate 區(qū)別delete: truncate:DML DDL逐條刪除 先刪除表再創(chuàng)建表支持事務(wù)操作 不支持事務(wù)操作,執(zhí)行效率要高

    十四、其他數(shù)據(jù)庫對象

    1、事務(wù)

    事務(wù): 就是一系列的操作,要么都成功,要么都失敗
    ? 四大特性: 原子性,隔離性,持久性,一致性
    ?

    如果不考慮隔離級別: 臟讀,虛讀,不可重復(fù)讀MYSQL隔離級別: READ UNCOMMITTED , READ COMMITTED, REPEATABLE READ, SERIALIAZABLEORACLE隔離級別: READ COMMITTED SERIALIZABLE READ ONLY 默認(rèn)隔離級別: READ COMMITTED提交 : commit事務(wù)的保存點(diǎn)/回滾點(diǎn): savepoint 保存點(diǎn)的名稱回滾: rollback

    2、視圖

    視圖: 是對查詢結(jié)果的一個(gè)封裝
    ? 視圖里面所有的數(shù)據(jù),都是來自于它查詢的那張表,視圖本身不存儲任何數(shù)據(jù)
    ? 1.能夠封裝復(fù)雜的查詢結(jié)果
    ? 2.屏蔽表中的細(xì)節(jié)
    ? 語法:
    ? create [or replace] view 視圖的名稱 as 查詢語句 [ with read only]
    ? 注意: 通常不要通過視圖去修改,視圖創(chuàng)建的時(shí)候,通常要加上with read only

    --創(chuàng)建一個(gè)視圖 create or replace view view_test1 as select ename,job,mgr from emp;--通過視圖修改數(shù)據(jù) update view_test1 set ename='SMITH2' where ename = 'SMITH';--創(chuàng)建一個(gè)只讀視圖 create or replace view view_test2 as select ename,job,mgr from emp with read only;update view_test2 set ename='SMITH3' where ename = 'SMITH2';

    -同義詞的概念(就是為視圖取的一個(gè)別名)
    create synonym dept for view_test3;

    3、序列

    oracle中用來控制自增長的

    語法:create sequence 序列的名稱start with 從幾開始increment by 每次增長多少maxvalue 最大值 | nomaxvalueminvalue 最小值 | nominvaluecycle | nocycle 是否循環(huán) 1,2,3,1,2,3cache 緩存的數(shù)量3 | nocache 1,2,3,4,5,6 如何從序列獲取值currval : 當(dāng)前值nextval : 下一個(gè)值注意: currval 需要在調(diào)用nextval之后才能使用 永不回頭,往下取數(shù)據(jù), 無論發(fā)生異常, 回滾 --序列用的最多的一種寫法 create sequence seq_test2; select seq_test2.nextval from dual;

    4、索引

    索引:相當(dāng)于是一本書的目錄,能夠提高我們的查詢效率如果某一列,你經(jīng)常用來作為查詢條件,那么就有必要?jiǎng)?chuàng)建索引,數(shù)據(jù)量比較的情況語法: create index 索引的名稱 on 表名(列) 注意:主鍵約束自帶主鍵索引, 唯一約束自帶唯一索引索引原理: btree balance Tree 平衡二叉樹如果某列作為查詢條件的時(shí)候,可以提高查詢效率,但是修改的時(shí)候,會(huì)變慢索引創(chuàng)建好之后,過了一段,DBA都會(huì)去做重構(gòu)索引SQL調(diào)優(yōu):1.查看執(zhí)行計(jì)劃F52. 分析里面的cost 和 影響行數(shù), 想辦法降低

    十五、PLSQL編程

    1、概述

    procedure Language 過程語言 Oracle對SQL的一個(gè)擴(kuò)展
    ? 讓我們能夠像在java中一樣寫 if else else if 條件, 還可以編寫循環(huán)邏輯 for while

    2、基本語法

    declare--聲明變量變量名 變量類型;變量名 變量類型 := 初始值;vsal emp.sal%type; --引用型的變量 vrow emp%rowtype; --聲明記錄型變量 begin--業(yè)務(wù)邏輯,比如輸出一句話:dbms_output.put_line()相當(dāng)于java中 syso end; declarei varchar2(10) := '張三'; begindbms_output.put_line(i); end;

    3、變量

    %type --引用型變量

    %rowtype --記錄型變量

    4、PL條件判斷

    if thenelsif thenelse end if; declareage number := &aaa; beginif age < 18 thendbms_output.put_line('小屁孩');elsif age>=18 and age <=24 thendbms_output.put_line('年輕人');elsif age>24 and age < 40 thendbms_output.put_line('老司機(jī)');else dbms_output.put_line('老年人'); end if; end;

    5、循環(huán)操作

    while 循環(huán)while 條件 loopend loop;for循環(huán)for 變量 in [reverse] 起始值..結(jié)束值 loopend loop;loop循環(huán) loopexit when 條件end loop; --輸出1~10 declarei number :=1; beginwhile i<=10 loopdbms_output.put_line(i);i := i+1; end loop; end;--輸出1~10 declarebeginfor i in reverse 1..10 loopdbms_output.put_line(i);end loop; end;--輸出1~10 declarei number :=1; beginloopexit when i>10;dbms_output.put_line(i); i := i+1;end loop; end;/************** 輸出 m x : [-m,m]y : [-m,m]輸出所有滿足條件的 : abs(y)+abs(x) <=mm取值 */ --使用PLSQL輸出菱形 declarem number := 10; beginfor x in -m..m loopfor y in -m..m loopif abs(y) + abs(x) <= m thendbms_output.put('*');elsedbms_output.put(' ');end if; end loop;dbms_output.new_line();end loop; end;--使用PLSQL輸出三角形,只要是三個(gè)角 declarem number := 10; beginfor x in reverse -m..m loopfor y in -m..m loopif abs(y) + abs(x) <= m and x>=0 thendbms_output.put('*');elsedbms_output.put(' ');end if; end loop;dbms_output.new_line();end loop; end;

    十六、游標(biāo)

    用來操作查詢的結(jié)果集.相當(dāng)于JDBC中的ResultSe

    語法: cursor 游標(biāo)名[(參數(shù)名 參數(shù)類型)] is 查詢結(jié)果集開發(fā)步驟:1. 聲明游標(biāo)2. 打開游標(biāo) open 游標(biāo)名3. 從游標(biāo)中取數(shù)據(jù) fetch 游標(biāo)名 into 變量游標(biāo)名%found :找到數(shù)據(jù)游標(biāo)名%notfound : 沒有找到數(shù)據(jù) 4. 關(guān)閉游標(biāo) close 游標(biāo)名系統(tǒng)引用游標(biāo)1. 聲明游標(biāo) : 游標(biāo)名 sys_refcursor2. 打開游標(biāo): open 游標(biāo)名 for 結(jié)果集3. 從游標(biāo)中取數(shù)據(jù)4. 關(guān)閉游標(biāo)for循環(huán)遍歷游標(biāo):不需要聲明額外變量不需要打開游標(biāo)不需要關(guān)閉游標(biāo)

    1、不帶參數(shù)游標(biāo)

    */ --輸出員工表中所有的員工姓名和工資(不帶參數(shù)游標(biāo)) /*游標(biāo):所有員工聲明一個(gè)變量,用來記錄一行數(shù)據(jù) %rowtype */ declare--游標(biāo)cursor vrows is select * from emp;--s聲明變量,記錄一行數(shù)據(jù)vrow emp%rowtype; begin--1.打開游標(biāo) open vrows;--2.從游標(biāo)提取數(shù)據(jù)--循環(huán)取數(shù)據(jù)loopfetch vrows into vrow; exit when vrows%notfound; dbms_output.put_line('姓名:'||vrow.ename ||' 工資: ' || vrow.sal);end loop;--3.關(guān)閉游標(biāo)close vrows; end;

    2、帶參數(shù)的游標(biāo)

    --輸出指定部門下的員工姓名和工資 /*游標(biāo): 指定部門的所有員工聲明一個(gè)變量記錄一行數(shù)據(jù) */ declare--聲明游標(biāo)cursor vrows(dno number) is select * from emp where deptno = dno;--聲明變量vrow emp%rowtype; begin--1.打開游標(biāo) , 指定10號部門open vrows(10);--2. 循環(huán)遍歷,取數(shù)據(jù)loopfetch vrows into vrow;exit when vrows%notfound; dbms_output.put_line('姓名:'||vrow.ename ||' 工資: ' || vrow.sal);end loop;close vrows; end;

    3、系統(tǒng)引用游標(biāo)

    --輸出員工表中所有的員工姓名和工資 declare--聲明系統(tǒng)引用游標(biāo)vrows sys_refcursor;--聲明一個(gè)變量vrow emp%rowtype; begin--1.打開游標(biāo)open vrows for select * from emp;--2.取數(shù)據(jù)loopfetch vrows into vrow;exit when vrows%notfound;dbms_output.put_line('姓名:'||vrow.ename ||' 工資: ' || vrow.sal);end loop;close vrows; end;

    4、-使用for循環(huán)遍歷游標(biāo)

    --按照員工工作給所有員工漲工資,總裁漲1000,經(jīng)理漲800,其他人漲400 /*游標(biāo) : 所有員工聲明一個(gè)記錄一行數(shù)據(jù) */ declare--聲明游標(biāo)cursor vrows is select * from emp;--聲明一個(gè)變量vrow emp%rowtype; begin--1.打開游標(biāo)open vrows;--2.循環(huán)取數(shù)據(jù)loop--取數(shù)據(jù)fetch vrows into vrow;--退出條件exit when vrows%notfound; --根據(jù)不同的職位,漲工資 總裁漲1000,經(jīng)理漲800,其他人漲400if vrow.job = 'PRESIDENT' thenupdate emp set sal = sal + 1000 where empno = vrow.empno;elsif vrow.job = 'MANAGER' thenupdate emp set sal = sal + 800 where empno = vrow.empno;elseupdate emp set sal = sal + 400 where empno = vrow.empno; end if; end loop;--3.關(guān)閉游標(biāo)close vrows;--4.提交事務(wù)commit; end;

    十七、例外

    例外:(意外)程序運(yùn)行的過程發(fā)生異常,相當(dāng)于是JAVA中的異常

    declare--聲明變量begin--業(yè)務(wù)邏輯exception--處理異常when 異常1 then...when 異常2 then...when others then...處理其它異常end;zero_divide : 除零異常value_error : 類型轉(zhuǎn)換異常too_many_rows : 查詢出多行記錄,但是賦值給了rowtype記錄一行數(shù)據(jù)變量no_data_found : 沒有找到數(shù)據(jù)自定義異常:異常名 exception;raise 異常名 --查詢指定編號的員工,如果沒有找到,則拋出自定義的異常 /*--錯(cuò)誤的演示1.聲明一個(gè)變量 %rowtype2.查詢員工信息,保存起來3.判斷員工信息是否為空4. 如果是 則拋出異常 */ declare-- 1.聲明一個(gè)變量 %rowtypevrow emp%rowtype;--2 .聲明一個(gè)自定義的異常no_emp exception; begin--查詢員工信息,保存起來select * into vrow from emp where empno = 8888; --拋出異常if vrow.sal is null thenraise no_emp; --拋出自定義的異常end if; exceptionwhen no_emp thendbms_output.put_line('輸出了自定義的異常'); when others thendbms_output.put_line('輸出了其它異常'||sqlerrm); end;--查詢指定編號的員工,如果沒有找到,則拋出自定義的異常 /*游標(biāo)來判斷%found %notfound聲明一個(gè)游標(biāo)聲明一個(gè)變量,記錄數(shù)據(jù)從游標(biāo)中取記錄如果有,則不管它如果沒有就拋出自定義的異常 */ declare--聲明游標(biāo)cursor vrows is select * from emp where empno=8888; --聲明一個(gè)記錄型變量vrow emp%rowtype;--聲明一個(gè)自定義異常no_emp exception; begin--1.打開游標(biāo)open vrows;--2.取數(shù)據(jù)fetch vrows into vrow;--3.判斷游標(biāo)是否有數(shù)據(jù)if vrows%notfound thenraise no_emp;end if;close vrows; exceptionwhen no_emp thendbms_output.put_line('發(fā)生了自定義的異常'); end;

    十八、存儲過程

    存儲過程: 實(shí)際上是封裝在服務(wù)器上一段PLSQL代碼片斷,已經(jīng)編譯好了的代碼1.客戶端取調(diào)用存儲過程,執(zhí)行效率就會(huì)非常高效語法:create [or replace] procedure 存儲過程的名稱(參數(shù)名 in|out 參數(shù)類型,參數(shù)名 in|out 參數(shù)類型)is | as--聲明部分begin--業(yè)務(wù)邏輯 end; */ --給指定員工漲薪,并打印漲薪前和漲薪后的工資 /*參數(shù) : in 員工編號參數(shù) : in 漲多少聲明一個(gè)變量 : 存儲漲工資前的工資查詢出當(dāng)前是多少打印漲薪前的工資更新工資打印漲薪后的工資 */ create or replace procedure proc_updatesal(vempno in number,vnum in number) is--聲明變量.記錄當(dāng)前工資vsal number; begin--查詢當(dāng)前的工資select sal into vsal from emp where empno = vempno;--輸出漲薪前的工資dbms_output.put_line('漲薪前:'||vsal);--更新工資update emp set sal = vsal + vnum where empno = vempno;--輸出漲薪后的工資dbms_output.put_line('漲薪后:'||(vsal+vnum));--提交commit; end;--調(diào)用方式1 call proc_updatesal(7788,10);--調(diào)用方式2 用的最多的方式 declarebeginproc_updatesal(7788,-100); end;

    十九、存儲函數(shù)

    1、基本語法和例子

    存儲函數(shù): 實(shí)際上是一段封裝是Oracle服務(wù)器中的一段PLSQL代碼片斷,它是已經(jīng)編譯好了的代碼片段
    ?

    語法: create [or replace] function 存儲函數(shù)的名稱(參數(shù)名 in|out 參數(shù)類型,參數(shù)名 in|out 參數(shù)類型) return 參數(shù)類型is | asbeginend;存儲過程和函數(shù)的區(qū)別:1.它們本質(zhì)上沒有區(qū)別2.函數(shù)存在的意義是給過程調(diào)用 存儲過程里面調(diào)用存儲函數(shù)3.函數(shù)可以在sql語句里面直接調(diào)用4.存儲過程能實(shí)現(xiàn)的,存儲函數(shù)也能實(shí)現(xiàn),存儲函數(shù)能實(shí)現(xiàn)的,過程也能實(shí)現(xiàn)默認(rèn)是 in */ --查詢指定員工的年薪 /*參數(shù) : 員工的編號返回 : 年薪 */ create or replace function func_getsal(vempno number) return number is--聲明變量.保存年薪vtotalsal number; beginselect sal*12 + nvl(comm,0) into vtotalsal from emp where empno = vempno;return vtotalsal; end;--調(diào)用存儲函數(shù) declarevsal number; beginvsal := func_getsal(7788);dbms_output.put_line(vsal); end;

    2、java調(diào)用存儲過程、存儲函數(shù)

    1)基本套路

    /*JAVA調(diào)用存儲過程JDBC的開發(fā)步驟:1.導(dǎo)入驅(qū)動(dòng)包2.注冊驅(qū)動(dòng)3.獲取連接4.獲取執(zhí)行SQL的statement5.封裝參數(shù)6.執(zhí)行SQL7.獲取結(jié)果8.釋放資源 *//*封裝一個(gè)存儲過程 : 輸出所有表中的記錄輸出類型 : 游標(biāo) */ create or replace procedure proc_getemps(vrows out sys_refcursor) isbegin--1.打開游標(biāo), 給游標(biāo)賦值open vrows for select * from emp; end;

    2)調(diào)用存儲過程

    /*** 查詢指定員工的年薪,用存儲過程實(shí)現(xiàn)* create or replace procedure proc_gettotalsal(vempno in number,vtotalsal out number)isbeginselect sal*12 + nvl(comm,0) into vtotalsal from emp where empno = vempno;end;* @throws Exception*/public void test1() throws Exception {//注冊驅(qū)動(dòng)Class.forName("oracle.jdbc.driver.OracleDriver");//獲取連接String url="jdbc:oracle:thin:@106.13.43.205:1521:orcl";String user="canghe";String password="canghe";Connection conn = DriverManager.getConnection(url, user, password);//獲取執(zhí)行對象String sql="{call proc_gettotalsal(?,?)}";CallableStatement state = conn.prepareCall(sql);//為問號賦值state.setInt(1, 7654);//設(shè)置員工編號state.registerOutParameter(2, OracleTypes.NUMBER);//執(zhí)行statementstate.execute();//獲取結(jié)果int totle = state.getInt(2);//輸出結(jié)果System.out.println(totle);//釋放資源state.close();conn.close();}

    3)調(diào)用存儲函數(shù)

    //調(diào)用存儲函數(shù)/*create or replace function func_getsal(vempno number) return numberis--聲明變量.保存年薪vtotalsal number; beginselect sal*12 + nvl(comm,0) into vtotalsal from emp where empno = vempno;return vtotalsal;end; */ public void test2() throws Exception{//注冊驅(qū)動(dòng)Class.forName("oracle.jdbc.driver.OracleDriver");//2.獲取連接String url = "jdbc:oracle:thin:@106.13.43.205:1521:orcl";String username = "canghe";String password = "canghe";Connection conn = DriverManager.getConnection(url, username,password);//3.獲取執(zhí)行SQL的statementString sql = " {?= call func_getsal(?)}";CallableStatement state = conn.prepareCall(sql);//4.封裝參數(shù)//注冊返回類型參數(shù)state.registerOutParameter(1, OracleTypes.NUMBER);//設(shè)置第二個(gè)參數(shù)state.setInt(2, 7788);//5.執(zhí)行SQLstate.execute(); //6.獲取結(jié)果int totalsal = state.getInt(1);System.out.println("年薪 : ====" +totalsal); //7.釋放資源state.close();conn.close();}

    3)通過游標(biāo)輸出結(jié)果集

    /*** 通過游標(biāo)輸出結(jié)果集* @throws Exception*/public void test3() throws Exception{//注冊驅(qū)動(dòng)Class.forName("oracle.jdbc.driver.OracleDriver");//2.獲取連接String url = "jdbc:oracle:thin:@106.13.43.205:1521:orcl";String username = "canghe";String password = "canghe";Connection conn = DriverManager.getConnection(url, username,password);//3.獲取執(zhí)行SQL的statementString sql = "{call proc_getemps(?)}";CallableStatement call = conn.prepareCall(sql);//接口 --- > 對象 -->實(shí)現(xiàn)類的名稱System.out.println(call.getClass().getName());OracleCallableStatement oracleCall = (OracleCallableStatement)call;//4.注冊輸出類型的參數(shù)call.registerOutParameter(1, OracleTypes.CURSOR);//5.執(zhí)行SQLcall.execute();//6.獲取執(zhí)行的結(jié)果ResultSet resultSet = oracleCall.getCursor(1);while(resultSet.next()){int empno = resultSet.getInt("empno");String name = resultSet.getString("ename");System.out.println(empno +" ==== "+name);}//7.釋放資源resultSet.close();call.close();conn.close();}

    二十、觸發(fā)器

    觸發(fā)器: 當(dāng)用戶執(zhí)行了 insert | update | delete 這些操作之后, 可以觸發(fā)一系列其它的動(dòng)作/業(yè)務(wù)邏輯作用 : 在動(dòng)作執(zhí)行之前或者之后,觸發(fā)業(yè)務(wù)處理邏輯插入數(shù)據(jù),做一些校驗(yàn)語法:create [or replace] trigger 觸發(fā)器的名稱before | afterinsert | update | delete on 表名[for each row]declarebeginend;觸發(fā)器的分類:語句級觸發(fā)器: 不管影響多少行, 都只會(huì)執(zhí)行一次行級觸發(fā)器: 影響多少行,就觸發(fā)多少次:old 代表舊的記錄, 更新前的記錄:new 代表的是新的記錄 --新員工入職之后,輸出一句話: 歡迎加入黑馬程序員 create or replace trigger tri_test1 after insert on emp declarebegindbms_output.put_line('歡迎加入黑馬程序員'); end;insert into emp(empno,ename) values(9527,'HUAAN');--數(shù)據(jù)校驗(yàn), 星期六老板不在, 不能辦理新員工入職 --在插入數(shù)據(jù)之前 --判斷當(dāng)前日期是否是周六 --如果是周六,就不能插入 create or replace trigger tri_test2 before insert on emp declare--聲明變量vday varchar2(10); begin--查詢當(dāng)前select trim(to_char(sysdate,'day')) into vday from dual;--判斷當(dāng)前日期:if vday = 'saturday' thendbms_output.put_line('老板不在,不能辦理入職');--拋出系統(tǒng)異常raise_application_error(-20001,'老板不在,不能辦理入職');end if; end;insert into emp(empno,ename) values(9528,'HUAAN2');--更新所有的工資 輸出一句話 create or replace trigger tri_test3 after update on emp for each row declarebegindbms_output.put_line('更新了數(shù)據(jù)'); end;update emp set sal = sal+10;--判斷員工漲工資后的工資一定要大于漲工資前的工資 /*200 --> 100觸發(fā)器 : before舊的工資 新的工資如果舊的工資大于新的工資 , 拋出異常,不讓它執(zhí)行成功 觸發(fā)器中不能提交事務(wù),也不能回滾事務(wù) */ create or replace trigger tri_updatesal before update on emp for each row declarebeginif :old.sal > :new.sal thenraise_application_error(-20002,'舊的工資不能大于新的工資');end if; end;update emp set sal = sal + 10; select * from emp;update emp set sal = sal - 100;/*模擬mysql中ID的自增屬性 auto_increment insert into person(null,'張三'); 觸發(fā)器:pid=1 insert pid=1序列 : create sequence seq_person_pid; */ create table person(pid number primary key,pname varchar2(20) );insert into person values(null,'張三'); create sequence seq_person_pid;--觸發(fā)器 create or replace trigger tri_add_person_pid before insert on person for each row declarebegindbms_output.put_line(:new.pname);--給新記錄 pid 賦值select seq_person_pid.nextval into :new.pid from dual; end;insert into person values(null,'張三'); select * from person;

    總結(jié)

    以上是生活随笔為你收集整理的Oracle数据库深入学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    麻豆视频成人 | 超薄丝袜一二三区 | 久久99久久99久久 | 久久99国产精品二区护士 | 亚洲天堂视频在线 | 99超碰在线播放 | 九九日韩| 久久1电影院 | 欧美精品久久久久a | 高清不卡免费视频 | 中文字幕国语官网在线视频 | 国产破处在线播放 | 午夜久久久精品 | 亚洲精品视频在线观看免费视频 | av成人亚洲 | 成人av网站在线观看 | 成人9ⅰ免费影视网站 | www国产亚洲精品久久网站 | 久久久免费毛片 | 人人澡人人爽欧一区 | 中文字幕第一页在线vr | 日韩一级成人av | 国产精品免费视频观看 | 国内精品久久久精品电影院 | 色婷婷激婷婷情综天天 | 黄色av成人在线 | 天天综合91| av在线免费观看网站 | 久久久天堂 | 国产精品中文字幕在线播放 | 中文av影院| 久久99婷婷 | 日韩免费一区二区三区 | 欧美日韩一级在线 | 欧美国产日韩一区 | 色综合 久久精品 | 国产综合视频在线观看 | 99久热精品| 91视频久久久久 | 日韩精品专区在线影院重磅 | 91麻豆精品国产91久久久使用方法 | av电影中文字幕在线观看 | 色婷婷88av视频一二三区 | 福利电影一区二区 | 又黄又刺激又爽的视频 | 色在线免费视频 | 国产精品久久久久久久久久久久久久 | 少妇视频一区 | 久久69av | 免费视频 三区 | 亚洲三级性片 | 成人午夜片av在线看 | 在线一区观看 | 美女黄色网在线播放 | 最新日韩精品 | 特黄免费av | 午夜丁香视频在线观看 | 97碰视频| 在线观看成年人 | 91网站免费观看 | 九九视频免费在线观看 | 国产一在线精品一区在线观看 | 日韩高清激情 | 日韩高清在线一区二区 | 97超碰在线久草超碰在线观看 | 超碰日韩 | 97视频精品| 免费国产视频 | 欧美贵妇性狂欢 | 中文字幕日韩国产 | 国产在线一区观看 | 91私密视频 | 日韩欧美区 | 日韩黄色大片在线观看 | 在线观看 亚洲 | 免费观看www7722午夜电影 | 97电影院网| 国产精品毛片一区二区在线 | 激情久久五月 | 久久伦理电影网 | 最新av在线播放 | 在线看成人av | 91福利社在线观看 | 91高清不卡 | 欧美国产不卡 | 玖玖在线视频观看 | 视频在线观看国产 | 天天色天天射天天操 | 97人人澡人人添人人爽超碰 | 国产一级在线免费观看 | 2024av在线播放| 亚洲热久久 | 黄色大全免费网站 | 中文字幕在线网址 | 久久国产精品一国产精品 | 伊甸园av在线 | 欧美午夜性生活 | 国内精品视频在线 | 天天躁天天操 | 天天色天天上天天操 | 日韩视频在线不卡 | 深爱激情开心 | 久久成人国产精品免费软件 | 丁香六月婷婷开心婷婷网 | 999免费视频 | 91精品久久久久久综合乱菊 | 久久毛片高清国产 | 欧美日韩国产精品久久 | 色婷婷狠狠五月综合天色拍 | 久久人人爽人人 | 天天拍天天操 | 免费三级av | 操高跟美女 | 国产永久网站 | 色婷婷97| 色精品视频 | 亚洲一区二区三区四区精品 | 99久久毛片| 二区精品视频 | 久久精品亚洲一区二区三区观看模式 | 亚洲a免费 | www久久99 | 国内一级片在线观看 | 精品999| 午夜美女av | 99久久精品免费视频 | 精品一区欧美 | 男女日麻批 | 国产精品中文字幕在线 | 久久久免费少妇 | 国产97视频在线 | 国产精品黄色av | 九色91福利 | 国产一区在线视频 | 国内精品久久久久久 | 蜜桃视频在线视频 | 激情五月***国产精品 | 九九久久精品视频 | 婷婷激情站| 国产精品区二区三区日本 | 免费热情视频 | 久久国产三级 | 午夜在线看 | 免费91在线观看 | 婷婷丁香色 | 精品久久久99 | 黄在线免费观看 | 热久久99这里有精品 | 亚洲影视九九影院在线观看 | 中文在线中文a | 天天操天天干天天操天天干 | 成人国产精品av | av大片网址 | 国产第一二区 | 国产一区二区在线视频观看 | 亚洲精品综合久久 | 免费视频国产 | av网站在线观看免费 | 爱情影院aqdy鲁丝片二区 | 毛片99 | 午夜精品福利一区二区三区蜜桃 | 亚洲dvd| 91精品久久久久久综合乱菊 | 超碰人人99 | 国产自偷自拍 | 天天综合导航 | 成人黄色小说在线观看 | 黄色免费网| 91爱在线| 精品96久久久久久中文字幕无 | 色五婷婷 | 国产91精品欧美 | 中文av字幕在线观看 | 国产精品久久久久久久婷婷 | 91日韩精品一区 | 国产69久久 | 蜜臀av网址 | 丰满少妇在线观看资源站 | 99高清视频有精品视频 | 国产涩图 | 日日夜夜精品免费 | 久久中文精品视频 | 27xxoo无遮挡动态视频 | 在线免费观看欧美日韩 | 成人天堂网 | av电影中文字幕在线观看 | 韩国av不卡| 中文字幕在线网址 | 在线观看日本韩国电影 | 在线观看国产一区二区 | 天天爱天天爽 | 国产精品久久久久久久久久久久久久 | 91精品国产麻豆 | 亚州成人av在线 | 99精品久久精品一区二区 | 久久久精品国产一区二区三区 | 久久精品首页 | 国产一级片免费播放 | 久久国产视频网站 | 亚洲女欲精品久久久久久久18 | 亚洲成人av一区二区 | 日韩欧美99 | 丁香综合激情 | 四虎成人在线 | 免费看片日韩 | 伊人亚洲综合 | 97视频久久久 | 欧美一级日韩免费不卡 | 香蕉91视频 | 国产精品九九热 | 日韩综合一区二区三区 | 亚洲欧美国产精品va在线观看 | 成人午夜电影在线播放 | 欧美成人91| 国产精品小视频网站 | 精品视频在线视频 | 国产字幕在线播放 | 亚洲精品国产拍在线 | 久久久久久久久久影视 | 午夜精品久久久久99热app | 亚洲国产激情 | 国产成人三级在线播放 | 久青草视频在线观看 | 国产成人三级在线 | 久久精品五月 | 国产成人精品av在线观 | 色婷婷狠狠18 | 国产一区二区在线免费播放 | 国产精品爽爽爽 | 精品久久国产一区 | 中文字幕在线国产 | 亚洲欧美国产日韩在线观看 | 免费看特级毛片 | 亚洲国产欧美一区二区三区丁香婷 | 日韩久久精品 | 国产日韩av在线 | 国产一级视屏 | 日日夜夜操操操操 | 在线免费观看的av | 久久久久久国产一区二区三区 | 亚洲人在线视频 | 伊人成人久久 | 成年人免费电影 | 欧美一级专区免费大片 | 中国黄色一级大片 | 色婷婷激情网 | 国产精品久久电影观看 | 午夜三级福利 | 午夜av免费在线观看 | 免费特级黄色片 | 国产欧美精品xxxx另类 | 日韩xxx视频 | 在线观看视频亚洲 | 黄色毛片在线观看 | 久久伊人精品一区二区三区 | 香蕉视频在线观看免费 | 一级一片免费观看 | 超碰在线公开免费 | 国内揄拍国内精品 | 日韩精品视频在线观看免费 | 97夜夜澡人人爽人人免费 | 久久午夜网 | 日日添夜夜添 | 国产精品久久久久久久久久白浆 | 亚洲精品黄 | 午夜aaaa | 久久久久久久国产精品 | 久久精品电影 | 欧美亚洲成人xxx | 国产精品永久在线观看 | 色噜噜日韩精品欧美一区二区 | 丁香电影小说免费视频观看 | 久精品在线观看 | 免费看精品久久片 | 欧美精品999 | 亚洲日本国产 | 激情五月婷婷激情 | 成年人毛片在线观看 | 亚洲精品久久久蜜臀下载官网 | 午夜色性片| 天天射天天干天天操 | 欧美日韩国语 | 成人 国产 在线 | 成人黄色小视频 | 亚洲国产高清在线观看视频 | 日韩av一卡二卡三卡 | 久久国产精品一区二区 | 午夜婷婷网 | 免费黄色av. | 久久九九久久精品 | www.亚洲精品 | 97色视频在线| 9久久精品 | 一区二区三区在线观看中文字幕 | 亚洲天天摸日日摸天天欢 | 天天操天天是 | 久久视频在线观看免费 | 特黄特黄的视频 | 成人毛片在线视频 | 久久精品国产一区二区电影 | 欧美一二区视频 | 国产精品久久久久久久久搜平片 | 久久久天堂| 在线观看自拍 | 97精品国产 | 色婷婷综合成人av | 欧美日韩一区二区免费在线观看 | 亚洲人在线7777777精品 | 国产成年人av | 国产精品嫩草69影院 | 国产日韩精品一区二区在线观看播放 | 婷婷天天色 | 国内小视频 | 亚洲aaa级| 久久久精品国产一区二区三区 | 99热这里是精品 | 久久久久亚洲国产 | 免费人人干 | 狠狠色狠狠色终合网 | 天天狠狠干 | 亚洲视频资源在线 | 久久视频在线观看中文字幕 | 激情欧美日韩一区二区 | 一二三精品视频 | www色网站 | 久久综合日 | 日韩av电影手机在线观看 | 国产美女精品视频免费观看 | 欧美日韩一区二区在线观看 | 日韩福利在线观看 | 最新日韩在线 | 国产一区二区观看 | 成人av网址大全 | 国产乱老熟视频网88av | 91精品国自产在线观看 | 69精品人人人人 | 成人在线播放免费观看 | 久久国色夜色精品国产 | 91精品啪在线观看国产线免费 | 久久综合福利 | 人人爽久久涩噜噜噜网站 | 97看片吧 | 久青草视频在线观看 | 911精品美国片911久久久 | 女人魂免费观看 | 91桃色在线观看视频 | 九九九电影免费看 | 黄色a一级片 | 中文字幕字幕中文 | 婷婷亚洲综合 | 国产精品99久久久久 | 亚洲精品在线看 | 午夜精品一区二区三区免费 | 蜜桃av久久久亚洲精品 | 有码一区二区三区 | 人人干人人干人人干 | 久久成年人视频 | 成 人 黄 色视频免费播放 | 国产精品一区二区精品视频免费看 | 久久精品三级 | av免费福利| 亚洲精品在线二区 | 欧美日韩不卡一区二区 | 五月开心色 | aaawww| 日日夜av| 91大神dom调教在线观看 | 五月花丁香婷婷 | 日韩久久精品一区二区三区 | 亚洲激情六月 | 国产99久久99热这里精品5 | 国产精品成人免费精品自在线观看 | 91av在线播放视频 | 人人爽人人爽人人片 | 久久久精品久久日韩一区综合 | 五月色丁香 | 349k.cc看片app| 国产色一区 | 日韩欧美精品一区二区 | 激情五月在线视频 | 夜夜操网| 日韩精品专区 | 天堂av在线7 | 在线国产激情视频 | 黄色av免费 | 成年人电影毛片 | 国内精品久久久久久久影视麻豆 | 中文字幕高清免费日韩视频在线 | av线上免费观看 | 亚洲v欧美v国产v在线观看 | 国产高清精 | 欧美在线观看视频一区二区 | 亚洲欧美日韩国产一区二区三区 | 很黄很色很污的网站 | 亚洲欧美激情插 | 狠狠干天天色 | av中文字幕在线看 | 韩国av免费观看 | 日韩av免费观看网站 | 成年人视频在线免费播放 | 在线电影日韩 | 一区二区不卡在线观看 | 天天干天天上 | 国产精品99免视看9 国产精品毛片一区视频 | 人人草在线视频 | 亚洲一级免费观看 | 亚洲天堂色婷婷 | 99 久久久久 | 国产精品理论片在线观看 | 国产精选视频 | 欧美日韩国产区 | 精品国产一区二区三区四区在线观看 | 在线小视频 | 又黄又刺激 | 国产又黄又猛又粗 | 伊人资源视频在线 | 黄色软件网站在线观看 | 五月综合在线观看 | 欧美激情视频一区二区三区免费 | 西西444www大胆高清视频 | 色五婷婷 | 日韩视频在线观看免费 | 国产精品18久久久久久vr | 久久国产免费 | 国产黄色免费观看 | 高清av在线免费观看 | 深夜视频久久 | 国内三级在线观看 | 国产亚洲精品久久久久久久久久久久 | 成人一区在线观看 | 麻豆91精品 | 国产精品电影一区二区 | 欧美日韩1区 | 久草热久草视频 | 国产免费人成xvideos视频 | 四虎成人精品在永久免费 | 亚洲精品久久久久999中文字幕 | 中文字幕电影高清在线观看 | 久久成人免费 | 在线观看中文字幕dvd播放 | 日韩在线视频精品 | 九色精品 | 欧美午夜剧场 | 韩国精品在线观看 | 国产成人免费精品 | 国产精品综合久久久久 | 午夜婷婷网 | 国产亚洲亚洲 | 超碰在线99 | 久久精品亚洲国产 | 91视频观看免费 | 国产 亚洲 欧美 在线 | 久久国产精品久久精品 | 婷婷中文字幕在线观看 | 日本精品一区二区三区在线播放视频 | 日日精品 | 亚洲精选在线观看 | 免费在线观看中文字幕 | 天天色天天色天天色 | 制服丝袜欧美 | 91黄视频在线观看 | 99在线热播精品免费 | 97视频在线观看网址 | 九九欧美视频 | 黄色影院在线免费观看 | 欧美日韩在线观看一区二区三区 | 日韩av综合网站 | 91精品国产综合久久福利 | 蜜臀久久99精品久久久无需会员 | 色.com| 国产精品h在线观看 | 国产精品成人在线观看 | 日韩福利在线观看 | 高清一区二区三区 | 欧美视频www| a视频免费 | 国产视频精品免费播放 | 亚洲一区二区视频在线 | 综合久久五月天 | a一片一级 | 福利久久| 久久激五月天综合精品 | 成人免费视频播放 | 国产流白浆高潮在线观看 | 免费在线黄色av | 伊人狠狠操 | 天天av在线播放 | 高清不卡免费视频 | 亚洲激情五月 | www免费在线观看 | 婷婷激情综合网 | 欧美激情第一区 | 欧美一级片免费播放 | 国产麻豆果冻传媒在线观看 | 日本三级在线观看中文字 | 国产一级片直播 | 久久日韩精品 | 国产一区二区三区在线 | 久久综合99| 成人资源在线观看 | 精品国产欧美一区二区 | 国产精品1区2区在线观看 | 天天操夜夜操天天射 | 日本在线观看一区二区三区 | 日韩欧美一区二区在线播放 | 亚洲精品视频在线观看免费 | 久久午夜色播影院免费高清 | 日韩av网页| 久久露脸国产精品 | 久久在线免费观看视频 | 免费av网址大全 | 日韩 在线观看 | 国产91粉嫩白浆在线观看 | 国产九九九精品视频 | 狠狠操影视 | 亚洲免费av片 | 黄色三级av | 成人黄色电影在线观看 | 欧美成人在线网站 | 亚洲国产精品久久久久婷婷884 | 亚洲免费资源 | 99精品欧美一区二区三区黑人哦 | 99婷婷狠狠成为人免费视频 | 91视频免费视频 | 午夜精品视频在线 | 丁香婷婷综合激情 | 中文字幕 成人 | 日韩欧美精品在线视频 | 国产 在线 高清 精品 | 国内精自线一二区永久 | 美女免费黄网站 | 天天操天天射天天添 | 成人av在线亚洲 | 婷婷久久网 | 免费观看的黄色 | 啪嗒啪嗒免费观看完整版 | 国产美女免费观看 | 99热这里有精品 | 亚洲午夜精品一区 | 亚洲h色精品 | 午夜免费久久看 | 日韩在线欧美在线 | 一区二区男女 | 天堂视频一区 | 国产精品 日韩 欧美 | 欧美性色黄 | 天天操天天曰 | 日日爽视频 | 色婷婷88av视频一二三区 | 成人毛片在线视频 | 午夜91视频 | 国产中文字幕在线视频 | 国产一区二区网址 | 91精品久久香蕉国产线看观看 | 国产精品久久综合 | 色多视频在线观看 | 久久韩国免费视频 | 国产精品自产拍在线观看桃花 | 成人免费中文字幕 | 成人黄色大片在线观看 | 国产美女被啪进深处喷白浆视频 | 在线视频亚洲 | 成人日韩av | 99久久99视频 | 99色视频| 亚洲一级免费电影 | 欧美日韩大片在线观看 | 天堂av网在线 | 成人免费在线播放 | 99精品国产99久久久久久97 | 免费日韩av电影 | av手机在线播放 | 成人黄在线观看 | 天天干天天干天天操 | 精品二区久久 | 成人av资源网 | 成人黄色片在线播放 | 中文字幕色在线视频 | 一本一本久久aa综合精品 | 在线黄频 | 五月天色中色 | 免费久久片 | 中文字幕免费观看视频 | 玖玖玖精品 | 久久在线免费视频 | 国产精品综合久久久久久 | 狠狠操天天干 | 日韩在线字幕 | 免费成人在线观看视频 | 久久精品久久精品久久39 | 日韩,精品电影 | 国产五月色婷婷六月丁香视频 | 久久成人人人人精品欧 | 中文字幕人成乱码在线观看 | 九九在线高清精品视频 | 日韩电影中文 | 久久99免费观看 | 成人动漫一区二区 | 久久久久久久久久网 | 日批网站在线观看 | 国产精品久久久 | 国产视频亚洲精品 | 日韩精品久久中文字幕 | 国际精品网 | 在线观看成人网 | 国产成人精品三级 | 黄色a一级视频 | 中文字幕亚洲国产 | 综合成人在线 | 91成熟丰满女人少妇 | 国产视频精品网 | 九九爱免费视频在线观看 | 在线一二区 | 欧美激情第十页 | 中文字幕精品三区 | 五月天婷婷丁香花 | 99久久久国产精品免费观看 | 亚洲天堂在线观看完整版 | 97精品国产97久久久久久粉红 | 日韩精品专区在线影院重磅 | 在线韩国电影免费观影完整版 | 99久久婷婷国产 | 91香蕉国产 | 免费a v在线 | 特级a毛片 | 亚洲特级毛片 | 国产在线色视频 | 伊人久久电影网 | 成人国产精品av | 黄色一级片视频 | 国产精品国产三级国产aⅴ无密码 | 天天综合网~永久入口 | 亚洲精品玖玖玖av在线看 | 一级久久精品 | 久久字幕网 | 91av亚洲| 插综合网 | 中文字幕在线色 | 免费在线精品视频 | 麻豆久久久久 | 国产精品久久久久久久久久久免费看 | 五月情婷婷 | 免费在线观看的av网站 | 国产一区视频免费在线观看 | 国产一区二区网址 | 日韩免费视频观看 | 国产丝袜在线 | 婷婷丁香狠狠爱 | 91视频国产高清 | 国产99久久九九精品免费 | 久久特级毛片 | 超碰成人av | 成人一区二区三区在线观看 | 国色天香在线观看 | 91在线观看欧美日韩 | 国产精久久久 | 白丝av在线 | 黄色网www | 欧美亚洲xxx | av在线看片 | 国产精品资源在线观看 | 免费在线观看日韩欧美 | 国内少妇自拍视频一区 | 日本中文字幕网 | 狠狠色伊人亚洲综合网站野外 | 中文字幕乱视频 | 国产美女网站在线观看 | 一区二区视频在线看 | 天天弄天天操 | 五月天久久久 | www黄在线 | 中文字幕在线观看你懂的 | 国内精品久久久久久久久久久久 | 91精品免费看 | 久久久久国产精品视频 | 国产精品麻 | 国产 在线观看 | 欧女人精69xxxxxx | 人人草在线视频 | 久久久久久久精 | 91亚洲欧美 | 天天干天天摸天天操 | 国产欧美综合在线观看 | 99精品在线视频观看 | 天天操天天色天天射 | 精久久久久 | 免费日韩精品 | av大全免费在线观看 | av大全在线 | 美女一区网站 | 天堂av在线7| 91看片淫黄大片一级在线观看 | 麻豆av电影 | 色视频在线免费 | 久久免费的视频 | 精品主播网红福利资源观看 | 国产精品永久免费在线 | 97在线观看免费视频 | 91精品国产乱码在线观看 | 中文字幕在线观看你懂的 | 九九视频免费 | 国内精品久久久久久久 | 激情在线免费视频 | 日本夜夜草视频网站 | 欧美精品在线观看免费 | 精品久久一二三区 | 在线成人观看 | 日韩久久在线 | 在线国产一区 | 国产美腿白丝袜足在线av | 国产不卡av在线播放 | 久久久片| 久久狠狠干 | 激情综合亚洲精品 | 欧美成人免费在线 | 久久一区91 | 久久久久高清毛片一级 | 三级午夜片 | 色偷偷av男人天堂 | 91大神一区二区三区 | 成人黄色视 | 日韩中文字幕一区 | 99精品视频观看 | 一二三区视频在线 | 天天爱综合 | 精油按摩av | 久久久国产精品一区二区中文 | 日日摸日日添夜夜爽97 | 欧洲精品一区二区 | 久久免费黄色大片 | 美女黄视频免费看 | 精品欧美一区二区在线观看 | 91精品久久久久久久久久入口 | 久久九九影视 | 日韩精品久久一区二区三区 | 人成午夜视频 | 操高跟美女| 国产一性一爱一乱一交 | 91资源在线 | 天堂成人在线 | 三级av在线免费观看 | 欧美精品在线一区二区 | 精品久久久久久久久久久久久久久久 | 国产高清不卡在线 | 日韩av片无码一区二区不卡电影 | 国产99久久久国产精品免费看 | 国产福利网站 | 亚州人成在线播放 | 2023年中文无字幕文字 | 国产精品久久久久久久久久不蜜月 | 国产在线a| 黄色在线看网站 | 久久久久久久网站 | 日本中文在线播放 | 国产亚洲欧美一区 | 欧美一区二区三区免费看 | 91麻豆精品国产91久久久使用方法 | 久草久 | 亚洲综合在线五月天 | 天堂av网站 | 91麻豆免费版 | 在线观看视频你懂 | 99久久精品视频免费 | 精品久久网| 日韩大片在线播放 | 黄色官网在线观看 | 欧美日韩一区二区免费在线观看 | 久久婷婷综合激情 | 国产亚洲亚洲 | 久久久久久久久久久久亚洲 | 狠狠夜夜 | 成人蜜桃| 免费能看的av | 视频一区二区三区视频 | 在线va网站 | 精品福利在线视频 | 韩日精品在线观看 | 久久99在线观看 | 久久综合色影院 | 九九久久影视 | 日日夜夜网站 | 亚洲一级性 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 久久精选视频 | 国产高清一 | 在线免费观看不卡av | 久久综合中文字幕 | 精品日韩在线一区 | 一区二区三区四区五区在线 | 一区视频在线 | 久精品视频在线观看 | 久草精品在线观看 | 亚洲一区二区天堂 | 蜜桃视频精品 | 久久久国产精品麻豆 | 色婷婷一区 | 欧美精品久久久久久久 | 国产日韩精品在线观看 | 成人在线视频观看 | 色狠狠干| 亚洲午夜激情网 | 六月丁香激情网 | 中文字幕一二 | 最新91在线视频 | 久久69精品久久久久久久电影好 | 日日爱网址 | 免费日韩精品 | 丁香婷婷基地 | 丁香六月伊人 | 日韩综合视频在线观看 | 欧美视频99 | 国产成本人视频在线观看 | 中文字幕网站 | 免费久久99精品国产婷婷六月 | 五月综合色婷婷 | 亚洲视频456| 亚洲一区在线看 | 日韩精品一区二区免费 | 天天搞天天干 | 五月天色中色 | 亚洲美女精品 | 午夜免费电影院 | 丰满少妇一级 | 色婷婷亚洲综合 | 欧美日韩不卡在线观看 | 99精品国产一区二区 | 免费中文字幕视频 | 在线观看电影av | 国产精品久久三 | 久久精品国产免费 | 久久精品国产一区 | 1000部18岁以下禁看视频 | 国产91精品高清一区二区三区 | 中文字幕国内精品 | 亚洲国产成人精品在线观看 | 能在线观看的日韩av | 成人网444ppp | 九九在线高清精品视频 | 少妇视频一区 | 国产在线国产 | 在线看片一区 | 欧美日韩中文在线 | www.色就是色| 六月色婷 | 久久久久久毛片 | 999成人国产| 精品高清视频 | 日韩毛片在线一区二区毛片 | 69国产精品视频免费观看 | 久久久免费看视频 | 国产精品女视频 | 国产专区日韩专区 | 人成电影网| 91在线最新| 天天操天天射天天舔 | 久久成人毛片 | 操操爽| 91午夜精品| 日操操 | av不卡免费看 | 日韩免费观看av | 在线成人中文字幕 | 国产精品久久久久久久久久不蜜月 | 超碰在线99 | 婷婷激情综合五月天 | 久久久久免费精品国产小说色大师 | 色婷婷88av视频一二三区 | 一区二区影院 | 97在线观看免费观看 | 亚洲欧美国产精品久久久久 | 国产黄 | 人人玩人人添人人澡97 | 超碰在线日韩 | 亚洲激情 | 国产99久久九九精品免费 | 精品欧美一区二区精品久久 | 99久久99久久免费精品蜜臀 | 毛片网站免费 | 99精品国产福利在线观看免费 | 99精品国产一区二区三区不卡 | 国产色 在线 | 色无五月| 99久久精品国产亚洲 | 天天干夜夜想 | 六月丁香社区 | 在线亚洲欧美视频 | 欧美日韩国产一二三区 | 91成人网在线观看 | 国产一区二区三精品久久久无广告 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 九九综合九九综合 | 视频在线观看亚洲 | 久久久久久久久免费 | 亚洲.www| 久久只精品99品免费久23小说 | 国产偷v国产偷∨精品视频 在线草 | 成人宗合网| 午夜国产福利视频 | 五月天色站 | 一区二区不卡视频在线观看 | 91福利视频网站 | 91爱爱网址| 久久亚洲国产精品 | 黄色aaa级片 | 日本女人逼 | aaa日本高清在线播放免费观看 | 精品一区二三区 | 婷色在线 | 四虎天堂 | 日日干夜夜操视频 | 亚洲成 人精品 | 国产午夜亚洲精品 | 黄色一及电影 | 99综合视频 | 激情五月***国产精品 | 免费午夜网站 | 五月婷婷激情网 | 亚洲精品777 | 激情动态 | 91av在线免费看 | 国产精品久久一区二区无卡 | 久久久久久免费网 | 免费h精品视频在线播放 | 成年人在线观看网站 | 日韩| 国产精品毛片久久久久久久 | 西西444www大胆高清视频 | 精品视频在线视频 | 一级片免费视频 | 国产超碰97 | 国产成人在线精品 | 在线免费国产视频 | 青草视频在线免费 | 992tv人人网tv亚洲精品 | 国产精品国内免费一区二区三区 | 色搞搞| 成人av电影免费在线播放 | 人人爽人人爱 | 日韩在线观看不卡 | 国产一区欧美一区 | 色综合久久天天 | 色九九影院 | 五月天久久激情 | 亚洲区二区 | 国产91精品高清一区二区三区 | 自拍超碰在线 | 国产丝袜美腿在线 | a视频免费| 免费www视频 | 九九热久久久 | 99精品国产兔费观看久久99 | 狠狠色狠狠综合久久 | 国内久久看 | 九九久久电影 | 天天干天天操天天 | 国产亚洲激情视频在线 | 久久精品视频在线免费观看 | 亚洲黄色a| 国产青草视频在线观看 | 在线观看福利网站 | 久久人操| 久久99久久99精品免视看婷婷 | 亚洲精品国产日韩 | 东方av免费在线观看 | 国语黄色片 | 国产精品午夜在线 | 最近中文字幕高清字幕免费mv | 国产一区二区手机在线观看 | 亚洲成人国产精品 | 免费看日韩片 | 五月婷婷视频在线 | 欧美午夜性 | 久久在线免费观看 | 亚洲精品国产片 | 亚洲最新av网站 | 国产精品不卡视频 | 久久国产剧场电影 | 高潮毛片无遮挡高清免费 | 免费观看91 | 伊人热 | 日日摸日日添夜夜爽97 | 婷婷丁香色综合狠狠色 | 丁香国产视频 | 欧美成a人片在线观看久 | 亚洲无吗视频在线 | 亚洲成人免费 | 色综合久久66 | 国产高清一 | 久久成人午夜 | 日韩在线| 免费在线激情电影 | 久久久免费观看完整版 | 狠狠色丁香久久婷婷综合_中 | 蜜臀av一区二区 | 国产精品视频区 | 国产精品原创av片国产免费 | 色.com| av在线播放中文字幕 |