日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2018-06-22 第四十七天 oracle

發(fā)布時間:2023/12/31 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2018-06-22 第四十七天 oracle 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

SQL基本語句


一、單行函數(shù)

--創(chuàng)建scott 用戶??為了后面操作scott 用戶

--scott oracle 第一個員工??他有一只貓,叫tiger

create?user?scott?identified?by?tiger;

--一個用戶剛剛創(chuàng)建,連登錄的權(quán)限都沒有。需要給用戶分配權(quán)限。

--oracle 中定義了角色這個概念。角色是權(quán)限的集合。

--connect Resource

--授予scott 指定的權(quán)限

grant?connect,?resource?to?scott;


--scott 用戶一些權(quán)限去創(chuàng)建屬于soctt 的四張表。

--四張表

--bonus 獎金表??空表

--dept 部門表???部門編號deptno ??部門名稱dname ?部門所在地址loc

--emp ?員工表??員工編號??empno ?員工名稱??ename 工種??job ?上級編號??mgr ?入職日期?hiredate ?工資?sal ?獎金?comm 所在部門?deptno

--SALGRADE ?工資等級表???grade 等級???最低工資?losal ?最高工資??hisal


---創(chuàng)建scott 用戶,分配權(quán)限????scott 四張表


--基本的DQL語句


--注釋?使用?--


--最簡單的sql 語句

--查詢所有員工的信息

--需要告訴DBMS查詢那張表,說明查詢表的那些字段的數(shù)據(jù)

--from 后跟表的名稱???select 后跟的是?查詢的字段的內(nèi)容??* 是通配符,代表當前表的所有的字段。

select?*?from?emp

--顯示部分內(nèi)容?,需要顯示的字段使用逗號分割

select?empno,?ename,?job?from?emp


--使用算術(shù)表達式

--查詢員工的姓名,工作,年薪

select?*?from?emp

select?ename,?job,sal*12?from?emp

--任何數(shù)據(jù)和null 空做運算,結(jié)果還是空

select?ename,?job,sal*12+comm*12??from?emp

select?ename,job,sal*12,?comm*12?from?emp


--使用別名?

--sql 中,通過使用單引號?表示字符串,唯獨???使用別名的時候,可以使用雙引號表示字符串,as 關(guān)鍵字可以省略。

--除了別名,其他的地方基本上不使用雙引號。都是單引號。

select?ename?姓名?,?job?as?職位?,?sal*12?as?"年薪",?comm*12?as?年獎金?from?emp


--使用連接符???||

--顯示???xxx員工的編號為XXXX,入職日期為?XXXX,年薪為XXXX

select?*?from?emp

select?ename?||?' 員工的編號?'?||?empno?||??' , 入職日期為?'?||?hiredate?||?' ,年薪為?'?||?sal*?12?from?emp


--去除重復行??distinct

--顯示所有的部門編號

select?deptno?from?emp

select?distinct?deptno?from?emp

--顯示工作和部門編號

select?job,?deptno?from?emp

--去除字段組合的重復行

select?distinct?job,?deptno?from?emp


--排序

--顯示員工的所有信息

select?*?from?emp

--按照部門編號排序??默認是升序排列?asc ?降序是?desc

select?*?from?emp?order?by?deptno?asc

select?*?from?emp?order?by?deptno?desc


--按照員工的年薪排序

select?ename,?job,sal,sal*12?年薪?from?emp?order?by?sal*12


--排序的時候,使用字段的別名

select?ename,job,sal,sal*12?年薪?from?emp?order?by?年薪


-- 顯示員工的?姓名,工資,部門編號,部門編號按照升序排列,如果部門編號相同,按照工資降序排列

select?ename,sal,deptno?from?emp?order?by?deptno?asc?,sal?desc


--sql 中那些內(nèi)容是大小寫敏感的?哪些是不敏感的。

--關(guān)鍵字???大小寫不敏感

SELECT?*?from?emp

--字段名??大小寫不敏感

select?ENAME,?JOB,?sal?from?emp

--表名稱??大小寫不敏感

select?*?from?EMP

--字段的內(nèi)容???查詢?員工名為?scott 的員工的所有的信息

--字段的內(nèi)容大小寫敏感

select?*?from?emp??where?ename='SCOTT'


--where 子句

--作用:進行行數(shù)據(jù)的過濾


--查詢姓名??scott的員工的信息

select?*?from?emp??where?ename='SCOTT'


--查詢?nèi)肼毴掌跒?/span>1981/4/2 的員工的信息

--1 :使用默認的日期的字符串形式?'DD-MON-RR?

select?*?from?emp?where?hiredate='2-4-1981'

