Oracle數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù):根據(jù)數(shù)據(jù)的結(jié)構(gòu) 對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),組織和管理的倉(cāng)庫(kù)
          可以理解成本地磁盤的一些文件

Oracle是管理數(shù)據(jù)庫(kù)的軟件

早期數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的特點(diǎn)
   一個(gè)文件保存的都是學(xué)生姓名  一個(gè)文件保存的都是教師姓名 一個(gè)文件保存的都是課程信息
這就對(duì)查詢數(shù)據(jù)造成了很大的麻煩 查找tom是那個(gè)班 查找老師教的課程是什么 沒(méi)有辦法找到  
只能查看有沒(méi)有tom這個(gè)學(xué)生 有沒(méi)有數(shù)學(xué)這門課
但在實(shí)際應(yīng)用中情況并不是這樣 數(shù)據(jù)與數(shù)據(jù)之間是存在關(guān)系的
    例如:查看老師的信息時(shí) 可以查詢出它教的學(xué)生有哪些 教的課是什么
根據(jù)數(shù)據(jù)與數(shù)據(jù)之間的這種關(guān)系 產(chǎn)生了一種新的概念 關(guān)系型數(shù)據(jù)庫(kù)
  1970年,IBM的研究員,有“關(guān)系數(shù)據(jù)庫(kù)之父”之稱的[埃德加·弗蘭克·科德博士在刊物《Communication of the ACM》
 (大型共享數(shù)據(jù)庫(kù)的關(guān)系模型)”的論文,
  文中首次提出了數(shù)據(jù)庫(kù)的關(guān)系模型的概念,奠定了關(guān)系模型的理論基礎(chǔ)。
   埃里森實(shí)現(xiàn)

一個(gè)關(guān)系數(shù)據(jù)庫(kù)是由多個(gè)表組成的 表示關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的基礎(chǔ)
在數(shù)據(jù)庫(kù)中數(shù)據(jù)都是以表的形式保存的

表的特點(diǎn):
    表具有行和列 每一行表示數(shù)據(jù)表中一條完整的信息
    每一列表示一條記錄中都包含那些內(nèi)容

主流關(guān)系型數(shù)據(jù)庫(kù)

 Oracle  :oracle公司(中文名叫[甲骨文公司]
 Mysql:開源的 Mysql->Sun->Oracle
 SQL Server:微軟
 DB2:IBM

關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的特點(diǎn)

 關(guān)系型數(shù)據(jù)庫(kù)以表的形式保存數(shù)據(jù)
 數(shù)據(jù)表具有行和列 
 一行數(shù)據(jù) 又可以稱為一行記錄
 每一列表示一行記錄 具體又那些信息 列又稱為 字段

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

1.DQL 數(shù)據(jù)查詢語(yǔ)言
2.DML 數(shù)據(jù)操作語(yǔ)言
3.TPL 事務(wù)處理語(yǔ)言
4.DDL 數(shù)據(jù)定義語(yǔ)言
5.DCL 數(shù)據(jù)控制語(yǔ)言

數(shù)據(jù)類型:

1.數(shù)值類型
2.字符類型
3.日期類型

select * from emp;

--select 關(guān)鍵字 表示查詢
-- * 表示所有的列(字段)
-- from 表示要查詢的數(shù)據(jù)來(lái)自于那張表
-- emp 要查詢數(shù)據(jù)的表名
-- select * from table_name

--查詢部門表中的所有數(shù)據(jù)
select * from dept;

--查詢薪資等級(jí)表中所有的數(shù)據(jù)
select * from salgrade;

查詢表中的具體列

--查詢員工表中員工姓名有哪些
select ename from emp;

--查詢emp表中部門號(hào)有那些
select deptno from emp;

--查詢部門信息表中部門名稱有那些
select dname from dept;

查詢多個(gè)列的信息

--查詢emp表中員工姓名和薪資
select ename ,sal from emp;

消除記錄中的重復(fù)數(shù)據(jù) DISTINCT

--查詢emp表中有幾個(gè)部門
--DISTINCT 會(huì)將列中重復(fù)的記錄消除掉
--DISTINCT只能跟在SELECT之后
select distinct deptno,sal from emp;

關(guān)鍵字

--關(guān)鍵字 列如SELECT FROM DISTINCT
--在SQL語(yǔ)句中具有特殊的功能
--關(guān)鍵字在SQL語(yǔ)句中 不區(qū)分大小寫

--查詢雇員表中有幾種崗位
select distinct job from emp;

--查詢薪資上調(diào)500后是多少
--sal+500 表達(dá)式
select sal,sal+500 from EmP;

--查詢薪資上調(diào)500后的年薪是多少
select sal,sal+500,(sal+500)*12 from emp;

--查詢員工姓名以及他的總收入(年薪+獎(jiǎng)金)
select ename,comm,sal*12+comm from emp;

空值NULL

--comm(獎(jiǎng)金)列沒(méi)有任何值的 表示為空 NULL
--NULL 表示沒(méi)有實(shí)際意義的 不存在的內(nèi)容
--任何包含了NULL 的表達(dá)式 其結(jié)果都為NULL

列別名

--查詢 薪資上調(diào)500后的年薪
select (sal+500)*12 from emp;

--查詢 薪資上調(diào)500后的年 總收入
select (sal+500)*12+comm from emp;

select (sal+500)*12+nvl(comm,0) from emp;

-- 當(dāng)需要檢索的列過(guò)長(zhǎng) 或者 表示的含義不明確時(shí)
-- 適用列別名 進(jìn)行簡(jiǎn)潔顯示
-- 列/列的表達(dá)式 as 列別名
-- 列/列的表達(dá)式 列別名

--查詢員工的編號(hào) 顯示成 編號(hào) ,員工薪資 顯示成 月薪
select empno as 編號(hào),sal 月薪 from emp;

--列別名特點(diǎn)
--如果列別名的內(nèi)容區(qū)分大小寫 需要寫在雙引號(hào)中 ""
--如果列別名中包含空格 需要寫在雙引號(hào)中 ""

select ename ,hiredate "RzRq" from emp;
select sal 薪asdDd資 from emp;
select ename,deptno "部門 編號(hào)" from emp;

連接操作符

select ename||job||sal from emp;

--在ORACLE中字符內(nèi)容用單引號(hào)表示 ''
select ename||' is a '||job from emp;

限制條件

--限制數(shù)據(jù)
--實(shí)際就是對(duì)檢索的數(shù)據(jù)加上限制條件
--只有符合條件的數(shù)據(jù)才會(huì)顯示在結(jié)果集中
--不符合條件的數(shù)據(jù)則不會(huì)顯示
--語(yǔ)法 WHERE + 限制條件

-- select name ,身高
-- from emp
-- where 身高>180
--身高>180 邏輯表達(dá)式/條件表達(dá)式
-- 條件表達(dá)式 :> , < ,>=, <= ,<> != ,=

--查詢部門號(hào)為10的員工姓名和薪資
select ename,sal,deptno
from emp
where deptno=10

SQL語(yǔ)句分析方式

-- 需要檢索的列有哪些
-- 這些列來(lái)自于那張表
-- 是否存在限制條件

-- 查詢薪資大于等于1500的員工編號(hào)和姓名以及薪資
-- 員工編號(hào) 姓名 薪資
-- EMP
-- 薪資大于等于1500
select empno ,ename ,sal
from emp
where sal>=1500;

特殊比較操作符
-- between 數(shù)值1 and 數(shù)值2
-- 表示某個(gè)列的值是否在數(shù)值1和數(shù)值2之間

select ename ,sal from emp where sal between 1500 and 3000;

--查詢?nèi)肼毴掌谠?1年2月22號(hào)之后入職的員工有哪些
-- 姓名/*
-- emp
-- 入職日期在81年2月22號(hào)之后 hiredate>81年2月22號(hào)
select * from emp
where hiredate>'02-4月-81'

--查詢員工SMITH的薪資是多少
--檢索薪資
--emp
--員工smith的薪資
select sal from emp
where ename='SMITH ';

--數(shù)值類型直接進(jìn)行比較
--日期類型 需要寫在單引號(hào)中 注意日期類型的數(shù)據(jù)書寫格式 DD-MMM-YY
--字符類型 需要寫在單引號(hào)中 區(qū)分大小寫

--查詢?cè)?1年2月20號(hào) 到 81年9月28號(hào)期間入職的員工有哪些
-- */ename
-- emp
-- between .. and
select ename ,hiredate
from emp
where hiredate between '20-2月-81' and '28-9月-81';

-- In()
-- 判斷要比較的值是否于集合列表中的任意一個(gè)數(shù)據(jù)相同
--集合列表 表示括號(hào)中放入的值

select ename,deptno
from emp
where deptno in(10,30);

--查詢薪資等于1500 或者等于3000的員工姓名和薪資
-- ename ,sal
--emp
-- sal=1500或者=3000
select ename,sal
from emp
where sal in(3000);

--is null 表示為空
判斷要比較的值是不是為空
-- is not null 表示不為空

select ename ,comm 
from emp
where comm is null

select ename ,comm 
from emp
where comm is not null

--查詢那些員工沒(méi)有上級(jí)領(lǐng)導(dǎo)
select ename ,mgr
from emp
where mgr is null;

-- LIKE
-- 表示部分匹配
-- % 表示任意個(gè)字符 _ 表示一個(gè)字符

--查詢員工姓名第一個(gè)字母是A的有哪些
select ename from emp
where ename like 'A%';

--查詢員工姓名中第二個(gè)字母是A的有哪些
select ename from emp
where ename like '_A%';

邏輯比較符

-- and
-- 將多個(gè)條件表達(dá)式進(jìn)行合并
-- 條件表達(dá)式1 and 條件表達(dá)式2
-- 只有1和2同時(shí)成立 整個(gè)結(jié)果才成立
-- 只要1和2當(dāng)中有一個(gè)不成立 整個(gè)結(jié)果則不成立

select ename ,sal
from emp
where sal>=1500
and sal<=3000;

-- 查詢部門號(hào)為10并且薪資大于1500的員工姓名,薪資,部門號(hào)
select ename,sal ,deptno
from emp
where deptno=10
and sal>1500;

--查詢部門號(hào)為20,薪資大于800并且職位是SALESMAN
--的員工姓名,職位及薪資
select ename,sal,job
from emp
where deptno=30 AND sal>800 AND job='SALESMAN';

-- OR
-- 條件表達(dá)式1 OR 條件表達(dá)式2
-- 要求1或2中只要有一個(gè)成立 則整個(gè)結(jié)果成立

--查詢薪資大于1500或者部門號(hào)為10的員工姓名和薪資以及部門
select ename ,sal ,deptno
from emp
where sal > 1500 or deptno=10;

--查詢部門號(hào)不等于20的員工姓名
select ename from emp
where deptno<>20;

select ename from emp
where deptno!=20;

  • 邏輯運(yùn)算符 AND 的優(yōu)先級(jí)高于 OR
    -- 可以適用括號(hào)改變邏輯表達(dá)式的優(yōu)先級(jí)
SELECT ename, job, sal
 FROM   emp
 WHERE  
( job='SALESMAN' OR  job='PRESIDENT') AND    sal>1500;

--排序 order by
-- ASC 表示升序 DESC 降序
--默認(rèn)就是升序
select ename ,sal
from emp
order by sal desc;

select ename ,mgr,sal
from emp

--多字段排序規(guī)則
--先以第一個(gè)列進(jìn)行排序 當(dāng)?shù)谝粋€(gè)列中
--出現(xiàn)重復(fù)記錄時(shí) 再以后面列進(jìn)行排序
--order by 子句永遠(yuǎn)寫在select語(yǔ)句的最后

