[推荐]ORACLE SQL:经典查询练手第二篇(不懂装懂,永世饭桶!)

本文提供了一系列Oracle SQL查询练习题及解答,包括姓名筛选、条件查询、数据排序等,旨在帮助读者提升SQL技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[推荐]ORACLE SQL

经典查询练手第二篇(不懂装懂,永世饭桶!)

——通过知识共享树立个人品牌。

本文与大家共同讨论与分享ORACLE SQL的一些常用经典查询,欢迎大家补充,同时你认为有那些经典的也可分享出来。在本文中,对每一个问题,你要是认为有什么更好的解决方法也欢迎你及时提出。交流与分享才能共同进步嘛,感谢!

接上一篇:[推荐]ORACLE SQL:经典查询练手第一篇

本篇相对上篇来说比较简单,如果你对本篇的各测试做得不称心如意的话,我想你是时候给自己充下电了!

本文使用的实例表结构与表的数据如下:

scott.emp员工表结构如下:

SQL > DESC SCOTT.EMP;
NameTypeNullable
Default Comments
-- -----------------------------------------
EMPNO NUMBER ( 4 )员工编号
ENAME
VARCHAR2 ( 10 )Y员工姓名
JOB
VARCHAR2 ( 9 )Y职位
MGR
NUMBER ( 4 )Y上级编号
HIREDATEDATEY雇佣日期
SAL
NUMBER ( 7 , 2 )Y薪金
COMM
NUMBER ( 7 , 2 )Y佣金
DEPTNO
NUMBER ( 2 )Y所在部门编号
-- 提示:工资=薪金+佣金

scott.dept部门表

SQL > DESC SCOTT.DEPT;
NameTypeNullable
Default Comments
-- ---------------------------------------
DEPTNO NUMBER ( 3 )部门编号
DNAME
VARCHAR2 ( 14 )Y部门名称
LOC
VARCHAR2 ( 13 )Y地点

scott.emp表的现有数据如下:

SQL>SELECT*FROMSCOTT.EMP;

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
----------------------------------------------------------------
7369SMITHCLERK79021980-12-17800.0020
7499ALLENSALESMAN76981981-2-201600.00300.0030
7521WARDSALESMAN76981981-2-221250.00500.0030
7566JONESMANAGER78391981-4-22975.0020
7654MARTINSALESMAN76981981-9-281250.001400.0030
7698BLAKEMANAGER78391981-5-12850.0030
7782CLARKMANAGER78391981-6-92450.0010
7788SCOTTANALYST75661987-4-194000.0020
7839KINGPRESIDENT1981-11-175000.0010
7844TURNERSALESMAN76981981-9-81500.000.0030
7876ADAMSCLERK77881987-5-231100.0020
7900JAMESCLERK76981981-12-3950.0030
7902FORDANALYST75661981-12-33000.0020
7934MILLERCLERK77821982-1-231300.0010
102EricHuDeveloper14552011-5-2615500.0014.0010
104huyongPM14552011-5-2615500.0014.0010
105WANGJINGDeveloper14552011-5-2615500.0014.0010

17rowsselected

Scott.dept表的现有数据如下:

SQL>SELECT*FROMSCOTT.DEPT;

DEPTNODNAMELOC
---------------------------------
110信息科海口
10ACCOUNTINGNEWYORK
20RESEARCHDALLAS
30SALESCHICAGO
40OPERATIONSBOSTON
5050abc50def
60DeveloperHaiKou

7rowsselected

SQL完成以下问题列表:

1.找出EMP表中的姓名(ENAME)第三个字母是A的员工姓名。
2.找出EMP表员工名字中含有A和N的员工姓名。
3.找出所有有佣金的员工,列出姓名、工资、佣金,显示结果按工资从小到大,佣金从大到小。
4.列出部门编号为20的所有职位。
5.列出不属于SALES的部门。
6.显示工资不在1000到1500之间的员工信息:名字、工资,按工资从大到小排序。
7.显示职位为MANAGER和SALESMAN,年薪在15000和20000之间的员工的信息:名字、职位、年薪。
8.说明以下两条SQL语句的输出结果:
SELECTEMPNO,COMMFROMEMPWHERECOMMISNULL;
SELECTEMPNO,COMMFROMEMPWHERECOMM=NULL;
9.让SELECT语句的输出结果为
SELECT*FROMSALGRADE;
SELECT*FROMBONUS;
SELECT*FROMEMP;
SELECT*FROMDEPT;
……
列出当前用户有多少张数据表,结果集中存在多少条记录。
10.判断SELECTENAME,SALFROMEMPWHERESAL>'1500'是否抱错,为什么?

各试题解答如下(欢迎大家指出不同的方法或建议!):

--------1.找出EMP表中的姓名(ENAME)第三个字母是A的员工姓名。---------
SQL>SELECTENAMEFROMSCOTT.EMPWHEREENAMELIKE'__A%';

ENAME
----------
ADAMS
BLAKE
CLARK

-------2.找出EMP表员工名字中含有A和N的员工姓名。----------
SQL>SELECTENAMEFROMSCOTT.EMPWHEREENAMELIKE'%A%'ANDENAMELIKE'%N%';

ENAME
----------
ALLEN
MARTIN
WANGJING
--------或--------
SQL>SELECTENAMEFROMSCOTT.EMPWHEREENAMELIKE'%A%N%';

ENAME
----------
ALLEN
MARTIN
WANGJING

/*--------3.找出所有有佣金的员工,列出姓名、工资、佣金,显示结果按工资从小到大,
佣金从大到小。----------
*/
SQL
>SELECTENAME,SAL+COMMASWAGE,COMM
2FROMSCOTT.EMP
3ORDERBYWAGE,COMMDESC;