-- 2:將日期字符串轉(zhuǎn)換成?日期對象??to_date()


--查詢工資大于1600的員工的信息

select?*?from?emp?where?sal?>?1600?order?by?sal

select?*?from?emp?where?sal?>=?1600

select?*?from?emp?where?sal?<?1600

select?*?from?emp?where?sal?<=?1600

select?*?from?emp?where?sal=1600

select?*?from?emp?where?sal?!=?1600

select?*?from?emp?where?sal?<>?1600


--查詢1982/1/23 日期之后入職的員工的信息

--日期可以比較大小,是否相等

select?*?from?emp?where?hiredate?<?'23-1-1982'


--查詢工資在1000-2000之間的所有的員工的信息???and ?代表?并且??java 中的&&

select?*?from?emp?where?sal?>=1000?and?sal<=2000


--between xx and xx ?閉區(qū)間的

select?*?from?emp?where?sal?between?1000?and?2000


--查詢?員工信息??工資是?1100 或者是?1600 ?or ???或者的意思??java ?||

select?*?from?emp?where?sal?=?1100?or?sal?=?1600


--查詢所有員工中工種為??clerk ?manager ?analyst ?的員工的信息??ename job ?deptno

--字符串的排序規(guī)則??java 類似

select?ename,?job,?deptno??from?emp?where?job='CLERK'?or?job='MANAGER'?or?job='ANALYST'?order?by?job


-- 在集合中的某一個值就可以??in ()

select?ename,job,deptno?from?emp?where?job?in?('CLERK','MANAGER','ANALYST')


--模糊查詢??like

-- 通配符?% :代表任意個字符

--通配符?_ :代表任意一個字符


--查詢員工姓名中包含?S 的員工的信息??

select?*?from?emp?where?ename?like?'%S%'


--查詢員工姓名?第二個字符為A的員工的信息

select?*?from?emp?where?ename?like?'_A%'


--查詢名字中包含?_ 的員工的信息

select?*?from?emp

--escape 轉(zhuǎn)義指定字符為轉(zhuǎn)義字符

select?*?from?emp?where?ename?like?'%\_%'?escape?'\'



--查詢名稱中不包含?S 的員工的信息??not like

select?*?from?emp?where?ename?not?like?'%S%'


--空判斷,顯示所有獎金是?null 的員工的信息

select?*?from?emp?where?comm?is?null


--非空判斷??顯示所有獎金是?不是?null 的員工的信息

select?*?from?emp?where?comm?is?not?null


--工作是?clerk 或者?manager 并且?sal 大于?2000

select?*?from?emp?where?job='MANAGER'

--條件連接符?and ?or ?的連接的?優(yōu)先級?不同??and 的優(yōu)先級?大于?or ?,需要配合小括號控制結(jié)合的順序

select?ename,?job,sal?from?emp?where?(job='CLERK'?or?job='MANAGER')?and?sal?>2500?order?by?job



---偽表??dual ??也成為虛表

--當需要做一些不依賴于任何一張存在的表的操作的時候,就可以使用虛表了?dual

-- 查詢系統(tǒng)日期,和當前用戶

select?sysdate?from?dual

select?user?from?dual

select?*?from?dual

select?1+1?from?dual


--函數(shù),就是方法??直接使用即可

--函數(shù)的分類:

???????????--1:單行函數(shù):對一個查詢結(jié)果的記錄產(chǎn)生對應的一個計算結(jié)果。

???????????--2:多行函數(shù):對一個查詢結(jié)果的多條記錄產(chǎn)生一個計算結(jié)果。


--單行函數(shù)??字符串處理的函數(shù)???數(shù)學相關(guān)的函數(shù)???日期函數(shù)

--emp表中所有的員工的姓名全部小寫輸出

select?ename?,?lower(ename)?as?小寫?from??emp


--ppt 中所有的涉及到的字符函數(shù)和數(shù)值函數(shù),依次測試。


-- 查詢所有員工的名字?和入職天數(shù)?

select?ename?名字,?sysdate-hiredate?入職天數(shù)?from?emp

select?ename?,round(sysdate-hiredate)?入職天數(shù)?from?emp


-- 查詢所有員工的名字?和入職月數(shù),要求整月輸出。

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


-- 查詢下周三的日期

select?next_day(sysdate,'星期三')?from?dual


-- 查詢本月最后一天的日期

select?last_day(sysdate)?from?dual


-- 查詢下周一后的星期二的日期??嵌套函數(shù)使用

select?next_day(next_day(sysdate,'星期一')?,?'星期二')?from?dual


-- 查詢所有員工的入職的星期數(shù),年數(shù),使用別名顯示

