Oracle學(xué)習(xí)筆記 實(shí)現(xiàn)查詢(xún)From子句,where子句,order by子句
day01.目標(biāo)
1. 安裝Oracle,配置環(huán)境
2. 實(shí)現(xiàn)查詢(xún)From子句
3. 實(shí)現(xiàn)查詢(xún)where子句
4. 實(shí)現(xiàn)查詢(xún)order by子句
一、環(huán)境安裝
1. 登錄:以管理員身份登錄
sqlplus 登錄名/密碼
管理員身份登錄:sqlplus system/123456
2. 登錄后,導(dǎo)入案例。下載scott.sql文件,執(zhí)行下面一行的命令
SQL>@"E:\文檔\oracle\java 19\day01\script\scott.sql";
此時(shí)我們擁有非管理員的用戶(hù):scott
3. 激活scott的賬號(hào),激活用scott可登錄
alter user scott identified by tiger;
alter user 登錄 identified by 登錄密碼;
? ?此時(shí)如果成功:
SQL> show user
顯示:USER 為 "SCOTT"
4. 退出system管理登錄,重新以scott/tiger登錄
C:\..\sqlplus scott/tiger
登錄成功
SQL> desc dept;
如成功
名稱(chēng)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 是否為空? 類(lèi)型
? ----------------------------------------- -------- ------------------
? DEPTNO? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NOT NULL NUMBER(2)
? DNAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? VARCHAR2(14)
? LOC? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? VARCHAR2(13)
---------------------------------------------------------------------------------------------
二、sql命令
0. 在Oracle環(huán)境下清空屏幕
SQL> host cls;
1. 查看表結(jié)構(gòu)
SQL> desc 表名;
例如: desc dept; 查看dept部門(mén)表的表結(jié)構(gòu)
desc emp; 查看emp員工表的表結(jié)構(gòu)
2.專(zhuān)業(yè)詞匯
數(shù)據(jù)庫(kù):存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù)。
數(shù)據(jù)存儲(chǔ)經(jīng)歷的階段
人工階段 -- 很久很久以前...有一個(gè)屋子放置一臺(tái)(巨大個(gè)的)計(jì)算機(jī),用于實(shí)現(xiàn)科學(xué)計(jì)算。
文件階段 -- 用文件實(shí)現(xiàn)【永久存儲(chǔ)】
數(shù)據(jù)庫(kù)階段--用數(shù)據(jù)庫(kù)實(shí)現(xiàn)存儲(chǔ)
常見(jiàn)關(guān)系型數(shù)據(jù)庫(kù)
DB2 -- IBM
Oracle -- Oracle公司(甲骨文)
Sql Server -- 微軟
MySQL -- Oracle公司
java程序猿必備關(guān)系數(shù)據(jù)庫(kù):Oracle\MySql
數(shù)據(jù)庫(kù)分類(lèi)
非關(guān)系型數(shù)據(jù)庫(kù): 后續(xù)課程有說(shuō)
關(guān)系型: 層次結(jié)構(gòu)、網(wǎng)狀結(jié)構(gòu)、關(guān)系型數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)系統(tǒng)
DB -- 數(shù)據(jù)庫(kù)
RDB -- 關(guān)系型數(shù)據(jù)庫(kù)
RDBMS -- 關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)
數(shù)據(jù)庫(kù)存儲(chǔ)的基本單位
表(實(shí)體描述) -- class Student{... ...}
字段(列) -- 屬性
值(行) -- 實(shí)體對(duì)象值
dept表 列
行 DEPTNO DNAME? ? ? ? ? ? ? ? ? ? ? ? LOC
------- ---------------------------- --------------------------
? ? 10 ACCOUNTING? ? ? ? ? ? ? ? ? ?NEW YORK
? ? ? 20 RESEARCH? ? ? ? ? ? ? ? ? ? ?DALLAS
? ? ? 30 SALES? ? ? ? ? ? ? ? ? ? ? ? CHICAGO
? ? ? 40 OPERATIONS? ? ? ? ? ? ? ? ? ?BOSTON
Oracle常見(jiàn)數(shù)據(jù)類(lèi)型:
數(shù)值型 number(有效長(zhǎng)度,小數(shù)點(diǎn)保留位數(shù)); 舉栗:number(10,2) 12345678.12?
字符
可變長(zhǎng)度字符 varchar2(有效長(zhǎng)度) 舉栗:varchar2(5) 'ab' 實(shí)際存 'ab'
? ? ? varchar2(5) 'abcde' 最多存5個(gè)
不可變長(zhǎng)度字符 char(有效長(zhǎng)度) 舉栗:char(5) 'ab' 實(shí)際存 'ab? ?'
? ? ? char(5) 'abcde' 最多存5個(gè)
char當(dāng)實(shí)際存儲(chǔ)字符不足時(shí)補(bǔ)空格,varchar2按實(shí)際字符長(zhǎng)度存儲(chǔ)不補(bǔ)空格
日期 date ... 月/日/年 小時(shí):分鐘:秒 ...
3.查詢(xún)一個(gè)表的內(nèi)容:from子句
前導(dǎo)條件:登錄名scott 密碼tiger
3.1 查詢(xún)dept部門(mén)表的所有字段信息
select * from dept;
*表示所有的列字段: deptNo,dName,loc
3.2 查詢(xún)顯示emp員工表中:?jiǎn)T工編號(hào)、員工姓名、工資、獎(jiǎng)金、部門(mén)編號(hào)
語(yǔ)法:select 列名1,列名2,...,列名N from 表名;
練習(xí):select empNo,eName,sal,comm,deptNo from emp;
3.3 查詢(xún)顯示dept部門(mén)的:部門(mén)編號(hào),部門(mén)名稱(chēng),所在地區(qū)
select deptNo,dName,loc from dept;
--【總結(jié)】from子句-------------------------------------------------------------------------------------
查詢(xún)一個(gè)表的所有字段:字段名可用* 代替。
select 列名1,列名2,... ... ,列名N from 表名;
select? * from 表名;
4. from 子句進(jìn)階
4.1 別稱(chēng),給當(dāng)前字段或這個(gè)表起外號(hào):顯示部門(mén)時(shí)統(tǒng)一部門(mén)字段標(biāo)題dXxx的格式。
語(yǔ)法:select 列名1? 別稱(chēng)1,列名2? 別稱(chēng)2,... ,列名N 別稱(chēng)N from 表名;
默認(rèn):select deptNo,dName,loc from dept;?
練習(xí):select deptNo dNo,dName,loc dLoc from dept;
思考:
員工表emp里有字段:empNo,eName...deptNo(部門(mén)編號(hào))
部門(mén)表dept里有字段:deptNo(部門(mén)編號(hào)),dName,loc?
列字段同名了,此時(shí)必須用別稱(chēng)來(lái)區(qū)分
4.2 數(shù)學(xué)運(yùn)算:+ - * / 求當(dāng)前員工的年薪(忽略獎(jiǎng)金) = 月薪*12. 顯示員工姓名、月薪、年薪
select eName,sal, sal*12 from emp; 顯示標(biāo)題eName,sal,sal*12
select eName,sal, sal*12 yearSal from emp; 顯示標(biāo)題eName,sal,yearSal?
思考:?jiǎn)T工當(dāng)月實(shí)發(fā)工資=工資sal+提成comm ,顯示員工姓名和實(shí)發(fā)工資
select eName,sal,comm,sal+comm from emp; 此時(shí)沒(méi)獎(jiǎng)金的人沒(méi)有實(shí)發(fā)工資,
oracle中 運(yùn)算數(shù)1+運(yùn)算數(shù)2 任何1個(gè)是null結(jié)果是null
當(dāng)某個(gè)員工沒(méi)有績(jī)效獎(jiǎng)金comm是,工資sal+獎(jiǎng)金comm顯示結(jié)果是null
沒(méi)有控制處理時(shí):select eName,sal,comm,sal+comm money from emp;
ENAME? ? ? ? ? ? ? ? ? ? ? ?SAL? ? ? ?COMM? ? ? MONEY
-------------------- ---------- ---------- ----------
SMITH ? ? 800
... ...
4.3 null值的處理,查詢(xún)獎(jiǎng)金是null時(shí)依然計(jì)算實(shí)發(fā)工資?
語(yǔ)法:nvl(字段,新值) 功能:將字段里時(shí)null的內(nèi)容替換成新值
s
練習(xí):將獎(jiǎng)金是null的顯示0
select eName,nvl(comm,0) from emp;
練習(xí):當(dāng)獎(jiǎng)金是Null時(shí)依然計(jì)算實(shí)發(fā)工資(sal+comm)
select eName,sal,nvl(comm,0) cm, sal+nvl(comm,0) money from emp;
顯示結(jié)果:
ENAME? ? ? ? ? ? ? ? ? ? ? ?SAL? ? ? ? ?CM? ? ? MONEY
-------------------- ---------- ---------- ----------
SMITH? ? ? ? ? ? ? ? ? ? ? ?800? ? ? ? ? 0? ? ? ? 800
... ...
練習(xí):查詢(xún)所有員工年薪和年度提成(顯示員工姓名、年薪y(tǒng)earSal、年度提成yearComm)
ename sal*12 nvl(comm,0)*12==對(duì)
select eName, sal*12 , nvl(comm,0)*12? from emp;
? ? ? 完美要求可加入別稱(chēng)
select eName, sal*12 yearSal, nvl(comm,0)*12 yearComm? from emp;
4.4 字符鏈接。 當(dāng)需要有顯示前綴、后綴、中間鏈接賦的時(shí)候可用
練習(xí):顯示 部門(mén)名_所在地區(qū)
java的字符鏈接:? "abc"+"123" 結(jié)果是 "abc123"
oracle的字符鏈接:'abc'||'123' 結(jié)果是 'abc123' select 'abc'||'123' from dual;
答:select dName||'_'||loc from dept;
練習(xí):要求姓名以 Mr.開(kāi)頭
答:select 'Mr.'||eName,sal from emp;
思考:顯示 abc 成 'abc' 即顯示結(jié)果中有'號(hào),特殊符號(hào)的處理
思考答1:select '''abc'''? from dual;
思考答2:select ''''||'abc'||'''' from dual;
5、where子句 :有條件查詢(xún) ,表達(dá)滿(mǎn)足什么條件顯示數(shù)據(jù)。結(jié)合from使用
5.1 查工資大于1000的員工
select * from emp where sal>=1000; --顯示當(dāng)前工資在1000及以上員工的所有字段
select eName,sal from emp where sal>=1000; --查詢(xún)工資大于1000及以上員工的姓名和工資
5.2 姓名是WARD的員工
select * from emp where eName = 'WARD';
select * from emp where eName = 'Ward'; 還能出來(lái)結(jié)果嗎?答不出,'值'區(qū)分大小寫(xiě)
5.3 查詢(xún)部門(mén)所在地區(qū)紐約的部門(mén)信息是什么?
select * from dept where loc='NEW YORK';
5.4 查沒(méi)獎(jiǎng)金的員工信息。
你們認(rèn)為:select eName,comm from emp where comm = null;
答案1:select eName,comm from emp where nvl(comm,0) = 0 ;
6、order by 子句:排序,按指定規(guī)則排序
6.1 按部門(mén)編號(hào)從大到寫(xiě)顯示部門(mén)信息
思路:排序依據(jù)是部門(mén)編號(hào),排序規(guī)則是從大到小
答:select * from dept order by deptNo desc;? --desc降序從大到小的排序規(guī)則。asc升序
6.2 按部門(mén)名稱(chēng)升序排列顯示
答: select * from dept order by dname asc;
--【day01總結(jié)】---------------------------------------------------------------------------
?查部門(mén)表的所有內(nèi)容:
select * from dept;
select deptNo,dname,loc from dept;
?查部門(mén)編號(hào)是20的部門(mén)
select * from dept where deptNo=20;
?查部門(mén)所在區(qū)域是紐約的部門(mén)
select * from dept where loc='NEW YORK';
?查部門(mén)信息按部門(mén)編號(hào)的降序顯示
select * from dept order by deptNo desc;