章節(jié)練習(xí)

起列別名時(shí),有三種特殊情況需要加雙引號(hào),以下不屬于這三種情況之一的選項(xiàng)是( )
A.區(qū)分大小寫 B.含有特殊字符 C.包含空格 D.包含中文

模糊查詢的關(guān)鍵字是( )
A .in B. is null C. like D.between and

.查詢?cè)?981年到1982年入職的的員工信息,下列代碼中最正確的是( )
A.select * from emp where hiredate between 81 and 82
B.select * from emp where hiredate like ‘%1981’
C.select * from emp where hiredate between ‘01-1月-1981’ and ‘31-12月-1982’
D.select * from emp where substr(hiredate,-4,4) = 1981

以下代碼,對(duì)于去重關(guān)鍵字DISTINCT的使用正確且有意義的是( )
A. select distinct count(*) from emp
B. select count(distinct deptno) from emp
C.select sal distinct from emp
D. select distinct,empno,ename from emp

查詢?nèi)肼殨r(shí)間在1982-8-10之后,并且職位是SALESMAN的員工姓名、入職時(shí)間、職位( )
A. Select ename , hiredate ,job from emp where hiredate > ‘10-8月-82’ and job
=’SALESMAN’;
B. Select ename , hiredate ,job from emp where hiredate > ‘1982-08-10’ and job =’SALESMAN’;
C. Select ename , hiredate ,job from emp where hiredate > ’10-8月-82’ and job<>’SALESMAN’;
D. Select ename , hiredate ,job from emp where hiredate < ‘1982-08-10’ and job <>’SALESMAN’;