select?(sysdate-hiredate)/7??入職星期數(shù)?,?(sysdate-hiredate)/365??入職年數(shù)?from?emp


--轉(zhuǎn)換函數(shù)??to_number ?to_char ?to_date


--to_number : ?字符串?-->數(shù)值的轉(zhuǎn)換

--to_char :數(shù)值--->字符串?的轉(zhuǎn)換?????日期?--->字符串的轉(zhuǎn)換

--to_date : 字符串--->日期的轉(zhuǎn)換?


--數(shù)值和字符串之間的相互轉(zhuǎn)換

--java ?Integer.toString(int) ???Integer.parseInt(String)

--日期對象和字符串之間的相互轉(zhuǎn)換

--sdf ?String ?format(Date) ??Date ?parse(String) ?????


--自動轉(zhuǎn)換?

--字符串自動轉(zhuǎn)換為數(shù)值形式

select?'2'+'1'?from?dual--3 ?

--數(shù)值向字符串的自動轉(zhuǎn)換

select?1?||?'2'?from?dual


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

--to_char

--數(shù)值--->字符串?的轉(zhuǎn)換??

--to_char(number, format) ?結(jié)果是一個字符串

-- 格式化特殊符號的意義:

--9 :整數(shù)部分,如果被轉(zhuǎn)換的數(shù)值的位數(shù)少于9 的個數(shù),那么多余的9 的位數(shù),忽略不顯示的。小數(shù)部分,多余的9使用0強制補齊。

--如果9 的個數(shù)不夠,那么按照9的個數(shù)進行強制顯示。

select?to_char(123.4566,'999.999')?from?dual

--0: 小數(shù)部分和?9 一樣,整數(shù)部分,多余的0 顯示的時候強制補0

select?to_char(123.567,'000,000.000000')?from?dual

--$直接顯示

select?to_char(123.678,'$999.99999')?from?dual

--L本地貨幣的符號

select?to_char(123.678,'L999.99999')?from?dual


--日期-->字符串

--to_char(date,format)

--將所有員工的受雇日期,按照指定的格式顯示

select?ename,hiredate,to_char(hiredate,'YYYY-MM-DD HH24:MI:SS')?入職日期?from?emp


-- 得到當前年份的字符串形式減去?受雇日期的字符串形式,返回受雇的年數(shù)??自動類型轉(zhuǎn)換

select?ename,to_char(sysdate,'YYYY')-to_char(hiredate,'YYYY')?from?emp


--to_date : 字符串到日期對象

--查詢?XXXX時間之后入職的員工信息?1981/4/2

select?ename,hiredate?from?emp?where?hiredate>to_date('1981/4/2','YYYY/MM/DD')


--查詢?指定?日期之間的入職的員工的信息???1981/4/2 ?1982/1/23

select?*?from?emp?where?hiredate?>?to_date('1981/4/2','YYYY/MM/DD')?and?hiredate?<?to_date('1982/1/23','YYYY/MM/DD')

select?*?from?emp?where?hiredate?between?to_date('1981/4/2','YYYY/MM/DD')?and?to_date('1982/1/23','YYYY/MM/DD')


--to_number

--將字符串轉(zhuǎn)換為?數(shù)值?

select?to_number('$123.123','$000.000')+1?from?dual

select?to_number('123.123','L000.000')+1?from?dual


--通用函數(shù)

--nvl (exp1,exp2) : 如果exp1 null 那么返回?exp2 如果不是null 就返回自身

--顯示所有員工的年薪

select?ename,sal*12+comm*12?年薪??from?emp

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


--nvl2(exp1,exp2,exp3) : 參數(shù)的意義?:如果exp1 null 就返回?exp3 ,否則返回?exp2

select?ename,?sal*12?+?nvl2(comm,?comm?,?0)?*12?年薪?from?emp


--decode (value, key0,value0,key1,value 1,..... ,valuen)

--參數(shù)的意思,如果?value 的值??key0?整個函數(shù)返回?value0 ,如果值是key1就返回value1,以此類推,如果都沒有找到合適,最后返回?valuen


--把所有的工作的名稱先全部顯示

select?distinct?job?from?emp


--emp 表中所有的員工的名字?工作?以及工作的中文顯示?

select?ename,job,decode(job,'CLERK','職員','SALESMAN','銷售員','PRESIDENT','主席','MANAGER','經(jīng)理','ANALYST','分析師')?工種?from?emp

select?ename,job,decode(job,'SALESMAN','銷售員','PRESIDENT','主席','MANAGER','經(jīng)理','ANALYST','分析師','職員')?工種?from?emp