ENAMEWAGECOMM
-----------------------------
TURNER15000.00
WARD
1750500.00
ALLEN
1900300.00
MARTIN
26501400.00
EricHu
551414.00
WANGJING
551414.00
huyong
551414.00
SMITH
JONES
JAMES
MILLER
FORD
ADAMS
BLAKE
CLARK
SCOTT
KING

17rowsselected

-------4.列出部门编号为20的所有职位。----------
SQL>SELECTDISTINCTJOBFROMEMPWHEREDEPTNO=20;

JOB
---------
ANALYST
CLERK
MANAGER

-------5.列出不属于SALES的部门。----------
SQL>SELECTDISTINCT*FROMSCOTT.DEPTWHEREDNAME<>'SALES';

DEPTNODNAMELOC
---------------------------------
10ACCOUNTINGNEWYORK
20RESEARCHDALLAS
40OPERATIONSBOSTON
5050abc50def
60DeveloperHaiKou
110信息科海口

6rowsselected

--或者:
SQL>SELECTDISTINCT*FROMSCOTT.DEPTWHEREDNAME!='SALES';
SQL
>SELECTDISTINCT*FROMSCOTT.DEPTWHEREDNAMENOTIN('SALES');
SQL
>SELECTDISTINCT*FROMSCOTT.DEPTWHEREDNAMENOTLIKE'SALES';

---6.显示工资不在1000到1500之间的员工信息:名字、工资,按工资从大到小排序。---------
SQL>SELECTENAME,SAL+COMMASWAGEFROMSCOTT.EMP
2WHERESAL+COMMNOTBETWEEN1000AND1500
3ORDERBYWAGEDESC;

ENAMEWAGE
--------------------
EricHu5514
huyong
5514
WANGJING
5514
MARTIN
2650
ALLEN
1900
WARD
1750

6rowsselected
--或者
SQL>SELECTENAME,SAL+COMMASWAGEFROMSCOTT.EMP
2WHERESAL+COMM<1000ORSAL+COMM>1500
3ORDERBYWAGEDESC;

ENAMEWAGE
--------------------
EricHu5514
huyong
5514
WANGJING
5514
MARTIN
2650
ALLEN
1900
WARD
1750

6rowsselected

/*-----7.显示职位为MANAGER和SALESMAN,年薪在15000和20000之间的员工的信息:名字、职位、年薪。----------*/
SQL
>SELECTENAME姓名,JOB职位,(SAL+COMM)*12AS年薪
2FROMSCOTT.EMP
3WHERE(SAL+COMM)*12BETWEEN15000AND20000
4ANDJOBIN('MANAGER','SALESMAN');

姓名职位年薪
-----------------------------
TURNERSALESMAN18000

/*-----8.说明以下两条SQL语句的输出结果:
SELECTEMPNO,COMMFROMEMPWHERECOMMISNULL;
SELECTEMPNO,COMMFROMEMPWHERECOMM=NULL;
----------
*/
SQL
>SELECTEMPNO,COMMFROMEMPWHERECOMMISNULL;

EMPNOCOMM
--------------
7369
7566
7698
7782
7788
7839
7876
7900
7902
7934

10rowsselected

---------------------------------------------------------------
SQL>SELECTEMPNO,COMMFROMEMPWHERECOMM=NULL;

EMPNOCOMM
--------------

--说明:ISNULL是判断某个字段是否为空,为空并不等价于为空字符串或为数字0;
--
而=NULL是判断某个值是否等于NULL,NULL=NULL和NULL<>NULL都为FALSE。

/*-----9.让SELECT语句的输出结果为
SELECT*FROMSALGRADE;
SELECT*FROMBONUS;
SELECT*FROMEMP;
SELECT*FROMDEPT;
……
列出当前用户有多少张数据表,结果集中存在多少条记录。
----------
*/

SQL
>SELECT'SELECT*FROM'||TABLE_NAME||';'FROMUSER_TABLES;

'SELECT*FROM'||TABLE_NAME||';'
---------------------------------------------
SELECT*FROMBONUS;
SELECT*FROMEMP;
SELECT*FROMDEPT;
--......等等,在此不列出。

---10.语句SELECTENAME,SALFROMEMPWHERESAL>'1500'是否抱错?---------
SQL>SELECTENAME,SALFROMEMPWHERESAL>'1500';

ENAMESAL
-------------------
ALLEN1600.00
JONES
2975.00
BLAKE
2850.00
CLARK
2450.00
SCOTT
4000.00
KING
5000.00
FORD
3000.00
EricHu
5500.00
huyong
5500.00
WANGJING
5500.00

10rowsselected

SQL
>SELECTENAME,SALFROMEMPWHERESAL>1500;

ENAMESAL
-------------------
ALLEN1600.00
JONES
2975.00
BLAKE
2850.00
CLARK
2450.00
SCOTT
4000.00
KING
5000.00
FORD
3000.00
EricHu
5500.00
huyong
5500.00
WANGJING
5500.00

10rowsselected
--说明不会抱错,这儿存在隐式数据类型的。

© 2011 EricHu

原创作品,转贴请注明作者和出处,留此信息。

------------------------------------------------

cnBlobs:http://www.cnblogs.com/huyong/
优快云http://blog.youkuaiyun.com/chinahuyong

作者:EricHuDBC/SB/SWebServiceWCFPM等)
出处:http://www.cnblogs.com/huyong/

Q Q80368704 E-Mail: 80368704@qq.com
本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。
更多文章请看[置顶]索引——(不断更新中)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值