查詢員工姓名的第1個(gè)字母是S的員工姓名( )
A .Select ename from emp where ename like ‘S%’;
B. Select ename from emp where ename like ‘_S%’;
C. Select ename from emp where ename like ‘__S%’;
D. Select ename from emp where ename like ‘/S%’;

查詢除了10號(hào)部門以外的員工姓名、部門編號(hào)( )
A. Select ename , deptno from emp where deptno <>10;
B. Select ename , deptno from emp where deptno =10
C. Select ename , empno from emp where deptno <>10
D. Select ename , deptno from emp where deptno ==10

查詢部門號(hào)為20號(hào)員工的信息,按工資降序排序 ( )
A. Select * from emp where deptno =20 group by sal
B. Select * from emp where deptno =20 order by sal
C. Select * from emp where deptno =20 order by sal desc
D. Select * from emp where deptno =20 group by sal desc

查詢沒(méi)有上級(jí)的員工(經(jīng)理號(hào)為空)的員工姓名 ( )
A. Select ename from emp where empno is null
B. Select ename from emp where mgr is null
C. Select ename from emp where mgr is not nul
D. Select ename from emp where empno is not null

查詢工資大于等于2000并且部門為10員工的姓名,工資、部門編號(hào)( )
A. Select ename ,sal ,deptno from emp where sal>=2000 and deptno=10
B. Select ename ,sal ,deptno from emp where sal>2000 and deptno=10
C. Select ename ,sal ,deptno from emp where sal<=2000 and deptno=10
D. Select ename ,sal ,deptno from emp where sal>=2000 and deptno<>10

關(guān)于模糊查詢中通配符"_"描述正確的是( )
A. “_”代表多個(gè)字符
B. “_”代表一個(gè)字符
C .“_”不能與“%”一同使用
D. “_”代表代表零個(gè)或多個(gè)字符

語(yǔ)句WHERE SAL BETWEEN 800 AND 3500 與下列哪個(gè)子句等價(jià)( )
A .WHERE SAL>=800 AND SAL<=3500
B .WHERE SAL>800AND SAL<3500
C .WHERE SAL>=800 OR SAL<=3500
D .WHERE SAL>=800AND SAL <3500

下列SQL是什么含義( )
SELECT * FROM emp WHERE deptno =10 OR sal > 2000
A. 查詢工資大于2000的員工信息
B. 查詢部門號(hào)為10或者工資大于2000的員工信息
C. 運(yùn)行時(shí)錯(cuò)誤
D. 語(yǔ)法錯(cuò)誤

查詢公司中有幾種工作崗位( )
A. Select distinct job from emp
B. Select job distinct from emp
C. Select job from emp
D. Select distinct ,job from emp

查詢公司員工的姓名,月薪,年薪( )
A. Select ename ,sal,sal * 12 from emp ;
B. Select ename ,sal * 12,sal from emp ;
C. Select ename ,sal,sal+sal * 12 from emp ;
D. Select ename ,sal,sal * 6 from emp ;

執(zhí)行語(yǔ)句:
SELECT address1||’,'||address2||’,'||address2 ”Address” FROM employ;將會(huì)返回( )列。
A. 0 B. 1 C. 2 D.3

ORACLE 用來(lái)判斷列是否為空的操作法是
A.= NULL B.IS NULL C.AS NULL D.null is

如果在where子句中有兩個(gè)條件要同時(shí)滿足,應(yīng)該用以下哪個(gè)邏輯符來(lái)連接( )
A.OR B.NOT C.AND D.NONE

下列SQL是什么含義:SELECT empno FROM emp WHERE comm=100 or sal>2300
A 返回那些工資的50%大于2300的員工信息
B 運(yùn)行時(shí)錯(cuò)誤
C 語(yǔ)法錯(cuò)誤
D 返回那些獎(jiǎng)金為100或者工資大于2300的員工信息

下面哪個(gè)SQL語(yǔ)句可以查詢出名字當(dāng)中有"A%B"這樣的員工
A select * from emp where ename like '%A\%B%' escape ' \ ';
B select * from emp where ename like '%A@%B%' escape '@';
C select * from emp where ename like '%A%B%' escape '%';
D select * from emp where ename like '%A@%B%' escape '@';

顯示姓名中沒(méi)有'L'字的員工的詳細(xì)信息并且含有'SM'字的員工信息

查詢職位(JOB)為'PRESIDENT'的員工的工資

單行函數(shù)

處理一列數(shù)據(jù) 返回一個(gè)結(jié)果

函數(shù)中的內(nèi)容,叫參數(shù)
參數(shù)的個(gè)數(shù)可以沒(méi)有 也可以是多個(gè)

函數(shù)名([參數(shù),...])

參數(shù)的數(shù)據(jù)類型:數(shù)值,字符 ,日期

函數(shù)返回的結(jié)果可以于參數(shù)的類型不一致

函數(shù)于函數(shù)之間 可以進(jìn)行嵌套

單行函數(shù)的分類

1.字符函數(shù):主要用于處理字符類型數(shù)據(jù)的

   --字符函數(shù)

--LOWER() 將參數(shù)轉(zhuǎn)換為全小寫
-- 參數(shù)的數(shù)據(jù)類型 字符型 參數(shù)個(gè)數(shù) 1

select ename,lower(ename) from emp
where deptno=10;
--UPPER() 將參數(shù)轉(zhuǎn)為全大寫
--參數(shù):字符型 個(gè)數(shù):1個(gè)
select upper(lower(ename)) from emp;

--偽表/虛表 dual
select upper('abcd') from dual;

select * from dual;

--INITCAP() 將參數(shù)的首字母轉(zhuǎn)為大寫 其它字母變小寫
--參數(shù) :字符類型 個(gè)數(shù):1個(gè)
--特點(diǎn):如果參數(shù)是由多個(gè)詞組成 則每個(gè)詞的首字母大寫

select initcap(ename) from emp;

select initcap('abcDE') from dual;

select initcap('hi hello') from dual;

--查詢所有員工姓名轉(zhuǎn)換為小寫后 ,名字中
--包含a的有哪些
select lower(ename)
from emp
where lower(ename) like '%a%';

--concat( ) 與 || 等價(jià) 連接函數(shù)
--參數(shù):字符類型 個(gè)數(shù):2個(gè)
select ename||job from emp;

select concat(concat(ename,job),ename) from emp;