二、多行函數(shù)

--多行函數(shù)?可以分為兩類

--1?只能對數(shù)值型的數(shù)據(jù)進行計算,?sumavg

--2?可以對任意類型的進行計算,maxmincount


-- avg 所有有獎金的人的獎金的平均值?

--忽略了null ?comm

select?avg(comm)?from?emp


--avg 所有員工的獎金的平均值

select?avg(nvl(comm,0))?from?emp


--多行函數(shù)對于?null 的數(shù)據(jù),直接忽略,不會進行統(tǒng)計


--count(*) : 使用這樣的形式去統(tǒng)計有多少條記錄,會自動的優(yōu)化,對效率最高的字段進行統(tǒng)計。

--count(*) :永遠返回的是一個?>=0 的值,如果是一個空表,那么就返回0.

select?count(*)?from?bonus


--統(tǒng)計部門編號是?10 的員工的總數(shù)

select?count(*)?from?emp?where?deptno=10

select?count(*)?from?emp?where?deptno=20

select?count(*)?from?emp?where?deptno=30


select?distinct?deptno?from?emp


--統(tǒng)計部門編號是?10 的員工的總數(shù),并顯示部門編號

--多行函數(shù)和單行函數(shù)不能一起使用。多行函數(shù)不能和字段一起顯示(除非使用該字段進行多行)

select?deptno,?count(*)?from?emp?where?deptno=10-----不可以。


三、分組函數(shù)

--統(tǒng)計排除10部門的,其他部門的總?cè)藬?shù),工資的總和,工資的平均值,工資的最大值,工資的最小值,使用工資的總和排序?desc

select?deptno,?count(*),sum(sal)?工資總和?,avg(sal),max(sal),min(sal)?

from?emp

where?deptno?<>?10

group?by?deptno

order?by?工資總和?desc


--sql 書寫順序有嚴格的要求,必須遵守

--執(zhí)行的順序?

---from---->where--->group by---->select---->order by

--從指定的表中去查數(shù)據(jù),然后使用where 過濾滿足條件的數(shù)據(jù)。


---統(tǒng)計每個部門的總?cè)藬?shù),工資的總和,工資的平均值,工資的最大值,工資的最小值,使用工資的總和排序,只顯示工資的平均值?>= 2000

select?deptno,?count(*),sum(sal),avg(sal),max(sal),min(sal)?

from?emp

where?avg(sal)>=2000---- where 只能對?行數(shù)據(jù)過濾,不能過濾分組的數(shù)據(jù)?如果想進行分組條件過濾,having

group?by?deptno

order?by?sum(sal)?desc


select?deptno,?count(*),sum(sal),avg(sal),max(sal),min(sal)?

from?emp

--where avg(sal)>=2000---- where 只能對?行數(shù)據(jù)過濾,不能過濾分組的數(shù)據(jù)?如果想進行分組條件過濾,having

group?by?deptno

having?avg(sal)>=2000

order?by?sum(sal)?desc


--sql 書寫順序有嚴格的要求,必須遵守

--執(zhí)行順序

---from---->where--->group by---having---->select---->order by


--having ?后可以進行條件判斷的內(nèi)容,和where 是一樣的。可以使用?關(guān)系運算符?like

--使用別名排序,過濾


--統(tǒng)計部門人數(shù),平均工資,排除10部門,和平均工資> 1000的部門

select?deptno,?count(*),?avg(sal)?

from?emp?

where?deptno?<>?10?

group?by?deptno

having?avg(sal)?>1000

order?by?avg(sal)?desc

--使用別名

select?deptno?部門編號,?count(*)?部門人數(shù)?,?avg(sal)?平均工資

from?emp?

where?deptno?<>?10?

group?by?deptno

having?平均工資?>1000----sql 的執(zhí)行的順序,select 的執(zhí)行在??having 之后,別名不能?having 中使用。只要在?select 執(zhí)行之前的語句,都不能使用別名

order?by?平均工資?desc


--平均工資大于1200的部門和工作的組合--多字段分組??

--deptno ??job 組合不重復??分組?group by deptnojob

select?deptno,?job?from?emp?group?by?deptno,job


--統(tǒng)計部門人數(shù)小于4的部門的平均工資??人數(shù)

select?deptno?,?count(*),avg(sal)

from?emp

group?by?deptno

having?count(*)?<?4


--統(tǒng)計各部門最高工資,排除最高工資小于3000的部門

select?deptno,max(sal)

from?emp

group?by?deptno

having?max(sal)?>=?3000


總結(jié)

以上是生活随笔為你收集整理的2018-06-22 第四十七天 oracle的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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