Oracle安裝骑脱、操作菜枷、各種命令筆記

Oracle的安裝:

我們就用虛擬機(jī)來模擬服務(wù)器來安裝oracle數(shù)據(jù)庫吧。
虛擬機(jī)選擇vmware 隨便挑選一個(gè)版本下載惜姐,網(wǎng)上有很多密鑰直接輸入進(jìn)去就注冊(cè)成功了犁跪。接著下載一個(gè)操作系統(tǒng)椿息,鏈接: https://pan.baidu.com/s/1r-dYtkU0DCZ8b7dG1MC1mw 提取碼: d4yn
這個(gè)是vmware的復(fù)制版本 歹袁,直接在vmware打開windows系統(tǒng)就安裝成功了。這個(gè)是windowsxp系統(tǒng)寝优,直接用vmware打開就可以了条舔,不需要安裝,非常省事乏矾!

vmware虛擬機(jī)的網(wǎng)絡(luò)配置:

這個(gè)步驟非常重要孟抗!要讓虛擬機(jī)的操作系統(tǒng)能上網(wǎng),主機(jī)和虛擬機(jī)還能通信(也就是相互能ping通)钻心!
點(diǎn)擊“編輯” - 選擇 “虛擬網(wǎng)絡(luò)編輯器”


然后在彈出的界面選擇VMnet1網(wǎng)絡(luò)凄硼,然后還原默認(rèn)設(shè)置。最后確認(rèn)捷沸。


接著點(diǎn)擊“虛擬機(jī)” - “設(shè)置”


按下面步驟選擇摊沉,最后確定。這樣虛擬機(jī)和主機(jī)就可以互ping通了痒给,虛擬機(jī)也可以上網(wǎng)了说墨。


啟動(dòng)虛擬機(jī)操作系統(tǒng)。我們來安裝oracle數(shù)據(jù)庫苍柏。
準(zhǔn)備下載oracle數(shù)據(jù)庫
鏈接: https://pan.baidu.com/s/1WmPFs2fvwnkS1mLi8LuoAA 提取碼: mnmn


這個(gè)包里面三個(gè)文件夾尼斧,database就是orcale的數(shù)據(jù)庫,其他兩個(gè)都是連接數(shù)據(jù)庫的客戶端軟件试吁。

怎么把下載的database放到虛擬機(jī)中呢棺棵?

直接搞一個(gè)共享文件夾,然后在虛擬機(jī)的操作系統(tǒng)中的網(wǎng)絡(luò)里面添加一個(gè)網(wǎng)絡(luò)就可以看見這個(gè)共享文件夾了熄捍。




按下面的步驟來搞烛恤!


這樣虛擬機(jī)就可以訪問剛才下載到主機(jī)的database文件夾了。
其實(shí)你也可以不用虛擬機(jī)安裝治唤,直接安裝在本機(jī)上棒动。就省掉了以上步驟!1鎏怼船惨!

正式安裝oracle

輸入口令和確認(rèn)口令柜裸,這個(gè)是 注:此口令即是管理員密碼。

檢查先決條件粱锐,選中紅框所示的選擇框疙挺,如下圖:


點(diǎn)擊“下一步”,出現(xiàn)“概要”界面怜浅,點(diǎn)擊“安裝”铐然。



出現(xiàn)安裝進(jìn)度條,等待安裝完成恶座,如下圖:



安裝完成后搀暑,自動(dòng)運(yùn)行配置向?qū)В缦聢D跨琳,等待其完成:

完成后自点,出現(xiàn)“口令管理”界面,點(diǎn)擊“口令管理”脉让,如下圖:


將 SCOTT 和 HR用戶的溝去掉(解鎖這兩個(gè)賬戶桂敛,是為了我們之后方便測(cè)試,這兩個(gè)賬號(hào)下面有一些測(cè)試表)溅潜,如下圖所示术唬,點(diǎn)擊“確定”:



回到“口令管理”界面,點(diǎn)擊“確定”滚澜,如下圖:



自此oracle的安裝就結(jié)束了粗仓。
配置一下oracle

C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN 這個(gè)文件夾下面有兩個(gè)配置文件需要修改一下,我安裝到虛擬機(jī)C盤的所以是這個(gè)路徑博秫,你自己安裝在哪里的潦牛,按這個(gè)思路去找


一個(gè)listener 是配置監(jiān)聽的。另一個(gè)tnsnames.ora文件就是客戶端鏈接服務(wù)端要用到的配置文件(主要等一會(huì)兒PL/sql軟件要用到這個(gè)配置文件挡育,需要把它復(fù)制到你的本地
把這兩個(gè)文件下的IP換成虛擬機(jī)的IP地址巴碗。


在服務(wù) 管理里面把這兩個(gè)服務(wù)設(shè)置成自動(dòng)啟動(dòng)并開啟這兩個(gè)服務(wù)。


oracle安裝完成之后即寒,其實(shí)他也一起安裝一個(gè)sqlplus在你的系統(tǒng)里面橡淆,這個(gè)是一個(gè)命令行的客戶端。我們打開cmd來測(cè)試一下oracle是否安裝成功母赵!

輸入sqlplus 回車
然后輸入用戶名 system
密碼:root (這個(gè)就是安裝過程讓你輸入口令的)出現(xiàn)下面界面就說明你安裝成功了逸爵!


在本機(jī)上安裝PLSQL Developer 客戶端軟件

PLSQL Developer這個(gè)軟件是一個(gè)帶UI界面的oracle數(shù)據(jù)庫管理工具。依賴于instantclient這個(gè)軟件凹嘲。這個(gè)軟件就安裝在你本地上就可以了师倔。

傻瓜式安裝即可,不建議漢化周蹭, 最后會(huì)提示輸入序列號(hào)(破解) 趋艘,打開plsql-sn.txt復(fù)制序列號(hào)疲恢,輸入即可。重要提示:不要把plsql developer 安裝在有括號(hào)的目錄下瓷胧,否則會(huì)出現(xiàn)連不上數(shù)據(jù)庫的情況显拳,安裝目錄也不要出現(xiàn)中文。

安裝完之后搓萧,直接打開杂数,然后選擇取消,為什么取消呢是為了設(shè)置一下instantclient這個(gè)軟件的路徑瘸洛。剛才不是說了這個(gè)plsql軟件是依賴于instantclient軟件的揍移,所以需要配置一下才能使用。


點(diǎn)擊Tools -> preferences


配置連接數(shù)據(jù)庫的快捷方式(當(dāng)然你也可以不用弄货矮,直接在database那個(gè)輸入框那里直接輸入IP地址:端口號(hào)/tablespace

在虛擬機(jī)中把tnsnames.ora這個(gè)文件copy到本地來(隨便放到哪里羊精,算了直接放到instantclient這個(gè)文件夾下面)然后配置環(huán)境變量
值就是tnsnames.ora這個(gè)文件所在的文件夾

配置完了之后呢,就重新打開PL/SQL這個(gè)軟件


數(shù)據(jù)庫的操作

創(chuàng)建表空間囚玫,c盤下面就會(huì)多一個(gè)test.dbf文件,大小是100M读规,如果數(shù)據(jù)裝滿了抓督,他會(huì)每10M的自動(dòng)擴(kuò)容。這個(gè)表空間是裝各種表的束亏。這個(gè)文件的后綴名铃在,你可以用dbf和ora,這兩個(gè)后綴名沒有區(qū)別碍遍。創(chuàng)建表空間會(huì)在物理磁盤上建立一個(gè)數(shù)據(jù)文件定铜,作為數(shù)據(jù)庫對(duì)象(用戶、表怕敬、存儲(chǔ)過程等等)的物理存儲(chǔ)空間揣炕。

create tablespace test
datafile 'c:\test.dbf'
size 100m
autoextend on
next 10m;

你不創(chuàng)建表空間。oracle安裝的時(shí)候就已經(jīng)默認(rèn)創(chuàng)建了一些表空間东跪,可以通過以下sql來查看默認(rèn)創(chuàng)建了5個(gè)人表空間畸陡,以及他們存放的路徑。

select * from dba_data_files;

刪除表空間虽填。如果你直接在C盤中去直接刪test.dbf這個(gè)文件是刪不掉的丁恭。需要先用命令執(zhí)行了才能把這個(gè)文件刪除掉。

drop tablespace test;

創(chuàng)建用戶斋日,是為了跟這個(gè)表空間進(jìn)行關(guān)聯(lián)牲览,oracle都是通過用戶管理表的。以下命令就是創(chuàng)建一個(gè)root賬戶恶守,密碼也是root第献,默認(rèn)的表空間是test跛蛋。創(chuàng)建用戶必須為其指定表空間,如果沒有顯性指定默認(rèn)表空間痊硕,則指定為users表空間赊级;創(chuàng)建用戶后,可以在用戶上岔绸,創(chuàng)建表理逊、存儲(chǔ)過程等等其他數(shù)據(jù)庫對(duì)象。

create user root
identified by root
default tablespace test;
  • 當(dāng)然我們還可以把改用戶的默認(rèn)表空間給改了
alter user root default tablespace test2;
  • 那改成我們創(chuàng)建的root用戶是存在哪里的呢盒揉?
select * from dba_users;

我們的用戶就放在users表中的晋被。那這個(gè)users表是存放在哪個(gè)表空間的呢?
我們可以通過先查詢所有的表刚盈,然后在看users表存在在那個(gè)表空間羡洛。

select * from all_tables;
-- 或者直接使用下面這一句可查看users表所屬的表空間。
-- select * from all_tables where table_name='USER$';

授權(quán)用戶藕漱。創(chuàng)建完用戶欲侮,還需要給用戶授權(quán)才能登陸使用才行。也就是需要給用戶分配角色才能使用肋联。Oracle 中已存在三個(gè)重要的角色:connect 角色威蕉,resource角色,dba角色橄仍。

  1. CONNECT 角色: --是授予最終用戶的典型權(quán)利韧涨,最基本的
  • ALTER SESSION --修改會(huì)話
  • CREATE CLUSTER --建立聚簇
  • CREATE DATABASE LINK --建立數(shù)據(jù)庫鏈接
  • CREATE SEQUENCE --建立序列
  • CREATE SESSION --建立會(huì)話
  • CREATE SYNONYM --建立同義詞
  • CREATE VIEW --建立視圖
  1. RESOURCE 角色: --是授予開發(fā)人員的
  • CREATE CLUSTER --建立聚簇
  • CREATE PROCEDURE --建立過程
  • CREATE SEQUENCE --建立序列
  • CREATE TABLE --建表
  • CREATE TRIGGER --建立觸發(fā)器
  • CREATE TYPE --建立類型
  1. DBA角色:擁有全部特權(quán),是系統(tǒng)最高權(quán)限侮繁,只有 DBA才可以創(chuàng)建數(shù)據(jù)庫結(jié)構(gòu)虑粥,并且系統(tǒng)權(quán)限也需要DBA授出,且 DBA用戶可以操作全體用戶的任意基表宪哩,包括刪除
grant dba to root;
-- 或者更加細(xì)致的授權(quán)
-- grant create session to 用戶名       --這個(gè)是給用戶賦予登錄的權(quán)限娩贷。
-- grant create table to  用戶名          --給用戶賦予表操作的權(quán)限
-- grant unlimited tablespace to  用戶名     --給用戶賦予表空間操作的權(quán)限
-- grant select any table to 用戶名         --給該用戶賦予訪問任務(wù)表的權(quán)限   同理可以賦予update 和delete 的

查看當(dāng)前用戶的權(quán)限

select * form user_sys_privs;

oracle的數(shù)據(jù)類型

  • CHAR 固定長度字符串 最大長度2000 bytes
  • VARCHAR2 可變長度的字符串 最大長度4000 bytes 可做索引的最大長度749
  • NCHAR 根據(jù)字符集而定的固定長度字符串 最大長度2000 bytes
  • NVARCHAR2 根據(jù)字符集而定的可變長度字符串 最大長度4000 bytes
  • DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 經(jīng)過嚴(yán)格測(cè)試,無千蟲問題
  • LONG 超長字符串 最大長度2G(231-1) 足夠存儲(chǔ)大部頭著作
  • RAW 固定長度的二進(jìn)制數(shù)據(jù) 最大長度2000 bytes 可存放多媒體圖象聲音等
  • LONG RAW 可變長度的二進(jìn)制數(shù)據(jù) 最大長度2G 同上
  • BLOB 二進(jìn)制數(shù)據(jù) 最大長度4G
  • CLOB 字符數(shù)據(jù) 最大長度4G
  • NCLOB 根據(jù)字符集而定的字符數(shù)據(jù) 最大長度4G
  • BFILE 存放在數(shù)據(jù)庫外的二進(jìn)制數(shù)據(jù) 最大長度4G
  • ROWID 數(shù)據(jù)表中記錄的唯一行號(hào) 10 bytes ********.****.****格式斋射,*為0或1
  • NROWID 二進(jìn)制數(shù)據(jù)表中記錄的唯一行號(hào) 最大長度4000 bytes
  • NUMBER(P,S) 數(shù)字類型 P為總位數(shù)育勺,S為小數(shù)位數(shù)
  • DECIMAL(P,S) 數(shù)字類型 P為總位數(shù),S為小數(shù)位數(shù)
  • INTEGER 整數(shù)類型 小的整數(shù)
  • FLOAT 浮點(diǎn)數(shù)類型 NUMBER(38)罗岖,雙精度
  • REAL 實(shí)數(shù)類型 NUMBER(63)涧至,精度更高

創(chuàng)建表

create table person(
pid number(11) primary key,
name char(24) not null,
phone number(11) unique,
class_name varchar(10),
bitrhday date
);

刪除表

drop table person;

新增一列,修改一列桑包,重名一列

alter table person add(addresss varchar(10) default '');
alter table person modify(addresss varchar(20) not null);
alter table person rename column addresss to address;

查詢表的字段

select * from user_tab_columns where table_name=upper('person');

新增南蓬、修改、刪除

insert into person (pid,name,phone,class_name,birthday,address) values 
(1,'熱巴',13666666666,'演員',to_date('1992-05-01','yyyy-MM-dd'),'北京市');
update person set class_name='演戲' where pid=1;
delete from person where pid=1;
select * from person;

這里出現(xiàn)了一個(gè)坑:查詢出來居然中文是一對(duì)問號(hào)。這里是由于服務(wù)器的數(shù)據(jù)庫字符集與客戶端的字符集不一致導(dǎo)致的亂碼赘方。
先查詢服務(wù)器的字符集烧颖,是這個(gè)SIMPLIFIED CHINESE_CHINA.ZHS16GBK

select userenv('language') from dual;

再查詢本地的字符集是SIMPLIFIED CHINESE

select * from V$NLS_PARAMETERS;

所以需要修改成一致的,我們就修改本地的字符集吧窄陡,設(shè)置環(huán)境變量NLS_LANGUAGE為SIMPLIFIED CHINESE_CHINA.ZHS16GBK

然后重新插入一條記錄炕淮,重新查詢出來中文就對(duì)啦!L病涂圆!


序列

在實(shí)際項(xiàng)目中每一張表會(huì)配一個(gè)序列,但是表和序列是沒有必然的聯(lián)系的币叹,一個(gè)序列被哪
一張表使用都可以润歉,但是我們一般都是一張表用一個(gè)序列。

在很多數(shù)據(jù)庫中都存在一個(gè)自動(dòng)增長的列,如果現(xiàn)在要想在 oracle 中完成自動(dòng)增長的功能,則只能依靠序列完成,所有的自動(dòng)增長操作,需要用戶手工完成處理颈抚。
范例:創(chuàng)建一個(gè) seqpersonid的序列,驗(yàn)證自動(dòng)增長的操作CREATE SEQUENCE testid;
序列創(chuàng)建完成之后,所有的自動(dòng)增長應(yīng)該由用戶自己處理,所以在序列中提供了以下的兩種操作:
nextval :取得序列的下一個(gè)內(nèi)容
currval :取得序列的當(dāng)前內(nèi)容

select testid.nextval from dual;
select testid.currval from dual;

在插入數(shù)據(jù)時(shí)需要自增的主鍵中可以這樣使用

insert into person (pid,name,phone,class_name,birthday,address) values 
(testid.nextval,'熱巴',13666666662,'演員',to_date('1992-05-01','yyyy-MM-dd'),'北京市');
使用scott用戶做一些復(fù)制的操作(這個(gè)賬號(hào)下有一些測(cè)試表和數(shù)據(jù)踩衩,scott賬戶的默認(rèn)密碼是tiger)

單行函數(shù)和數(shù)值函數(shù)

  • upper:搞成大寫
  • lower:搞成小寫
  • initcap:首字母大寫
  • concat:字符串連接
  • substr:字符串截取 substr(string string, int a, int b); a為要截取的開始位置,b為要截取的長度
  • TRANSLATE(char, from, to) : 返回將出現(xiàn)在from中的每個(gè)字符替換為to中的相應(yīng)字符以后的字符串贩汉。若from比to字符串長驱富,那么在from中比to中多出的字符將會(huì)被刪除。三個(gè)參數(shù)中有一個(gè)是空雾鬼,返回值也將是空值萌朱。
    • select translate('abcdefga','abc','wo') 返回值 from dual;
      分析:該語句要將'abcdefga'中的'abc'轉(zhuǎn)換為'wo',由于'abc'中'a'對(duì)應(yīng)'wo'中的'w', 故將'abcdefga'中的'a'全部轉(zhuǎn)換成'w'; 而'abc'中'b'對(duì)應(yīng)'wo'中的'o', 故將'abcdefga'中的'b'全部轉(zhuǎn)換成'o'; 'abc'中的'c'在'wo'中沒有與之對(duì)應(yīng)的字符, 故將'abcdefga'中的'c'全部刪除; 簡(jiǎn)單說來,就是將from中的字符轉(zhuǎn)換為to中與之位置對(duì)應(yīng)的字符策菜,若to中找不到與之對(duì)應(yīng)的字符,返回值中的該字符將會(huì)被刪除酒贬。在實(shí)際的業(yè)務(wù)中又憨,可以用來刪除一些異常數(shù)據(jù),比如表a中的一個(gè)字段t_no表示電話號(hào)碼锭吨,而電話號(hào)碼本身應(yīng)該是一個(gè)由數(shù)字組成的字符串蠢莺,為了刪除那些含有非數(shù)字的異常數(shù)據(jù),就用到了translate函數(shù)
  • replace(char, search_string,replacement_string):將char中的字符串search_string全部轉(zhuǎn)換為字符串replacement_string零如。
  • lengthb(string)計(jì)算string所占的字節(jié)長度:返回字符串的長度躏将,單位是字節(jié)
  • length(string)計(jì)算string所占的字符長度:返回字符串的長度,單位是字符
    對(duì)于單字節(jié)字符,LENGTHB和LENGTH是一樣的考蕾。如可以用length(‘string’)=lengthb(‘string’)判斷字符串是否含有中文祸憋。
    注:一個(gè)漢字在Oracle數(shù)據(jù)庫里占多少字節(jié)跟數(shù)據(jù)庫的字符集有關(guān),UTF8時(shí)肖卧,長度為三蚯窥。
  • round():默認(rèn)情況下 ROUND 四舍五入取整,可以自己指定保留的位數(shù)。
  • trunc(number,decimals) number:指需要截取的數(shù)字拦赠。TRUNC函數(shù)還可以截取數(shù)字和日期類型
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; --顯示當(dāng)前時(shí)間

select trunc(sysdate,'year') from dual; --截取到年(本年的第一天)

select trunc(sysdate,'q') from dual; --截取到季度(本季度的第一天)

select trunc(sysdate,'month') from dual; --截取到月(本月的第一天)

select trunc(sysdate,'') from dual; --為空

select trunc(sysdate) from dual; --截取到日(今天)

select to_char(trunc(sysdate),'yyyy-mm-dd hh24:mi:ss') from dual; --默認(rèn)截取到日(當(dāng)日的零點(diǎn)零分零秒) 

select trunc(sysdate,'day') from dual; --截取到周(本周第一天巍沙,即上周日)

select trunc(sysdate,'iw') from dual; --本周第2天,即本周一

select to_char(trunc(sysdate,'dd'),'yyyy-mm-dd hh24:mi:ss') from dual; --截取到日(當(dāng)日的零點(diǎn)零分零秒)

select trunc(sysdate,'hh24') from dual; --截取到小時(shí)(當(dāng)前小時(shí)荷鼠,零分零秒)

select trunc(sysdate,'mi') from dual; --截取到分(當(dāng)前分句携,零秒)

select trunc(sysdate,'ss') from dual ;--報(bào)錯(cuò),沒有精確到秒的格式

select trunc(122.555) from dual t; --默認(rèn)取整

select trunc(122.555,2) from dual t;

select trunc(122.555,-2) from dual t;--負(fù)數(shù)表示從小數(shù)點(diǎn)左邊開始截取2位
  • mod(11, 2) :取余函數(shù) 11除以2的余數(shù)
  • nvl(字段,默認(rèn)值) : 如果字段為null允乐,則為默認(rèn)值

日期函數(shù)

  • 日期 – 數(shù)字 = 日期
  • 日期 + 數(shù)字 = 日期
  • 日期 – 日期 = 數(shù)字

范例:查詢雇員的進(jìn)入公司的周數(shù)矮嫉。分析:查詢雇員進(jìn)入公司的天數(shù)(sysdate – 入職日期)/7就是周數(shù)

select ename,(round(sysdate-hiredate)/7) from emp;

查詢所有雇員進(jìn)入公司的月數(shù)。分析:獲得兩個(gè)時(shí)間段中的月數(shù):MONTHS_BETWEEN()

select ename,round(months_between(sysdate,hiredate)) from emp;

查詢所有的雇員將將年月日分開喳篇,此時(shí)可以使用TO_CHAR 函數(shù)來拆分
拆分時(shí)需要使用通配符

  • 年:y, 年是四位使用 yyyy
  • 月:m, 月是兩位使用 mm 一位數(shù)字的時(shí)候會(huì)前面用零填充敞临,我們可以使用fm關(guān)鍵詞去掉前面的零
  • 日:d, 日是兩位使用 dd 一位數(shù)字的時(shí)候會(huì)前面用零填充,我們可以使用fm關(guān)鍵詞去掉前面的零
select ename,to_char(hiredate,'yyyy')年,to_char(hiredate,'MM')月,to_char(hiredate,'dd')日 from emp;
select ename,to_char(hiredate,'yyyy')年,to_char(hiredate,'fmMM')月,to_char(hiredate,'fmdd')日 from emp;

查詢所有的雇員的年薪麸澜。使用nvl函數(shù)

select ename,sal,comm,sal*12+nvl(comm,0) 年薪 from emp;

查詢出所有雇員的職位的中文名挺尿。使用decode函數(shù)類似于if...elseif...else。也可以使用case...when..then...when ...then...else...end

select ename,decode(job,'CLERK','業(yè)務(wù)員','SALESMAN','銷售','PRESIDENT','總裁','MANAGER','經(jīng)理','員工') from emp;
select t.empno,
t.ename,
case
when t.job = 'CLERK' then
'業(yè)務(wù)員'
when t.job = 'MANAGER' then
'經(jīng)理'
when t.job = 'ANALYST' then
'分析員'
when t.job = 'PRESIDENT' then
'總裁'
when t.job = 'SALESMAN' then
'銷售'
else
'員工'
end
from emp t
多行函數(shù)(聚合函數(shù))
  • count()
  • min()
  • max()
  • avg()
  • sum()

查詢每個(gè)部門的人數(shù)

select deptno,count(ename) from emp group by deptno;

按部門分組炊邦,查詢出部門名稱和部門的員工數(shù)量

select d.deptno,d.dname,count(ename)
from emp e,dept d
where e.deptno = d.deptno
group by d.deptno,d.dname;

查詢出部門人數(shù)大于 5 人的部門

select d.deptno,d.dname,count(ename)
from emp e,dept d
where e.deptno = d.deptno
group by d.deptno,d.dname having count(ename)>5;

查詢出部門平均工資大于 2000的部門

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

查詢員工表和部門表

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

查詢出雇員的編號(hào)编矾,姓名,部門的編號(hào)和名稱馁害,地址

select e.ename,e.empno,e.deptno,d.dname,d.loc
from emp e ,dept d
where e.deptno=d.deptno;

查詢出每個(gè)員工編號(hào)窄俏,姓名,部門名稱碘菜,工資等級(jí)和他的上級(jí)領(lǐng)導(dǎo)的姓名凹蜈,工資等級(jí)

select e.empno,
e.ename,
decode(s.grade,
1,'一級(jí)',
2,'二級(jí)',
3,'三級(jí)',
4,'四級(jí)',
5,'五級(jí)') grade,
d.dname,
e1.empno,
e1.ename,
decode(s1.grade,
1,'一級(jí)',
2,'二級(jí)',
3,'三級(jí)',
4,'四級(jí)',
5,'五級(jí)') grade
from emp e, emp e1, dept d, salgrade s, salgrade s1
where e.mgr = e1.empno
and e.deptno = d.deptno
and e.sal between s.losal and s.hisal
and e1.sal between s1.losal and s1.hisal

查詢比 7654工資高的雇員

select * from emp t1 where t1.sal>(select sal from emp where empno=7654);

查詢出比雇員 7654 的工資高,同時(shí)從事和 7788的工作一樣的員工

select * from emp t1 where t1.sal>(select sal from emp where empno=7654)
and t1.job = (select job from emp where empno=7788);

查詢 emp 表帶有 rownum 列

select rownum, t.* from emp t

我們可以根據(jù) rownum 來取結(jié)果集的前幾行忍啸,大于5小于11

select * from (select rownum rm, a.* from (select * from emp) a where rownum < 11) b where b.rm >5;
select * from (select rownum r ,emp.* from emp) b where b.r >5 and b.r <11;

視圖

視圖就是提供一個(gè)查詢的窗口仰坦,所有數(shù)據(jù)來自于原表。

創(chuàng)建視圖【必須有dba權(quán)限】

create view v_emp as select ename, job from emp;

修改視圖[不推薦]计雌,因?yàn)樵硪矔?huì)跟著一起修改

