现在的位置: 首页 > 综合 > 正文

常用SQl 查询语句

2013年09月02日 ⁄ 综合 ⁄ 共 5876字 ⁄ 字号 评论关闭
 

  1. 1 找出佣金高于薪金60%的雇员。   
  2. SELECT * FROM emp WHERE comm>sal*0.6;   
  3.   
  4. 2 找出部门10中所有经理和部门20中所有办事员的详细资料。   
  5. SELECT * FROM emp   
  6. WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK';   
  7.   
  8. 3 找出部门10中所有经理,部门20中所有办事员以及既不是经理又不是办事员但其薪金大于或等2000的所有雇员的详细资料。   
  9. SELECT * FROM emp   
  10. WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR JOB NOT IN('MANAGER','CLERK') AND SAL>=2000;    
  11. SELECT * FROM emp   
  12. WHERE deptno=10 AND JOB='MANAGER' OR deptno=20 AND job='CLERK' OR (JOB<>'MANAGER' AND JOB<>'MANAGER' AND SAL>=2000);    
  13.   
  14. 4 找出收取佣金的雇员的不同工作。   
  15. SELECT DISTINCT JOB FROM EMP WHERE COMM IS NOT NULL;   
  16.   
  17. 5 找出不收取佣金或收取的佣金低于300的雇员。   
  18. SELECT * FROM EMP WHERE COMM IS NULL OR COMM<300;   
  19.   
  20. 6 找出各月最后一天受雇的所有雇员。   
  21. SELECT * FROM EMP WHERE HIREDATE=LAST_DAY(HIREDATE);   
  22. --找出各月最后受雇的所有雇员   
  23. SELECT * FROM emp WHERE hiredate IN   
  24. (SELECT maxh FROM   
  25. (SELECT MAX(HIREDATE) AS maxh,EXTRACT(MONTH FROM hiredate)   
  26. FROM EMP   
  27. GROUP BY EXTRACT(MONTH FROM hiredate)));   
  28.   
  29. 7 找出晚于26年之前受雇的雇员。   
  30. SELECT * FROM emp WHERE months_between(SYSDATE,hiredate)<=26*12;   
  31.   
  32. 8 显示只有首字母大写的的所有雇员的姓名。   
  33. SELECT * FROM emp WHERE ename=initcap(ename);   
  34.   
  35. 9 显示正好为5个字符的雇员的姓名。   
  36. SELECT * FROM emp WHERE length(ename)=5;   
  37.   
  38. 10显示不带有“R”的雇员姓名。   
  39. SELECT * FROM emp WHERE instr(ename,'R')=0;   
  40. SELECT * FROM emp WHERE ename NOT LIKE '%R%';   
  41.   
  42. 11显示所有雇员的姓名的前三个字符。   
  43. SELECT substr(ename,1,3) AS en3 FROM emp;   
  44.   
  45. 12显所有雇员的姓名,用a替换所有“A”。   
  46. SELECT REPLACE(ename,'A','a') FROM emp;   
  47.   
  48. 13显示所有雇员的姓名以及满10年服务年限的日期。   
  49. SELECT ENAME,HIREDATE,ADD_MONTHS(HIREDATE,120) AS H_10Y FROM EMP;   
  50.   
  51. 14显示雇员的详细资料,按姓名排序。   
  52. SELECT * FROM EMP ORDER BY ENAME;   
  53.   
  54. 15显示雇员姓名,根据其服务年限,将最老的雇员排在最前面。   
  55. SELECT ENAME,HIREDATE FROM EMP ORDER BY HIREDATE;   
  56.   
  57. 16显示所有雇员的姓名、工作和薪金,按工作内的工作的降序顺序顺序排序,而工作按薪金排序。   
  58. SELECT ENAME,JOB,SAL   
  59. FROM EMP   
  60. ORDER BY JOB DESC,SAL;   
  61.   
  62. 17显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,并将最早年份的项目排在最前面。   
  63. SELECT ENAME,TO_CHAR(HIREDATE,'YYYY-MM') AS Y_M   
  64. FROM EMP   
  65. ORDER BY TO_CHAR(HIREDATE,'MM'),TO_CHAR(HIREDATE,'YYYY');   
  66.   
  67. 18显示在一个月为30天的情况下所有雇员的日薪金,取整。   
  68. SELECT ROUND(SAL/30) AS SAL FROM EMP;   
  69.   
  70. 19找出在(任何年份的)2月受聘的所有雇员。   
  71. SELECT * FROM EMP WHERE TO_CHAR(HIREDATE,'MM')='02';   
  72.   
  73. 20对于每个雇员,显示其加入公司的天数。   
  74. SELECT CEIL(SYSDATE-HIREDATE) AS DY FROM EMP;   
  75.   
  76. 21显示姓名字段的任何位置,包含“A”的所有雇员的姓名。   
  77. SELECT ENAME FROM EMP WHERE ENAME LIKE '%A%';   
  78. SELECT ENAME FROM EMP WHERE INSTR(ENAME,'A')>0;   
  79.   
  80. 22以年、月和日显示所有雇员的服务年限。   
  81. SELECT HIREDATE,   
  82.   FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12) AS Y,   
  83.   MOD(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE)),12) AS M,   
  84.   MOD(FLOOR(SYSDATE-HIREDATE),30) AS D   
  85. FROM EMP;   
  86.   
  87. 23列出至少有一个雇员的所有部门。   
  88. SELECT * FROM DEPT WHERE DEPTNO IN (SELECT DISTINCT DEPTNO FROM EMP);   
  89.   
  90. 24列出薪金比“SMITH”多的所有雇员。   
  91. SELECT * FROM EMP WHERE SAL>(SELECT SAL FROM EMP WHERE ENAME='SMITH');   
  92.   
  93. 25列出所有雇员的姓名及其上级的姓名。   
  94. SELECT ygb.ename AS empnm,sjb.ename AS mgrnm   
  95. FROM emp ygb,emp sjb   
  96. WHERE ygb.mgr=sjb.empno;   
  97.   
  98. 26列出入职日期早于其直接上级的所有雇员。   
  99. SELECT * FROM emp ygb WHERE hiredate<(SELECT hiredate FROM emp sjb WHERE sjb.empno=ygb.mgr);   
  100.   
  101. 27列出部门和这些部门的雇员,同时列出那些没有雇员的部门。   
  102. /*  
  103. SELECT * FROM dept WHERE deptno IN (SELECT DISTINCT deptno FROM emp)  
  104. UNION  
  105. SELECT * FROM dept WHERE deptno NOT IN (SELECT DISTINCT deptno FROM emp)  
  106. */  
  107. SELECT dname,ename   
  108. FROM dept a LEFT JOIN emp b   
  109. ON a.deptno=b.deptno;   
  110.   
  111. 28列出所有“CLERK”(办事员)的姓名及其部门名称。   
  112. SELECT ename,dname   
  113. FROM dept a,emp b   
  114. WHERE a.deptno=b.deptno AND job='CLERK';   
  115.   
  116. 29列出各种类型的最低薪金,并使最低薪金大于1500。   
  117. SELECT job,MIN(sal)   
  118. FROM emp   
  119. GROUP BY job   
  120. HAVING MIN(sal)>1500;   
  121.   
  122. 30列出从事“SALES”(销售)工作的雇员的姓名,假定不知道销售部的部门编号。   
  123. SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE dname='SALES');   
  124.   
  125. 31列出薪金高于公司平均水平的所有雇员。   
  126. SELECT * FROM EMP WHERE SAL>(SELECT AVG(SAL) FROM EMP);   
  127.   
  128. 32列出与“SCOTT”从事相同工作的所有雇员。   
  129. SELECT * FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME='SCOTT') AND ENAME<>'SCOTT';   
  130.   
  131. 33列出薪金等于在部门30工作的所有雇员的姓名和薪金。   
  132. SELECT * FROM EMP WHERE SAL IN(SELECT SAL FROM EMP WHERE DEPTNO=30);   
  133.   
  134. 34列出薪金高于在部门30工作的所有雇员的姓名和薪金。   
  135. SELECT * FROM EMP WHERE SAL >ALL(SELECT SAL FROM EMP WHERE DEPTNO=30);   
  136.   
  137. 35列出在每个部门工作的雇员的经理以及其他信息。   
  138. SELECT A.*,B.*   
  139. FROM DEPT A,EMP B   
  140. WHERE A.DEPTNO=B.DEPTNO AND JOB='MANAGER';   
  141. /*  
  142. SELECT A.*,B.*  
  143. FROM (SELECT * FROM EMP WHERE JOB<>'MANAGER') A,(SELECT * FROM EMP WHERE JOB='MANAGER') B  
  144. WHERE A.DEPTNO=B.DEPTNO AND B.JOB='MANAGER'  
  145. ORDER BY A.DEPTNO;  
  146. */  
  147.   
  148. 36列出所有雇员的雇员名称、部门名称和薪金。   
  149. SELECT ENAME,DNAME,SAL   
  150. FROM DEPT A,EMP B   
  151. WHERE A.DEPTNO=B.DEPTNO;   
  152.   
  153. 37列出从事同一种工作但属于不同部门的雇员的不同组合。   
  154. SELECT * FROM emp ORDER BY job,deptno;   
  155.   
  156. 38列出分配有雇员数量的所有部门的详细信息,即使是分配有0个雇员。   
  157. SELECT * FROM dept WHERE deptno IN (SELECT DISTINCT deptno FROM emp)   
  158. UNION   
  159. SELECT * FROM dept WHERE deptno NOT IN (SELECT DISTINCT deptno FROM emp)   
  160.   
  161. 39列出各种类型工作的最低工资。   
  162. SELECT job,MIN(sal)   
  163. FROM emp   
  164. GROUP BY job;   
  165.   
  166. 40列出各个部门的MANAGER(经理)的最低薪金。   
  167. SELECT MIN(sal) FROM emp WHERE job='MANAGER';   
  168.   
  169. 41列出按年薪排序的所有雇员的年薪。   
  170. SELECT sal*12 AS y_sal FROM emp ORDER BY sal*12;   
  171.   
  172. 42列出薪金水平处于第四位的雇员。   
  173. SELECT * FROM   
  174.   (SELECT a.*,row_number() over(ORDER BY sal DESC) AS rn FROM emp a)   
  175. WHERE rn=4;   
  176.   
  177. 43查找EMP表中前5条记录   
  178. SELECT * FROM emp WHERE ROWNUM<=5;   
  179.   
  180. 44查找EMP表中10条以后的记录   
  181. SELECT * FROM (SELECT a.*,ROWNUM AS rn FROM emp a) WHERE rn>10;   
  182.   
  183. 45查找EMP表中薪水第5高的员工   
  184. SELECT * FROM   
  185.   (SELECT a.*,row_number() over(ORDER BY sal DESC) AS rn FROM emp a)   
  186. WHERE rn=5;   
  187.   
  188. 46查找EMP表部门30中薪水第3的员工   
  189. SELECT * FROM   
  190.   (SELECT a.*,row_number() over(PARTITION BY deptno ORDER BY sal DESC) AS rn FROM emp a)   
  191. WHERE rn=5 AND deptno=30;   
  192.   
  193. 47查找EMP表中每部门薪水第3的员工   
  194. SELECT * FROM   
  195.   (SELECT a.*,row_number() over(PARTITION BY deptno ORDER BY sal DESC) AS rn FROM emp a)   
  196. WHERE rn=3;   
  197.   
  198. 48统计各部门的薪水总和.   
  199. SELECT deptno,SUM(sal) AS sumsal   
  200. FROM emp   
  201. GROUP BY deptno;   
  202.   
  203. --每个部门员工和经理的详细信息:编号,姓名,薪水,入职日期,部门编号   
  204. SELECT a.empno AS eno,a.ename AS enm,a.job AS ejob,a.sal AS esal,a.hiredate AS edate,a.deptno AS edept,   
  205.        b.empno AS mno,b.ename AS mnm,b.job AS mjob,b.sal AS msal,b.hiredate AS mdate,b.deptno AS mdept   
  206. FROM (SELECT * FROM emp WHERE job<>'MANAGER' AND job<>'PRESIDENT') a,(SELECT * FROM emp WHERE job='MANAGER') b   
  207. WHERE a.deptno=b.deptno;  

抱歉!评论已关闭.