一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

數(shù)據(jù)庫的設(shè)計與表的管理 oracle筆記

 cjwid 2010-02-04
收藏
數(shù)據(jù)庫的設(shè)計與表的管理  oracle筆記
1.1oracle的表的管理
 
 1.1.1表名和列的命名規(guī)則
 1)表名必須以字母開頭
 2)表名的長度不能超過30
 3)不能oracle關(guān)鍵字
 
 
 1.1.2oracle支持的數(shù)據(jù)類型
 1)字符型
  char   最大是2000
 例子  char(10) '小寒'   在數(shù)據(jù)庫中 '小寒      '
 
         varchar2 最大時4000
 
 例子  varchar2(10) '小寒'   在數(shù)據(jù)庫中 '小寒'
  clob 字符型大對象 最大4g
 2)數(shù)字型
 
 number  范圍 -(10的38次方) 到 10的38次方
 可以表示整數(shù),也可以表示小數(shù)
 number(5,2)    表示的 -999.99 到 999.99
 numer(5) 表示一個五位數(shù)的一個整數(shù) -99999 ~ 999999
 3)日期類型
 date
 timestamp
 
 4)圖片
 blob 二進制數(shù)據(jù) (放入圖片或者是聲音文件 4g)
 
 1.1.3管理表
 1)建立表
 create table student(
 xh number(4), --學(xué)號
 xm varchar2(50),--姓名
 sex char(2),--性別
 birthday date,--生日
 sal number(7,2) --獎金
 );
 
 2)如何察看表的結(jié)構(gòu)
 desc 表名
 3)如何給一個表添加字段
 alter table student add (classId number(2));
 
 4)修改字段的長度
 
 alter table student modify(xm varchar2(1000));
 5)刪除字段
 alter table student drop column sal;
 6)刪除表
 drop table student;
 1.1.4如何操作數(shù)據(jù)表
 
 (查詢!!!/添加/修改/刪除)
 
 //加入一個數(shù)據(jù)
 insert into student values(1,'MIKE','男','12-8月-67',12);
 
二   基本查詢
 2.1簡單的查詢語句
 1)顯示某張表的結(jié)構(gòu)
 
 desc 表名
 2)查詢所有列
 select * from emp;
 3)查詢指定列
 
 
 4)如何取消重復(fù)行
 select distinct deptno,job from emp;

 5)使用算術(shù)表達式
 
 //如何計算年工資,每個雇員
 nvl(comm,0):是oracle自己的一個函數(shù)
 如果沒有獎金 給0
 如果有獎金 ,就給comm
 select ename, sal*12+nvl(comm,0)*12 年工資 from emp;
 6)使用列的別名
 //顯示年工資大于20000的所有員工
 select ename, sal*12+nvl(comm,0)*12  from emp where sal*12+nvl(comm,0)*12>20000
 7)如何處理null值

 nvl(comm,0):是oracle自己的一個函數(shù)
 如果沒有獎金 給0
 如果有獎金 ,就給comm

 2.2使用where子句
 1)在where條件中使用數(shù)字
 如何顯示工資高于3000的員工
 select ename, sal from emp where sal>3000;
 2)在where條件中使用字符值
 
 注意: 1.要用單引號引住 2.區(qū)分大小寫
  
 3)在where條件中使用日期值

 注意: 1.要有單引號引住2.要符合日期的形式 否則要出錯
 請問如何查找1982.1.1后入職的員工
 
 select * from emp where hiredate>'1-1月-82';
 
 4)在where條件中使用between ... and
 請問:如何顯示工資在2000到2500的員工情況

 select * from emp where sal between 2000 and 2500;
 5)在where條件中如何使用like操作符(模糊查詢)
 
 %: 表示0到多個字符
 _: 表示任意一個字符
 
 請思考:1如何顯示首字符為S的員工姓名和工資
  2如何顯示第三個字符為大寫O的所有員工的姓名和工資

 select ename,sal from emp where ename like '__O%'
 
 7)在where條件中使用in
 如何顯示empno為 123,345,800,1250...的雇員情況

 select * from emp where empno in(123,345,800,1250)

 8)在where條件中使用is null的操作符
 請思考:如何顯示沒有上級的雇員的情況

 select * from emp where  mgr is null;

 9)在where條件中使用邏輯操作符號
 and,or
 請思考如何查詢工資高于2500或是崗位為MANAGER的雇員,同時還要滿足他們的姓名首寫字母為大寫的J
 select * from emp where ename like 'J%' and (sal>2500 or job='MANAGER')

 2.3使用order by字句
 當(dāng)執(zhí)行查詢操作時,默認(rèn)情況下會按照行數(shù)據(jù)插入的先后順序來顯示數(shù)據(jù).但是在實際的應(yīng)用中常常需要對