--SUBSTR() 截取字符串
--參數(shù)類型 : 字符 數(shù)值 數(shù)值 個(gè)數(shù):3個(gè)
--參數(shù)1 :表示原字符串 ,參數(shù)2:從第幾位開始截取
--參數(shù)3:表示截取的長(zhǎng)度 默認(rèn)不寫 表示從起始位開始全部截取
select ename,substr(ename,2) from emp;

--查詢員工姓名中第三個(gè)字母是A的有哪些
select ename from emp
where substr(ename,3,1)='A';

--LENGTH() 返回參數(shù)的長(zhǎng)度
--參數(shù):字符 個(gè)數(shù):1個(gè) 返回結(jié)果:數(shù)值
select ename,length(ename) from emp;

--查詢員工姓名長(zhǎng)度為5的有那些

select ename ,length(ename)
from emp
where length(ename)=5;

--INSTR() 返回子串在原字符串中的位置
--參數(shù):字符 字符 數(shù)值 數(shù)值 個(gè)數(shù):4個(gè)
--參數(shù)1:原字符串
--參數(shù)2:子串
--參數(shù)3:從原字符串中第幾位開始查找
--參數(shù)4:子串第幾次出現(xiàn)
--如果子串在原字符串中不存在 則返回結(jié)果是0

select ename ,instr(ename,'MI',2,1) from emp;

select instr('Tinking in Java','itn',1,1) from dual;

--LPAD() 左填充
select ename,lpad(ename,3,'m') from emp;
-- 參數(shù)類型:字符 數(shù)值
--個(gè)數(shù) :3個(gè)
--參數(shù)1 :表示原字符串
--參數(shù)2:表示填充后的字符串長(zhǎng)度
--參數(shù)3:表示填充的字符
--當(dāng)參數(shù)2的值小于原字符串長(zhǎng)度時(shí) 會(huì)對(duì)原字符串進(jìn)行截取

--RPAD() 右填充
select ename,rpad(ename,3,'*') from emp;

--REPLACE() 替換字符串
select ename,replace(ename,'AL','*') from emp;
--參數(shù)類型:字符類型
--參數(shù)個(gè)數(shù):3個(gè)
--參數(shù)1:表示原字符串
--參數(shù)2:表示需要替換的子串
--參數(shù)3:替換后的內(nèi)容
--如果參數(shù)3不寫 返回的結(jié)果會(huì)將參數(shù)2消除掉

-- TRIM() 消除字符
-- trim(參數(shù)1 FROM 參數(shù)2)
--參數(shù)類型:字符類型 個(gè)數(shù):2個(gè)
--將參數(shù)2兩端的參數(shù)1消除掉

select ename ,trim('S' from ename ) from emp;

select trim('a' from 'aabca') from dual;

select trim('a' from 'ababaca') from dual;

select trim('a' from 'bca') from dual;

2.數(shù)值函數(shù):對(duì)數(shù)值類型的數(shù)據(jù)進(jìn)行操作

--ROUND() 四舍五入
--參數(shù)類型 :數(shù)值類型 個(gè)數(shù):2個(gè)
--參數(shù)1:表示需要進(jìn)行舍入數(shù)值
--參數(shù)2:表示舍入到小數(shù)點(diǎn)后幾位

select round(100.57,0) from dual;

--TRUNC() 截取到小數(shù)點(diǎn)后N位

select trunc(125.45,-2) from dual;

--MOD() 取余

select mod(5,2),mod(5,-2),mod(-5,2),mod(-5,-2) from dual;

select mod(sal,comm) from emp;

3.日期函數(shù)

--日期+數(shù)值 表示加上相應(yīng)的天數(shù)
select hiredate,hiredate+1 from emp;

select to_date('10-4月-17','DD-MON-RR') - TO_date('4-4月-17','DD-MON-RR') from dual;

--SYSDATE 當(dāng)前系統(tǒng)時(shí)間
select sysdate from dual;

--MONTHS_BETWEEN() 返回兩個(gè)日期數(shù)據(jù)之間相隔的月數(shù)
--參數(shù)類型:日期類型
--參數(shù)個(gè)數(shù):2個(gè)
--大的在前 小的在后

select trunc(months_between(sysdate,hiredate)) from emp;

--ADD_MONTHS() 加上相應(yīng)的月份
--參數(shù)類型:日期 數(shù)值、
--參數(shù)1 表示日期類型的數(shù)據(jù)
--參數(shù)2 表示加上幾個(gè)月

select add_months(sysdate,1) from dual;

select add_months(sysdate,10) from dual;

--NEXT_DAY() 返回當(dāng)前日期 下一個(gè)指定星期是那一天

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

select next_day(sysdate,2) from dual;

--LAST_DAY() 返回指定日期當(dāng)月的最后一天
select last_day(sysdate) from dual;

SELECT NEXT_DAY('02-2月-06','星期一') NEXT_DAY
FROM DUAL;

SELECT empno, hiredate,
ROUND(hiredate, 'MONTH')
FROM emp

WHERE SUBSTR(hiredate,-2,2)='81';

select round(to_date('15-2月-17','DD-MON-YY'),'MONTH') FROM DUAL;

SELECT EXTRACT(day FROM SYSDATE) from dual;

--1.查詢服務(wù)器當(dāng)前時(shí)間
select sysdate from dual;
--2.查詢部門10,20的員工截止到2000年1月1日,工作了多少個(gè)月,
--入職的月份。(提示:使用months_between,extract)
select extract(month from hiredate),months_between('1-1月-00',hiredate)
from emp
where deptno in(10,20);

--3.如果員工試用期6個(gè)月,查詢職位不是MANAGER的員工姓名,
--入職日期,轉(zhuǎn)正日期,入職日期后的第一個(gè)星期一,
--入職當(dāng)月的最后一天日期。(提示:使用add_months,next_day,last_day)
select ename,hiredate,add_months(hiredate,6),next_day(hiredate,'星期一'),
last_day(hiredate)
from emp
where job<>'MANAGER';

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

4.通用函數(shù)
-to_char()
--將入職日期以'DD Month YYYY'顯示
select hiredate ,to_char(hiredate,'DD/MM/YYYY')
from emp;

--將入職日期顯示成xxxx年xx月xx日的格式
select hiredate,to_char(hiredate,'YYYY"年"MM"月"DD"日"')
from emp;

--將入職日期顯示成xxxx-xx-xx的格式
select hiredate,to_char(hiredate,'YYYY-MM-DD')
from emp;

select sal ,to_char(sal,'L09,999.99') from emp;

select sal,to_char(sal,'L99') from emp;

--2月 MON
--2 MM
select to_date('9-2月-81','DD-MM-YY') FROM DUAL;