update v_emp set job='CLERK' where ename='ALLEN';
commit;

創(chuàng)建只讀視圖

create view v_emp1 as select ename, job from emp with read only;

視圖的作用

  • 第一點(diǎn): 使用視圖悄晃,可以定制用戶數(shù)據(jù),聚焦特定的數(shù)據(jù)凿滤。

    解釋: 在實(shí)際過程中妈橄,公司有不同角色的工作人員,我們以銷售公司為例的話眷蚓,采購人員溪椎,可以需要一些與其有關(guān)的數(shù)據(jù)沼侣,而與他無關(guān)的數(shù)據(jù),對(duì)他沒有任何意義轧膘,我們可以根據(jù)這一實(shí)際情況,專門為采購人員創(chuàng)建一個(gè)視圖,以后他在查詢數(shù)據(jù)時(shí)澡匪,只需select * from view_caigou 就可以啦。

  • 第二點(diǎn):使用視圖惦费,可以簡(jiǎn)化數(shù)據(jù)操作篮绰。

    解釋:我們?cè)谑褂貌樵儠r(shí),在很多時(shí)候我們要使用聚合函數(shù)贾漏,同時(shí)還要顯示其它字段的信息,可能還會(huì)需要關(guān)聯(lián)到其它表,這時(shí)寫的語句可能
    會(huì)很長,如果這個(gè)動(dòng)作頻繁發(fā)生的話沪伙,我們可以創(chuàng)建視圖县好,這以后围橡,我們只需要select * from view1就可以啦~,是不是很方便呀~

  • 第三點(diǎn):使用視圖缕贡,基表中的數(shù)據(jù)就有了一定的安全性

    因?yàn)橐晥D是虛擬的翁授,物理上是不存在的,只是存儲(chǔ)了數(shù)據(jù)的集合善绎,我們可以將基表中重要的字段信息黔漂,可以不通過視圖給用戶,視圖是動(dòng)態(tài)的數(shù)據(jù)的集合禀酱,數(shù)據(jù)是隨著基表的更新而更新炬守。同時(shí),用戶對(duì)視圖剂跟,不可以隨意的更改和刪除减途,可以保證數(shù)據(jù)的安全性。

  • 第四點(diǎn):可以合并分離的數(shù)據(jù)曹洽,創(chuàng)建分區(qū)視圖

    隨著社會(huì)的發(fā)展鳍置,公司的業(yè)務(wù)量的不斷的擴(kuò)大,一個(gè)大公司送淆,下屬都設(shè)有很多的分公司税产,為了管理方便,我們需要統(tǒng)一表的結(jié)構(gòu)偷崩,定期查看各公司業(yè)務(wù)情況辟拷,而分別看各個(gè)公司的數(shù)據(jù)很不方便,沒有很好的可比性阐斜,如果將這些數(shù)據(jù)合并為一個(gè)表格里衫冻,就方便多啦,這時(shí)我們就可以使用union關(guān)鍵字谒出,將各分公司的數(shù)據(jù)合并為一個(gè)視圖隅俘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末邻奠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子为居,更是在濱河造成了極大的恐慌碌宴,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颜骤,死亡現(xiàn)場(chǎng)離奇詭異唧喉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)忍抽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門八孝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸠项,你說我怎么就攤上這事干跛。” “怎么了祟绊?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵楼入,是天一觀的道長。 經(jīng)常有香客問我牧抽,道長嘉熊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任扬舒,我火速辦了婚禮阐肤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘讲坎。我一直安慰自己孕惜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布晨炕。 她就那樣靜靜地躺著衫画,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓮栗。 梳的紋絲不亂的頭發(fā)上削罩,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音费奸,去河邊找鬼鲸郊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛货邓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播四濒,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼换况,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼职辨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戈二,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤舒裤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后觉吭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年廓握,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鸿市。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徙硅,死狀恐怖榜聂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嗓蘑,我是刑警寧澤须肆,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站桩皿,受9級(jí)特大地震影響豌汇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泄隔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一拒贱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梅尤,春花似錦柜思、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缰揪,卻和暖如春陨享,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钝腺。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工抛姑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人艳狐。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓定硝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親毫目。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蔬啡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355