數(shù)據(jù)進行排序,可以使用order by
 注意: 在select語句中可以包含多個子句(where , group by , having ,order by) 這是order by 必須是
最后一個子句
 1)升序排列
 請思考:如何按照工資的從低到高的順序顯示雇員的信息

 select * from emp order by sal;
 //從高到低(desc 從高到低 asc  低到高)
 select * from emp order by sal desc;

 3)使用多列排序

 請思考如何按照部門號升序而雇員的工資降序排列

 select * from emp order by deptno,sal desc;

 4)使用列的別名排序
 如果在where子句中為列或是表達式定義了別名,那么當(dāng)執(zhí)行排序操作時,即可以使用列或是表達式排序,
也可使用列別名排序

 請思考如何按照年薪從低到高排序
 
 5)使用列的編號進行排序
 

 6)查詢表中限定位置記錄
 請大家思考一個問題,分頁..hehe
 按雇員的id號升序取出
 
 1)返回前5行數(shù)據(jù)
 2)返回6到10行數(shù)據(jù)
 3)返回最后5行數(shù)據(jù)
 
 
 
總結(jié) ;
 1.
 2.
 3.
 4.
 
三 復(fù)雜查詢
 
 前面介紹了使用select語句執(zhí)行簡單的select語句、查詢、排序、等。但是這些功能遠遠不能滿足實際應(yīng)用
的需要,在實際應(yīng)用中經(jīng)常需要執(zhí)行復(fù)雜的數(shù)據(jù)統(tǒng)計,經(jīng)常需要顯示多張表的數(shù)據(jù),現(xiàn)在我們給大家介紹較為復(fù)雜的
select語句
 
 3.1數(shù)據(jù)分組
 
 1)分組函數(shù)
 
 3.1.1max和min
 
 請思考如何顯示所有員工中最高工資和最低工資
 
 select max(sal),min(sal) from emp;

 3.1.2avg和sum
 
 請思考如何顯示所有員工的平均工資和工資總和
 select avg(sal),sum(sal) from emp;

 3.1.3count
 請思考,如何得到共有多少員工
 
 select count(*) from emp;
 2)group by 和 having子句

 group by用于對查詢的結(jié)果分組統(tǒng)計,having子句用于限制分組顯示結(jié)果.

 3.2.1 使用group by 進行單列分組

 請思考如何顯示每個部門的平均工資和最高工資
 select deptno,avg(sal),max(sal) from emp group by deptno;
 
 3.2.2 使用group by 進行多列分組
 多列分組是指基于兩個或是兩個以上的列生成分組統(tǒng)計結(jié)果.
 請思考: 如何顯示每個部門的每種崗位的平均工資和最低工資

 select deptno,job ,avg(sal),max(sal),min(sal) from emp group by deptno,job;
 
 3.2.3 使用having 子句限制分組顯示結(jié)果

 having 子句用于限制分組統(tǒng)計的結(jié)果,同時要求having必須要跟在group by子句后面

 請思考: 如何顯示平均工資低于2000的部門號、平均工資、最高工資

 select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000;

 我們這里對數(shù)據(jù)分組作一個小小的總結(jié):
 1。分組函數(shù)只能出現(xiàn)在選擇列表、having、order by子句種
 2. 如果在select 語句種同時包含有g(shù)roup by ,having ,order by 那么他們的順序是