--1.顯示服務(wù)器系統(tǒng)當(dāng)前時(shí)間,格式為2007-10-12 17:11:11(提示:使用to_char函數(shù))
select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')
FROM dual;

--2.顯示ename、hiredate 和 雇員開始工作日是星期幾,列標(biāo)簽DAY(提示:使用to_char函數(shù))
select ename,hiredate ,to_char(hiredate,'DAY') DAY
FROM emp;

--3.查詢員工姓名,工資,格式化的工資(¥999,999.99) (提示:使用to_char函數(shù))
select ename,sal ,to_char(sal,'L999,999.99') from emp;

--4.把字符串2015-3月-18 13:13:13 轉(zhuǎn)換成日期格式,
--并計(jì)算和系統(tǒng)當(dāng)前時(shí)間間隔多少天。 (提示:使用to_date函數(shù))
select to_date('2015-3月-18 13:13:13', 'YYYY-MON-DD HH24:MI:SS'),
SYSDATE - to_date('2015-3月-18 13:13:13', 'YYYY-MON-DD HH24:MI:SS')
FROM DUAL;
--nvl(comm,0) 如果comm為null 用0替換
--要求參數(shù)的數(shù)據(jù)類型保持一致
select ename ,nvl(to_char(comm),'abc')
from emp;

--NVL2(e1,e2,e3)
--如果e1不是NULL 返回e2 否則返回e3

select comm,nvl2(comm,comm,0) from emp;

--NULLIF(E1,E2) 比較e1和e2
--如果e1與e2相等 返回 NULL
--如果e1與e2不相等 返回e1

select nullif(sal,1500) from emp;

select comm, coalesce(comm,null,0) from emp;

select ename,job,
(case job
when 'CLERK' then '員工'
when 'SALESMAN' then '銷售'
when 'MANAGER' then '經(jīng)理'
end) 部門
from emp;

select job from emp;

select ename,deptno,
decode(deptno,
10 , '銷售部',
20 ,'技術(shù)部',
30 , '管理部'

) 部門
from emp;

--1.計(jì)算2000年1月1日到現(xiàn)在有多少月,多少周(四舍五入)。
select months_between(sysdate,'1-1月-00'),round((sysdate-to_date('1-1月-00','DD-MON-YY'))/7)
FROM DUAL;

--2.查詢員工ENAME的第三個(gè)字母是A的員工的信息(使用2個(gè)函數(shù))。

--3.使用trim函數(shù)將字符串‘hello’、‘ Hello ’、‘bllb’、‘ hello
--’分別處理得到下列字符串ello、Hello、ll、hello。
select trim('h' from 'hello') from dual;

--4.將員工工資按如下格式顯示:123,234.00 RMB 。
select to_char(sal,'999,999.99')||'RMB'
from emp;

--5.查詢員工的姓名及其經(jīng)理編號(hào),要求對(duì)于沒(méi)有經(jīng)理的顯示“No Manager”字符串。
select ename,nvl(to_char(mgr),'No Manager') from emp;

--6.將員工的參加工作日期按如下格式顯示:月份/年份。
--hiredate date to_char()
--將2017-2月-12號(hào)顯示成 月份/年份 '2017-2月-12' to_date()
select to_char(hiredate,'MON/YYYY') FROM emp;

--7.在員工表中查詢出員工的工資,并計(jì)算應(yīng)交稅款:
--如果工資小于1000,稅率為0,如果工資大于等于1000并小于2000,
--稅率為10%,如果工資大于等于2000并小于3000,稅率為15%,
--如果工資大于等于3000,稅率為20%。
-- sal<1000 sal/1000=0... trunc(sal/1000)=0
--sal>=1000 and sal<2000 trunc(sal/1000)=1
--sal<=2000 and sal >3000
--sal>=3000
select ename,sal ,
decode(trunc(sal/1000),
0 ,0,
1 ,sal * 0.1,
2 ,sal * 0.15,
sal * 0.2
) 稅款
from emp;

select sal from emp
order by sal;

--8.創(chuàng)建一個(gè)查詢顯示所有雇員的 ename和 sal。格式化sal為 15 個(gè)字符長(zhǎng)度,用 $ 左填充,列標(biāo)簽 SALARY。

SELECT HIREDATE,substr(hiredate,4,4) FROM EMP;

select sysdate - to_date('1982-09-08') from emp

--找出每個(gè)月倒數(shù)第一天受雇的所有員工
select ename,hiredate
from emp
where hiredate=last_day(hiredate);

找出在(任何年份) 2 月入職的所有員工
select ename ,hiredate
from emp
where extract(month from hiredate)=2;

select ename,hiredate
from emp
where to_char(hiredate,'MM')=2;

將所有的雇員姓名按照小寫字母顯示
select lower(ename) from emp;

要求查詢出姓名長(zhǎng)度正好是5的雇員信息
select * from emp
where length(ename)=5;

使用字符“”替換掉姓名中的所有字母“A”
select replace(ename,'A','
') FROM EMP;

要求截取每個(gè)雇員姓名的后三個(gè)字母
SELECT ENAME,substr(ename,-3,3) from emp;

求出每個(gè)雇員到今天為止的雇傭天數(shù)
select sysdate - hiredate from emp;

求出每個(gè)雇員到今天為止的雇傭月份
select ename,months_between(sysdate,hiredate) from emp;

把hiredate列看做是員工的生日,求本月過(guò)生日的員工
select ename ,hiredate
from emp
where to_char(hireDAte,'MM')=TO_CHAR(sysdate,'MM');

求1982年入職的員工
SELECT ename,hiredate
from emp
where to_char(hiredate,'YYYY')='1982';

顯示所有員工的姓名的前三個(gè)字符
select ename,substr(ename,1,3) from emp;

章節(jié)練習(xí)

下列與sql語(yǔ)句 Select * from emp where substr(ename,4,1) = ‘s’
等效的語(yǔ)句是( )
A.SELECT * FROM emp WHERE instr(ename,’s’1,4) = 4
B.SELECT * FROM emp WHERE ename like ‘___s’
C.SELECT * FROM emp WHERE extract(‘s’ from ename) = 4
D.SELECT * FROM emp WHERE instr(ename,’s’,4,1) = 4

查詢?cè)?982年入職的的員工信息,下列代碼中正確的是( )
A.select * from emp where hiredate < 1982
B.select * from emp where hiredate like ‘%1982’
C.select * from emp where hiredate between ‘01-1月-1981’ and ‘31-12月-19’
D.select * from emp where to_char(hiredate,’YYYY’) = ‘1982’