group by , having , order by .
 
 3。在選擇列種如果有列、表達式、和分組函數(shù),那么這些列和表達式必須有一個出現(xiàn)在group by 子句中,
否則就會出錯
 
 如select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000;
這里deptno就一定要出現(xiàn)在 group by 中 呵呵

 3)rollup 和 cube
 在直接使用group by 執(zhí)行數(shù)據(jù)統(tǒng)計時,只會生成列的統(tǒng)計數(shù)據(jù),但是可能這樣還是不能滿足你的需求,你可
能希望產(chǎn)生橫向或是縱向的統(tǒng)計結(jié)果,這是可以使用rollup cube

 思考:
 
 3.2連接查詢
 連接查詢是指基于兩個和兩個以上的表或是視圖的查詢.在實際應(yīng)用中,查詢單個表可能不能滿足你的需求,
(如顯示sales部門位置和其員工的姓名),這種情況下需要使用到連接查詢(dept表和emp表)
 
 3.2.1相等連接
 
 1)相等連接
 請思考:顯示雇員名,雇員工資及所在部門的名字
 select ename ,sal ,dname from emp ,dept where emp.deptno=dept.deptno
 2)使用and指定其它條件
 請思考:如何顯示部門號為10的部門名、員工名和工資

 select ename ,sal ,dname from emp ,dept where emp.deptno=dept.deptno and dept.deptno=10

 3.2.2不等連接

 在salgrade這張表中存放了工資級別的信息
 請思考如何顯示各個員工的姓名,工資,及其工資的級別
 select ename,sal,grade from emp , salgrade where sal between losal and hisal
 

 3.2.3自連接

 自連接是指在同一張表的連接查詢。

 請思考:如何顯示某個員工的上級領(lǐng)導(dǎo)的姓名

 select manager.ename from emp manager,emp worker where manager.empno=worker.mgr and
worker.ename='BLAKE'
 
 
 
 3.2.4內(nèi)連接和外連接//不作要求
 
 3.3子查詢
 子查詢是指嵌入在其它sql語句中的select語句,也叫嵌套查詢

 3.3.1單行子查詢
 單行子查詢是指只返回一行數(shù)據(jù)的子查詢語句
 請思考:如何顯示與scott同一部門的所有員工
 select ename,sal,deptno from emp where deptno=(select deptno from emp where ename='soctt');

 3.3.2多行子查詢
 多行子查詢指返回多行數(shù)據(jù)的子查詢
 1)在多行子查詢中使用in操作符號
 請思考:如何查詢匹配于部門10員工的崗位的雇員名、崗位、工資、部門號
 select ename,job,sal,deptno from emp where job in (select distinct job from emp where
deptno=10);
 2)在多行子查詢中使用all操作符

 請思考:如何顯示工資比部門30的所有員工的工資高的員工的姓名、工資和部門號
 select ename,sal,dept from emp where sal>all (select sal from emp where deptno=30);
 
 3)在多行子查詢中使用any操作符
 請思考:如何顯示工資比部門30的任意一個員工的工資高的員工的姓名、工資和部門號
 select ename,sal,dept from emp where sal>any (select sal from emp where deptno=30);

 4)多列子查詢
 單行子查詢是指子查詢只返回單列、單行數(shù)據(jù),多行子查詢是指返回單列多行數(shù)據(jù),都是針對單列而言的,而