下列哪個(gè)SQL語(yǔ)句是錯(cuò)誤的( )
A.select * from emp where to_char(hiredate,’YYYY’) = ‘1981’
B.select * from emp where sal > 6000 and substr(ename,4,1) = ‘A’
C.select * from emp where hiredate > ’01-1月-1981’
D.select * from emp where ename like ‘S%’and comm = null

下述針對(duì)substr使用及描述正確的是( )
A.substr參數(shù)中包含4個(gè)參數(shù)
B.substr(‘a(chǎn)bcdefg’,3,2)的結(jié)果是cd
C.select * from emp where substr(ename,2,1) = ‘AB’
D.select * from emp where substr(hiredate,4,4) = ‘1981'

查詢語(yǔ)句SELECT ROUND(13.57),ROUND(13.57,1),ROUND(13.57,-1),TRUNC(13.57,-2) FROM DUAL 返回結(jié)果,正確的是( )
A .13.57,13.6,10,13
B .13,13.5,14,0
C.14,13.6,10,0
D.13.6,13.5,11,13

下列哪個(gè)SQL語(yǔ)句能正確執(zhí)行( )
A.select sysdate - to_date(‘1982-09-08’) from emp
B.select ename || job || sal + 500 from emp
C.select hiredate,’01-1月-2017’-hiredate from emp
D.select hiredate,to_date(‘1985年11月11日’,’YYYY”年”MM”月”DD”日”’) from emp

下述針對(duì)substr使用及描述正確的是( )
A.substr參數(shù)中包含4個(gè)參數(shù)
B.substr(‘a(chǎn)bcdefg’,3,2)的結(jié)果是cd
C.select * from emp where substr(ename,2,1) = ‘AB’
D.select * from emp where substr(hiredate,4,4) = ‘1981’

ROUND 和TRUNC 操作的區(qū)別是( )
A. ROUND在截掉數(shù)據(jù)時(shí)有四舍五入的判斷,TRUNC直接按要求截掉沒(méi)有進(jìn)位。
B. 都是將數(shù)據(jù)按指定的長(zhǎng)度截?cái)?br> C. TRUNC是四舍五入,ROUND是截?cái)?br> D. 都會(huì)四舍五入

找出每個(gè)月倒數(shù)第一天受雇的所有員工

找出在(任何年份) 2 月入職的所有員工

將所有的雇員姓名按照小寫字母顯示

要求查詢出姓名長(zhǎng)度正好是5的雇員信息

使用字符“_”替換掉姓名中的所有字母“A”

要求截取每個(gè)雇員姓名的后三個(gè)字母

求出每個(gè)雇員到今天為止的雇傭天數(shù)

求出每個(gè)雇員到今天為止的雇傭月份

把hiredate列看做是員工的生日,求本月過(guò)生日的員工

求1982年入職的員工

顯示所有員工的姓名的前三個(gè)字符

多表連接

-多表連接
--查詢員工姓名,薪資,部門地點(diǎn)
-- 查詢的列有那些
-- 這些列來(lái)自那張表
-- 有沒(méi)有限制條件
select ename,sal,loc
from emp ,dept
--笛卡爾積 :一張表中的所有數(shù)據(jù)與另一張表的所有數(shù)據(jù) 都進(jìn)行連接

select * from dept;

--多表連接時(shí) 需要加上限制條件 消除笛卡爾積的效果

--等值連接
--查詢員工姓名,薪資,部門地點(diǎn)
--emp.deptno=dept.deptno emp表與dept表的關(guān)聯(lián)條件
--deptno 由于deptno同時(shí)存在于兩張表
--如果直接使用會(huì) 產(chǎn)生 未明確定義列的問(wèn)題
--需要表名進(jìn)行區(qū)分
select ename,sal,loc
from emp,dept
where emp.deptno=dept.deptno;

--查詢員工編號(hào),職位,工作地點(diǎn),部門號(hào),部門名稱

select empno,job,loc,dept.deptno,dname
from emp,dept
where emp.deptno=dept.deptno;

--非等值連接
--表與表之間的關(guān)聯(lián)條件不是直接相等的
select ename,sal ,grade
from emp,salgrade
where sal between losal and hisal;

--外連接
--查詢所有員工姓名和部門號(hào),沒(méi)有員工的部門也要顯示
--(+) 外連接符號(hào)
--如果需要將一些不滿足連接條件的數(shù)據(jù)顯示在結(jié)果集
--可以使用(+)
--(+)寫在那個(gè)表中 就會(huì)對(duì)應(yīng)出現(xiàn)萬(wàn)能行
--萬(wàn)能行的作用就是與不滿足條件的數(shù)據(jù)進(jìn)行連接
select ename,dept.deptno
from emp,dept
where emp.deptno(+)=dept.deptno;

--查詢員工姓名,薪資,工作地點(diǎn),薪資等級(jí) 要求薪資大于1500
--多表連接后 如果有其它限制條件 在WHERE中 通過(guò) AND 連接
select ename,sal,loc,grade
from emp,dept,salgrade
where emp.deptno=dept.deptno and sal between losal and hisal
and sal>1500;

--通過(guò)表前綴可以提高查詢性能

--表別名 代替表名
--當(dāng)給表起了表別名之后 不能使用表名作為列的前綴
select ename,e.deptno,dname
from emp e ,dept d
where e.deptno=d.deptno;

--N個(gè)表 表的關(guān)聯(lián)條件至少 N-1

--1.寫一個(gè)查詢,顯示所有員工姓名,部門編號(hào),部門名稱。
select ename,e.deptno,dname
from emp e,dept d
where e.deptno=d.deptno;

--2.寫一個(gè)查詢,顯示所有工作在CHICAGO并且獎(jiǎng)金不為空的員工姓名,工作地點(diǎn),獎(jiǎng)金
select ename, loc, comm
from emp e, dept d
where e.deptno = d.deptno
and loc = 'CHICAGO'
and comm is not null;

--3.寫一個(gè)查詢,顯示所有姓名中含有A字符的員工姓名,工作地點(diǎn)。
select ename,loc
from emp e,dept d
where e.deptno=d.deptno
and ename like '%A%';

1.查詢每個(gè)員工的編號(hào),姓名,工資,工資等級(jí),所在工作城市,按照工資等級(jí)進(jìn)行升序排序。
select empno,ename,sal,grade,loc
from emp e,dept d,salgrade s
where e.deptno=d.deptno and e.sal between losal and hisal
order by grade ;

--自連接
--查詢每個(gè)員工的姓名和直接上級(jí)姓名
--e 表示員工表 l 表示領(lǐng)導(dǎo)表
--關(guān)聯(lián)條件 員工表的領(lǐng)導(dǎo)編號(hào)=領(lǐng)導(dǎo)表員工編號(hào)
select e.ename,l.ename
from emp e,emp l
where e.mgr=l.empno