多列子查序則是指查詢返回多個列數(shù)據(jù)的子查詢語句
 請思考如何查詢于smith部門和崗位完全相同的所有雇員
 select ename,job,sal,deptno from emp where (deptno,job)=(select deptno,job form emp where
ename='smith');

 3.3.3其它子查訊
 1)相關(guān)子查詢
 
 在子查詢中使用exists謂詞來實現(xiàn)
 請思考如何顯示工作在new york的員工

 select ename,job,sal,deptno from emp where exists (select 1 from dept where
dept.deptno=emp.deptno and dept.loc='new york');
 
 2)在from子句中使用子查詢

 請思考:如何顯示高于部門平均工資的員工的信息

 這里需要說明的當(dāng)在from子句中使用子查詢時,該子查詢會被作為一個視圖來對待,因此頁叫作內(nèi)嵌視圖,當(dāng)
在from子句中使用子查訊時,必須給子查詢指定別名.

 select ename,job,sal from emp ,(select deptno,avg(sal) avgsal from emp group by deptno) dept
where emp.deptno=dept.deptno and emp.sal>dept.avgsal;

 
 3)在dml語句中使用子查詢(如insert ,update語句,delete)
 請大家思考什么是dml語句(......) data manipulate language

 請問如何將一張表的內(nèi)容(數(shù)據(jù))裝載到另一張表中,這個是在dba工作中經(jīng)常遇到的事情

 insert int employee (id,name,titel,salary) select empno,ename,job,sal from emp
 
 請思考:如何刪除emp表中所有sales(銷售部門)的員工//比如該公司要撤銷銷售部門

 delete from emp where deptno=(select deptno from dept where dname='sales');
 4)在ddl語句中使用子查詢
 出了可以在select,update,insert,delete語句中使用子查詢外,還可以在ddl(data definiton language)
中使用子查詢

 1)如何創(chuàng)建一張新表
 create table mytable (id,name,sal,job,deptno) as select empno,ename,sal,job,deptno from emp;
 3.3.4合并查詢
 有時在實際應(yīng)用中,為了合并多個select語句的結(jié)果,可以使用集合操作符號 union , union
all,intersect , minus

 1)union
 該操作符用于取得兩個結(jié)果集的并集。當(dāng)使用該操作符時,會自動去掉結(jié)果集中重復(fù)行,并且會以第一列進
行排序后顯示結(jié)果集.

 請思考: 如何顯示工資高于2500的員工和崗位是manager的員工(or)
 select ename,sal,job from emp where sal>2500 union select ename,sal,job from emp where
job='manager';

 2)union all
 該操作賦于union相似,但是它不會取消重復(fù)行,而且不會排序.
 
 select ename,sal,job from emp where sal>2500 union all select ename,sal,job from emp where
job='manager';
 
 3)intersect

 使用該操作符用于取得兩個結(jié)果集的交集,并以第一列排序

 請思考: 如何顯示工資高于2500的員工并且崗位是manager的員工(and)

select ename,sal,job from emp where sal>2500 intersect select ename,sal,job from emp where
job='manager';
 
 4)minus
 使用該操作符用于取得兩個結(jié)果集的查集,它只會顯示存在第一個集合中,而不存在第二個集合中的數(shù)據(jù).
并以第一列排序
 
請思考: 如何顯示工資高于2500的員工并且崗位不是manager的員工(and)

select ename,sal,job from emp where sal>2500 minus select ename,sal,job from emp where job='manager';
 

 3.3.4其它復(fù)雜查詢
 
 請思考; 如何查詢部門工資總和高于員工工資總和1/3的部門名及工資總和(兩次使用相同子查詢)
 select dname,sum(sal) as dept_total from emp,dept where emp.deptno=dept.deptno group by dname
having sum(sal)>(select sum(sal)*1/3 from emp,dept where emp.deptno=dept.deptno)
 
 
 請思考:在 sql語句中是否可以使用if...then...else的語法(case);

        使用case 表達式時,使用when指定條件語句.下面我給大家舉例說明

 select ename,sal,case when sal>3000 then 3 when sal>2000 then 2 else 1 end grade from emp
where deptno=10;

========================================================================================
考慮給大家用eclipse+myeclipse--->struts工程
考慮用一個jdbc的案例去連接數(shù)據(jù)庫scott/ebook
 
 
二   oracle數(shù)據(jù)庫的創(chuàng)建
 創(chuàng)建數(shù)據(jù)庫有兩種方法,一是通過oracle提供的向?qū)Чぞ?database configuration assistant)創(chuàng)建、修改