--查詢員工姓名,薪資,領(lǐng)導(dǎo)姓名 ,領(lǐng)導(dǎo)薪資
--要求員工薪資大于1500
select e.ename,e.sal ,l.ename,l.sal
from emp e,emp l
where e.mgr=l.empno
and e.sal>1500;

--1.查詢所有工作在NEW YORK和CHICAGO的員工姓名,員工編號(hào),以及他們的經(jīng)理姓名,經(jīng)理編號(hào)。
select e.ename,e.empno,l.ename,l.empno
from emp e,emp l ,dept d
where e.mgr=l.empno and e.deptno=d.deptno
and d.loc in('NEW YORK','CHICAGO');

--2.第上一題的基礎(chǔ)上,添加沒(méi)有經(jīng)理的員工King,并按照員工編號(hào)排序。
select e.ename,e.empno,l.ename,l.empno
from emp e,emp l
where e.mgr=l.empno(+);

--3.查詢所有員工編號(hào),姓名,部門名稱,包括沒(méi)有部門的員工也要顯示出來(lái)。
select empno,ename,dname
from emp e,dept d
where e.deptno=d.deptno(+);
--查詢每個(gè)員工的 姓名,工資,工資等級(jí),所在工作城市

select ename,sal,grade,loc
from emp e,salgrade s,dept d
where e.sal between s.losal and s.hisal
and e.deptno=d.deptno;

--列出所有員工的姓名以及其直接上級(jí)的姓名
select e.ename,l.ename
from emp e,emp l
where e.mgr=l.empno(+);

--查詢所有工作在NEW YORK和CHICAGO的員工姓名,員工編號(hào)
select e.ename,e.empno
from emp e,dept d
where e.deptno=d.deptno
and d.loc in ('NEW YORK','CHICAGO');

--查詢所有工作在NEW YORK和CHICAGO的員工姓名,員工編號(hào),以及他們的經(jīng)理姓名,經(jīng)理編號(hào)
select e.ename,e.empno,l.ename,l.empno
from emp e,emp l ,dept d
where e.mgr=l.empno(+)
and e.deptno=d.deptno
and loc in('NEW YORK','CHICAGO');

--顯示工作在CHICAGO的員工姓名,部門名稱,工作地點(diǎn)
select ename,dname,loc
from emp e ,dept d
where e.deptno=d.deptno
and loc='CHICAGO';

--顯示入職日期在81年2月1日之后的員工姓名,部門名稱,入職日期
select e.ename,e.hiredate,d.dname
from emp e,dept d
where e.deptno=d.deptno
and hiredate>'1-2月-81';

--顯示員工JONSE的部門名稱,直接上級(jí)名稱
select e.ename,d.dname,l.ename
from emp e,emp l,dept d
where e.mgr=l.empno
and e.ename='JONES'
and e.deptno=d.deptno;

--列出受雇日期早于其直接上級(jí)的所有員工的編號(hào),姓名,部門名稱
select e.empno ,e.ename,d.dname
from emp e,emp l,dept d
where e.mgr=l.empno
and e.deptno=d.deptno
and e.hiredate<l.hiredate;

--列出部門名稱和這些部門的員工姓名,部門號(hào)
select dname,ename,e.deptno
from emp e,dept d
where e.deptno(+)=d.deptno;

--交叉連接

select ename,sal,dname
from emp e cross join dept d;

select ename,sal,dname
from emp e,dept d;

--自然連接
select ename,sal,grade
from emp e natural join dept d;

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

-USING
select ename,sal,dname
from emp e JOIN dept d USING(deptno);

--ON
--其它的限制條件建議寫在WHERE子句中
--使SQL語(yǔ)句的結(jié)構(gòu)更加清晰
select ename,sal,dname
from emp e join dept d
on e.deptno=d.deptno
and sal>1500;

select ename,sal ,dname,grade
from emp e join dept d
on e.deptno = d.deptno
join salgrade s
on e.sal between s.losal and s.hisal;

--左外連接 LEFT [outer] JOIN
-- 在LEFT [outer] JOIN 左邊的表 作為主表(基表)
-- 主表中不滿足連接條件的數(shù)據(jù)也會(huì)顯示
--查詢員工姓名和直接領(lǐng)導(dǎo)姓名,沒(méi)有領(lǐng)導(dǎo)員工也要顯示
select e.ename,l.ename
from emp e,emp l
where e.mgr=l.empno(+);

select e.ename,l.ename
from emp e left join emp l
on e.mgr=l.empno;

--右外連接 RIGHT [OUTER] JOIN
--在 RIGHT [OUTER] JOIN 右邊的表 作為主表
--主表中不滿足連接條件的數(shù)據(jù)也會(huì)顯示

--查詢員工姓名 ,部門名稱,部門編號(hào) 沒(méi)有員工的部門也要顯示
select e.ename,d.dname,d.deptno
from emp e,dept d
where e.deptno(+)=d.deptno;

select e.ename,d.dname,d.deptno
from emp e right join dept d
on e.deptno = d.deptno;

--全外連接 FULL [OUTER] JOIN

SELECT e.ename,l.ename,e.deptno
from emp e full join emp l
on e.mgr=l.empno;

分組函數(shù)

--MAX() MIN() SUM() AVG() COUNT()
--MAX() 求一組數(shù)據(jù)的最大值
--MIN() 求一組數(shù)據(jù)的最小值
MIN和MAX可以用于任何數(shù)據(jù)類型

--SUM() 求一組數(shù)據(jù)的和
--AVG() 求一組數(shù)據(jù)的平均值
SUM和AVG函數(shù)都是只能夠?qū)?shù)值類型的列或表達(dá)式操作

--COUNT() 統(tǒng)計(jì)數(shù) / 記錄數(shù)
除了COUNT(*)之外,其它所有分組函數(shù)都會(huì)忽略列中的空值,然后再進(jìn)行計(jì)算

--查詢emp表中的薪資的最大值和最小值
--最高薪資 最低薪資

select max(sal),min(sal) from emp;

--ename返回一列數(shù)據(jù) 而max(sal),min(sal) 返回單個(gè)數(shù)據(jù)
--它們之間是多對(duì)一的關(guān)系 沒(méi)有辦法匹配顯示
select ename, max(sal),min(sal) from emp
where ename='SMITH';
--7369 SMITH CLERK 7902 1980/12/17 800 20

--求所有員工薪資和
select sum(sal) from emp;

--求所有員工平均薪資
select avg(sal) from emp;

--查詢有多少部門
select distinct deptno from emp;

select count(distinct deptno) from emp;