、刪除數(shù)據(jù)庫;另外我們可以用手工步驟直接創(chuàng)建.
 1)啟動 dbca
 這里我們需要說明在運行dbca時關(guān)閉其它的數(shù)據(jù)庫.如演示的情況
 2)選擇創(chuàng)建數(shù)據(jù)庫的類型:
 2.1數(shù)據(jù)倉庫
 
 2.2通用數(shù)據(jù)庫
 2.3新數(shù)據(jù)庫
 2.4事務(wù)處理
 3)確定數(shù)據(jù)庫庫的名字、數(shù)據(jù)庫實例、核心字符集.
 這里我們需要給各位說明一下:數(shù)據(jù)庫是"database_name.database_domain"形式,比如mytest.us.acme.com
這里mytest是數(shù)據(jù)庫名,us.acme.com是數(shù)據(jù)庫所在的數(shù)據(jù)庫域,要求在同一個數(shù)據(jù)庫域中不能有相同的數(shù)據(jù)庫中.
 這里需要說明的是數(shù)據(jù)庫名是一個長度不超過8個字符的字符串,可以包含字母、數(shù)字、及其它字符。域部分
是一個長度不超過128個字符的字符串,同樣也可以包含字母、數(shù)字、及其它字符..
 4)確定數(shù)據(jù)庫網(wǎng)絡(luò)連接模式
 4.1專用服務(wù)器模式
  要求每個用戶進程都有專用的服務(wù)器進程。每增加一個客戶端,oracle服務(wù)器就自動的增加一個服
務(wù)器進程。
 4.2共享服務(wù)器模式
  共享服務(wù)器模式也叫多線程服務(wù)器體系結(jié)構(gòu)(multi_threaded server architecture mts),這種配
置允許大量用戶進程共享少量服務(wù)器進程的服務(wù)器,因此可以支持更多的用戶數(shù)量。在這種配置中,允許少量服務(wù)器
進程對大量的客戶機提供服務(wù)。共享服務(wù)器模式與專用服務(wù)器相比,當(dāng)用戶數(shù)量增加是,mts減少了大量內(nèi)存的使用
。調(diào)整和優(yōu)化全部系統(tǒng)性能,充分使用了網(wǎng)絡(luò)連接共享。
 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧洲偷拍视频中文字幕| 亚洲色图欧美另类人妻| 午夜视频免费观看成人| 真实国产乱子伦对白视频不卡| 久草视频在线视频在线观看| 欧美有码黄片免费在线视频| 成年人视频日本大香蕉久久| 婷婷基地五月激情五月| 亚洲视频一级二级三级| 国产又粗又猛又爽色噜噜| 日韩人妻av中文字幕| 在线懂色一区二区三区精品| 国产精品日本女优在线观看| 欧美日韩精品一区二区三区不卡| 视频一区二区黄色线观看| 东京热男人的天堂一二三区| 欧美一区二区三区十区| 精品国产亚洲区久久露脸| 字幕日本欧美一区二区| 美国欧洲日本韩国二本道| 国产男女激情在线视频| 亚洲做性视频在线播放| 亚洲一区二区三区福利视频| 国产成人精品久久二区二区| 福利新区一区二区人口| 91久久精品在这里色伊人| 加勒比系列一区二区在线观看 | 人妻久久一区二区三区精品99| 国产精品成人一区二区在线| 亚洲国产色婷婷久久精品| 久久经典一区二区三区| 一区二区不卡免费观看免费| 国产欧美日韩视频91| 国产又色又爽又黄又免费| 午夜直播免费福利平台| 亚洲一级二级三级精品| 91免费一区二区三区| 太香蕉久久国产精品视频| 日本熟女中文字幕一区| 字幕日本欧美一区二区| 国产精品福利精品福利|