--查詢10號(hào)和20部門的最高薪資
select max(sal) from emp
where deptno in(10,20);

--group by 分組
--需要分組的列 寫group by之后 多個(gè)列之間用逗號(hào)隔開

--查詢每個(gè)部門的最高薪資,最低薪資
select deptno,max(sal),min(sal)
from emp
group by deptno;

--查詢10號(hào)和20部門的最高薪資
--group by 要寫在WHERE子句之后
select deptno,max(sal),min(sal)
from emp
where deptno in(10,20)
group by deptno;

--查詢每個(gè)工作崗位的最高薪資最低薪資
select job,max(sal),min(sal)
from emp
group by job;

--查詢每個(gè)部門的人數(shù)
select deptno,count(ename)
from emp
group by deptno;

--查詢每個(gè)職位的人數(shù) 要求薪資大于1500
select job,count(empno)
from emp
where sal >1500
group by job;

-- 查詢每個(gè)職位的人數(shù),職位,薪資 要求薪資大于1500
-- 在分組語(yǔ)句中 出現(xiàn)在SELECT子句中的列 必須寫在GROUP BY
--寫在分組函數(shù)中的列除外

-- 相反出現(xiàn)在GROUP BY 中的列 ,可以不寫在SELECT子句中
select job,sal,count(empno)
from emp
where sal >1500
group by job,sal
order by job;

--max() min
--可用于 數(shù)值,日期
--字符類型可以可用 但無(wú)意義
select max(hiredate) ,min(hiredate) from emp;

select max(ename) ,min(ename) from emp;

--sum()
--只能處理數(shù)值類型的參數(shù)
select sum(ename) from emp;

--avg()
--只能處理數(shù)值類型的參數(shù)
select avg(ename) from emp;

--查詢部門號(hào),平均薪資
--要求平均薪資大于1500
--在WHERE子句中不能使用 分組函數(shù)
-- having 如果需要使用分組函數(shù)作為限制條件
-- 需要寫在Having 中

--建議將having寫在group by 之后
select deptno ,avg(sal)
from emp
group by deptno
having AVG(sal)>2000;

---語(yǔ)法格式有誤
select ename,sal
from emp
having ename like '%A%';

--count() 返回非空記錄
select count(mgr) from emp;

--返回記錄數(shù)(表中數(shù)據(jù)量)
select count(*) from emp;

select * from emp;

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

--SQL語(yǔ)句的執(zhí)行順序
--1. from
--2. where
--3. group by
--4. having
--5. select
--6. order by

--由于SQL語(yǔ)句的執(zhí)行順序不同
--where中使用列別名時(shí) select語(yǔ)句還未執(zhí)行
--所以無(wú)法使用

章節(jié)練習(xí)

--1.查詢部門20的員工,每個(gè)月的工資總和及平均工資。
--sum(sal) avg(sal)
-- emp
-- deptno=20
select sum(sal),avg(sal)
from emp
where deptno=20

--2.查詢工作在CHICAGO的員工人數(shù),最高工資及最低工資。
select count(*) ,max(sal),min(sal)
from emp e ,dept d
where e.deptno=d.deptno
and d.loc='CHICAGO';

--3.查詢員工表中一共有幾種崗位類型。
SELECT COUNT(mgr) from emp;

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

select sum(comm) from emp;

--1.查詢每個(gè)部門的部門編號(hào),部門名稱,部門人數(shù),
--最高工資,最低工資,工資總和,平均工資。
select e.deptno,dname,count(empno),max(sal),min(sal),sum(sal),avg(sal)
from emp e,dept d
where e.deptno=d.deptno
group by e.deptno,dname;

--2.查詢每個(gè)部門,每個(gè)崗位的部門編號(hào),部門名稱,
--崗位名稱,部門人數(shù),最高工資,最低工資,工資總和,平均工資。
select e.deptno,dname,job,count(ename),max(sal),min(sal),sum(sal),avg(sal)
from emp e,dept d
where e.deptno=d.deptno
group by e.deptno,job,dname;

--3.查詢每個(gè)經(jīng)理所管理的人數(shù),經(jīng)理編號(hào),經(jīng)理姓名,要求包括沒(méi)有經(jīng)理的人員信息
select count(e.empno),e.mgr,l.ename
from emp e,emp l
where e.mgr=l.empno(+)
group by e.mgr,l.ename;

--1.查詢部門人數(shù)大于2的部門編號(hào),部門名稱,部門人數(shù)。
select e.deptno,dname,count(empno)
from emp e,dept d
where e.deptno=d.deptno
group by e.deptno ,dname
having count(empno)>2;

--2.查詢部門平均工資大于2000,且人數(shù)大于2的部門編號(hào),
--部門名稱,部門人數(shù),部門平均工資,并按照部門人數(shù)升序排序。

select e.deptno,dname,count(ename) counts,avg(sal)
from emp e,dept d
where e.deptno=d.deptno
group by e.deptno,dname
having avg(sal)>2000
and count(ename)>2
order by counts;

--1.查詢部門平均工資在2500元以上的部門名稱及平均工資。
select dname,avg(sal)
from emp e,dept d
where e.deptno=d.deptno
group by e.deptno,dname
having avg(sal)>2500;

--2.查詢員工崗位中不是以“SA”開頭并且平均工資在2500元以上的崗位及平均工資,
--并按平均工資降序排序。
select job,avg(sal)
from emp e
where job not like 'SA%'
group by job
having avg(sal)>2500
order by avg(sal) desc;

select job,avg(sal)
from emp e
group by job
having avg(sal)>2500
and job not like 'SA%'
order by avg(sal) desc;

--3.查詢部門人數(shù)在2人以上的部門名稱、最低工資、最高工資,
--并對(duì)求得的工資進(jìn)行四舍五入到整數(shù)位。
select dname,round(max(sal)),round(min(sal))
from emp e,dept d
where e.deptno=d.deptno
group by e.deptno ,dname
having count(empno)>2;

--4.查詢崗位不為SALESMAN,工資和大于等于2500的崗位及每種崗位的工資和。
select job,sum(sal)
from emp
where job <>'SALESMAN'
group by job
having sum(sal)>=2500;

select job,sum(sal)
from emp
group by job
having sum(sal)>=2500
and  job <>'SALESMAN';

--5.顯示經(jīng)理號(hào)碼和經(jīng)理姓名,這個(gè)經(jīng)理所管理員工的最低工資,
--沒(méi)有經(jīng)理的KING也要顯示,不包括最低工資小于3000的,按最低工資由高到低排序。

--6.寫一個(gè)查詢,顯示每個(gè)部門最高工資和最低工資的差額

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容