如何解锁呢?尤其是新接触oracle的用户:
一下是练习表:
勤加练习,你行的:
1 --1、选择部门30的所有员工 2 SELECT * FROM EMP WHERE deptno=30; 3 --结果 4 SELECT * FROM EMP WHERE deptno=30; 5 6 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7 ----- ---------- --------- ----- ----------- --------- --------- ------ 8 7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30 9 7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30 10 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30 11 7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30 12 7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30 13 7900 JAMES CLERK 7698 03-十二月-81 950.00 30 14 15 --2、列出所有办事员(CLERK)的姓名,员工编号和部门编号 16 SELECT ename 姓名,empno 员工编号,deptno 部门编号 FROM emp WHERE job='CLERK'; 17 --结果 18 姓名 员工编号 部门编号 19 ---------- -------- -------- 20 SMITH 7369 20 21 ADAMS 7876 20 22 JAMES 7900 30 23 MILLER 7934 10 24 25 --3、找出佣金高于薪金的员工 26 SELECT * FROM EMP WHERE NVL(comm,0)>sal; 27 --结果 28 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 29 ----- ---------- --------- ----- ----------- --------- --------- ------ 30 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30 31 32 33 --4、找出佣金高于薪金60%的员工 34 SELECT * FROM EMP WHERE NVL(comm,0)>sal*0.6; 35 --结果 36 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 37 ----- ---------- --------- ----- ----------- --------- --------- ------ 38 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30 39 40 --5、找出部门10中的所有经理(MANAGER)和部门20的所有办事员(CLERK)的详细资料 41 SELECT * FROM EMP WHERE (job='MANAGER' AND deptno=10) OR (job='CLERK' AND deptno=20); 42 --结果 43 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 44 ----- ---------- --------- ----- ----------- --------- --------- ------ 45 7369 SMITH CLERK 7902 17-十二月-80 800.00 20 46 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10 47 7876 ADAMS CLERK 7788 23-五月-87 1100.00 20 48 49 --6、找出部门10的所有经理(MANAGER),部门20中所有办事员(CLERK),既不是办事员也不是经理但是薪金大于2000的所有员工的详细资料 50 SELECT * FROM EMP WHERE (job='MANAGER' AND deptno=10) OR (job='CLERK' AND deptno=20) OR (job NOT IN('MANAGER','CLERK') AND sal>2000); 51 --结果 52 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 53 ----- ---------- --------- ----- ----------- --------- --------- ------ 54 7369 SMITH CLERK 7902 17-十二月-80 800.00 20 55 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10 56 7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20 57 7839 KING PRESIDENT 17-十一月-81 5000.00 10 58 7876 ADAMS CLERK 7788 23-五月-87 1100.00 20 59 7902 FORD ANALYST 7566 03-十二月-81 3000.00 20 60 61 6 rows selected 62 63 64 --7、找出收取佣金的员工的员工的不同工作 65 SELECT DISTINCT(job) FROM EMP WHERE comm IS NOT NULL AND comm !=0; 66 --结果 67 JOB 68 --------- 69 SALESMAN 70 71 --8、找出不取佣金或者是收取佣金小于100的员工详细信息 72 SELECT * FROM EMP WHERE comm IS NULL OR comm<100; 73 --结果 74 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 75 ----- ---------- --------- ----- ----------- --------- --------- ------ 76 7369 SMITH CLERK 7902 17-十二月-80 800.00 20 77 7566 JONES MANAGER 7839 02-四月-81 2975.00 20 78 7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30 79 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10 80 7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20 81 7839 KING PRESIDENT 17-十一月-81 5000.00 10 82 7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30 83 7876 ADAMS CLERK 7788 23-五月-87 1100.00 20 84 7900 JAMES CLERK 7698 03-十二月-81 950.00 30 85 7902 FORD ANALYST 7566 03-十二月-81 3000.00 20 86 7934 MILLER CLERK 7782 23-一月-82 1300.00 10 87 88 11 rows selected 89 90 --9、找出各月的倒数第三天受雇佣的员工 91 --每个员工的雇佣时间是不一样的,所有需要找出每个员工雇佣的时间所在月份的最后一天, 92 --之后按照‘日期-数字’的方式求出前三天的日期,这个日期必须和雇佣日期相符才能满足条件。 93 SELECT LAST_DAY(hiredate),EMP.* FROM EMP WHERE LAST_DAY(hiredate)-2=hiredate; 94 --结果 95 LAST_DAY(HIREDATE) EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 96 ------------------ ----- ---------- --------- ----- ----------- --------- --------- ------ 97 30-九月-81 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30 98 99 --10、找出12早于年前受雇的员工 100 --先使用MONTHS_BETWEEN(SYSDATE,hiredate)求出雇佣的月份,然后除以12的到雇佣的年份 101 SELECT MONTHS_BETWEEN(SYSDATE,hiredate)/12 雇佣年份,EMP.* FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,hiredate)/12 > 12; 102 --结果 103 雇佣年份 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 104 ---------- ----- ---------- --------- ----- ----------- --------- --------- ------ 105 31.5449952 7369 SMITH CLERK 7902 17-十二月-80 800.00 20 106 31.3702640 7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30 107 31.3648877 7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30 108 31.25 7566 JONES MANAGER 7839 02-四月-81 2975.00 20 109 30.7654253 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30 110 31.1713393 7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30 111 31.0665006 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10 112 25.2062855 7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20 113 30.6283285 7839 KING PRESIDENT 17-十一月-81 5000.00 10 114 30.8191887 7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30 115 25.1121995 7876 ADAMS CLERK 7788 23-五月-87 1100.00 20 116 30.5826296 7900 JAMES CLERK 7698 03-十二月-81 950.00 30 117 30.5826296 7902 FORD ANALYST 7566 03-十二月-81 3000.00 20 118 30.4455328 7934 MILLER CLERK 7782 23-一月-82 1300.00 10 119 120 14 rows selected 121 122 123 --11、以首字母大写的方式显示员工姓名 124 SELECT INITCAP(ename) FROM emp; 125 --结果 126 INITCAP(ENAME) 127 -------------- 128 Smith 129 Allen 130 Ward 131 Jones 132 Martin 133 Blake 134 Clark 135 Scott 136 King 137 Turner 138 Adams 139 James 140 Ford 141 Miller 142 143 14 rows selected 144 145 --12、显示姓名正好为5个长度的所有员工 146 SELECT * FROM EMP WHERE LENGTH(ename) = 5; 147 --结果 148 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 149 ----- ---------- --------- ----- ----------- --------- --------- ------ 150 7369 SMITH CLERK 7902 17-十二月-80 800.00 20 151 7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30 152 7566 JONES MANAGER 7839 02-四月-81 2975.00 20 153 7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30 154 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10 155 7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20 156 7876 ADAMS CLERK 7788 23-五月-87 1100.00 20 157 7900 JAMES CLERK 7698 03-十二月-81 950.00 30 158 159 8 rows selected 160 161 --13、显示带有'R'的员工的详细 162 SELECT * FROM EMP WHERE ename LIKE '%R%'; 163 --结果 164 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 165 ----- ---------- --------- ----- ----------- --------- --------- ------ 166 7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30 167 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30 168 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10 169 7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30 170 7902 FORD ANALYST 7566 03-十二月-81 3000.00 20 171 7934 MILLER CLERK 7782 23-一月-82 1300.00 10 172 173 6 rows selected 174 175 --14、显示员工姓名的前三个字符 176 SELECT ename 全名,SUBSTR(ename,0,3) 前三个字符 FROM EMP; 177 --结果 178 全名 前三个字符 179 ---------- ---------- 180 SMITH SMI 181 ALLEN ALL 182 WARD WAR 183 JONES JON 184 MARTIN MAR 185 BLAKE BLA 186 CLARK CLA 187 SCOTT SCO 188 KING KIN 189 TURNER TUR 190 ADAMS ADA 191 JAMES JAM 192 FORD FOR 193 MILLER MIL 194 195 14 rows selected 196 197 --15、显示所有员工的姓名,用‘a’替换所有的'A' 198 SELECT ename 原名,REPLACE(ename,'A','a') 大A替换为小a FROM EMP; 199 --结果 200 原名 大A替换为小A 201 ---------- ------------ 202 SMITH SMITH 203 ALLEN aLLEN 204 WARD WaRD 205 JONES JONES 206 MARTIN MaRTIN 207 BLAKE BLaKE 208 CLARK CLaRK 209 SCOTT SCOTT 210 KING KING 211 TURNER TURNER 212 ADAMS aDaMS 213 JAMES JaMES 214 FORD FORD 215 MILLER MILLER 216 217 14 rows selected 218 219 --16、--列出满10年雇佣期限的员工的详细信息 220 SELECT * FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,hiredate)/12>10; 221 --结果 222 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 223 ----- ---------- --------- ----- ----------- --------- --------- ------ 224 7369 SMITH CLERK 7902 17-十二月-80 800.00 20 225 7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30 226 7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30 227 7566 JONES MANAGER 7839 02-四月-81 2975.00 20 228 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30 229 7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30 230 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10 231 7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20 232 7839 KING PRESIDENT 17-十一月-81 5000.00 10 233 7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30 234 7876 ADAMS CLERK 7788 23-五月-87 1100.00 20 235 7900 JAMES CLERK 7698 03-十二月-81 950.00 30 236 7902 FORD ANALYST 7566 03-十二月-81 3000.00 20 237 7934 MILLER CLERK 7782 23-一月-82 1300.00 10 238 239 14 rows selected 240 241 --显示员工的详细资料,并按姓名排序 242 SELECT * FROM EMP ORDER BY ename; 243 --结果 244 SELECT * FROM EMP ORDER BY ename; 245 246 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 247 ----- ---------- --------- ----- ----------- --------- --------- ------ 248 7876 ADAMS CLERK 7788 23-五月-87 1100.00 20 249 7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30 250 7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30 251 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10 252 7902 FORD ANALYST 7566 03-十二月-81 3000.00 20 253 7900 JAMES CLERK 7698 03-十二月-81 950.00 30 254 7566 JONES MANAGER 7839 02-四月-81 2975.00 20 255 7839 KING PRESIDENT 17-十一月-81 5000.00 10 256 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30 257 7934 MILLER CLERK 7782 23-一月-82 1300.00 10 258 7788 SCOTT ANALYST 7566 19-四月-87 3000.00 20 259 7369 SMITH CLERK 7902 17-十二月-80 800.00 20 260 7844 TURNER SALESMAN 7698 08-九月-81 1500.00 0.00 30 261 7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30 262 263 14 rows selected 264 265 --18、显示员工的姓名和受雇日期,并按照老的员工排在前面的方式显示出来 266 SELECT ename,hiredate FROM EMP ORDER BY hiredate ASC; 267 --结果 268 ENAME HIREDATE 269 ---------- ----------- 270 SMITH 17-十二月-80 271 ALLEN 20-二月-81 272 WARD 22-二月-81 273 JONES 02-四月-81 274 BLAKE 01-五月-81 275 CLARK 09-六月-81 276 TURNER 08-九月-81 277 MARTIN 28-九月-81 278 KING 17-十一月-81 279 JAMES 03-十二月-81 280 FORD 03-十二月-81 281 MILLER 23-一月-82 282 SCOTT 19-四月-87 283 ADAMS 23-五月-87 284 285 14 rows selected 286 287 --19、显示所有员工的姓名、工作和薪金,按工作的降序排列,工作相同则按照薪金的升序排列 288 SELECT ename,job,sal FROM emp ORDER BY job DESC,sal ASC; 289 --结果 290 ENAME JOB SAL 291 ---------- --------- --------- 292 WARD SALESMAN 1250.00 293 MARTIN SALESMAN 1250.00 294 TURNER SALESMAN 1500.00 295 ALLEN SALESMAN 1600.00 296 KING PRESIDENT 5000.00 297 CLARK MANAGER 2450.00 298 BLAKE MANAGER 2850.00 299 JONES MANAGER 2975.00 300 SMITH CLERK 800.00 301 JAMES CLERK 950.00 302 ADAMS CLERK 1100.00 303 MILLER CLERK 1300.00 304 SCOTT ANALYST 3000.00 305 FORD ANALYST 3000.00 306 307 14 rows selected 308 309 --20、显示所有员工的姓名、加入公司的年份和月份、按接受所在雇佣月排序,若月的相同则按最早年份的员工排在最前面 310 --本程序需要求出所雇的日期的年份和月份,然后再来显示 311 SELECT ename 姓名,TO_CHAR(hiredate,'yyyy') 年份, TO_CHAR(hiredate,'mm') 月份 FROM emp ORDER BY 月份,年份; 312 --结果 313 姓名 年份 月份 314 ---------- ---- ---- 315 MILLER 1982 01 316 ALLEN 1981 02 317 WARD 1981 02 318 JONES 1981 04 319 SCOTT 1987 04 320 BLAKE 1981 05 321 ADAMS 1987 05 322 CLARK 1981 06 323 TURNER 1981 09 324 MARTIN 1981 09 325 KING 1981 11 326 SMITH 1980 12 327 JAMES 1981 12 328 FORD 1981 12 329 330 14 rows selected 331 332 333 --21、显示一个月为30天的情况下,所有员工的日薪,忽略余数 334 SELECT ename 姓名,sal 月薪,TRUNC(sal/30) 日薪 FROM EMP; 335 --结果 336 姓名 月薪 日薪 337 ---------- --------- ---------- 338 SMITH 800.00 26 339 ALLEN 1600.00 53 340 WARD 1250.00 41 341 JONES 2975.00 99 342 MARTIN 1250.00 41 343 BLAKE 2850.00 95 344 CLARK 2450.00 81 345 SCOTT 3000.00 100 346 KING 5000.00 166 347 TURNER 1500.00 50 348 ADAMS 1100.00 36 349 JAMES 950.00 31 350 FORD 3000.00 100 351 MILLER 1300.00 43 352 353 --22、找出在(任何年份的)2月受雇的员工 354 SELECT * FROM EMP WHERE TO_CHAR(hiredate,'mm') = 02; 355 --结果 356 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 357 ----- ---------- --------- ----- ----------- --------- --------- ------ 358 7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30 359 7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30 360 361 --23、对于每个员工显示其来到公司的天数 362 SELECT ename 姓名,SYSDATE-hiredate 来公司的天数 FROM EMP; 363 --结果 364 姓名 来公司的天数 365 ---------- ------------ 366 SMITH 11520.760555 367 ALLEN 11455.760555 368 WARD 11453.760555 369 JONES 11414.760555 370 MARTIN 11235.760555 371 BLAKE 11385.760555 372 CLARK 11346.760555 373 SCOTT 9206.7605555 374 KING 11185.760555 375 TURNER 11255.760555 376 ADAMS 9172.7605555 377 JAMES 11169.760555 378 FORD 11169.760555 379 MILLER 11118.760555 380 381 14 rows selected 382 383 384 --24、显示姓名字段的任何位置包含有’A‘的员工 385 SELECT * FROM EMP WHERE ename LIKE '%A%'; 386 --结果 387 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 388 ----- ---------- --------- ----- ----------- --------- --------- ------ 389 7499 ALLEN SALESMAN 7698 20-二月-81 1600.00 300.00 30 390 7521 WARD SALESMAN 7698 22-二月-81 1250.00 500.00 30 391 7654 MARTIN SALESMAN 7698 28-九月-81 1250.00 1400.00 30 392 7698 BLAKE MANAGER 7839 01-五月-81 2850.00 30 393 7782 CLARK MANAGER 7839 09-六月-81 2450.00 10 394 7876 ADAMS CLERK 7788 23-五月-87 1100.00 20 395 7900 JAMES CLERK 7698 03-十二月-81 950.00 30 396 397 7 rows selected 398 399 --25、以月份的方式显示所有员工的服务年限 400 --结果分析: 401 -- 第一步:求出员工的雇佣年数,雇佣的月数除以12 402 SELECT ename,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 年数 FROM EMP; 403 404 ENAME 年数 405 ---------- ---------- 406 SMITH 31 407 ALLEN 31 408 WARD 31 409 JONES 31 410 MARTIN 30 411 BLAKE 31 412 CLARK 31 413 SCOTT 25 414 KING 30 415 TURNER 30 416 ADAMS 25 417 JAMES 30 418 FORD 30 419 MILLER 30 420 421 14 rows selected 422 -- 第二步:求除去的出去年份之后的月份 423 SELECT ename,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 年数,TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) 月数 FROM emp; 424 425 ENAME 年数 月数 426 ---------- ---------- ---------- 427 SMITH 31 6 428 ALLEN 31 4 429 WARD 31 4 430 JONES 31 3 431 MARTIN 30 9 432 BLAKE 31 2 433 CLARK 31 0 434 SCOTT 25 2 435 KING 30 7 436 TURNER 30 9 437 ADAMS 25 1 438 JAMES 30 6 439 FORD 30 6 440 MILLER 30 5 441 442 14 rows selected 443 444 -- 第三步:求出的除去年份和月份之后的天数 445 SELECT ename,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 年数,TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) 月数,TRUNC(SYSDATE-ADD_MONTHS(hiredate,MONTHS_BETWEEN(SYSDATE,hiredate))) 天数 FROM emp; 446 ENAME 年数 月数 天数 447 ---------- ---------- ---------- ---------- 448 SMITH 31 6 15 449 ALLEN 31 4 12 450 WARD 31 4 10 451 JONES 31 3 0 452 MARTIN 30 9 4 453 BLAKE 31 2 1 454 CLARK 31 0 23 455 SCOTT 25 2 13 456 KING 30 7 15 457 TURNER 30 9 24 458 ADAMS 25 1 9 459 JAMES 30 6 29 460 FORD 30 6 29 461 MILLER 30 5 9 462 463 14 rows selected 464 465 --最后结果 466 SELECT ename,TO_CHAR(SYSDATE,'YYYY-MM-DD'),TO_CHAR(hiredate,'YYYY-MM-DD') 雇佣日期,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) 年数,TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) 月数,TRUNC(SYSDATE-ADD_MONTHS(hiredate,MONTHS_BETWEEN(SYSDATE,hiredate))) 天数 FROM emp; 467 --结果 468 ENAME TO_CHAR(SYSDATE,'YYYY-MM-DD') 雇佣日期 年数 月数 天数 469 ---------- ----------------------------- ---------- ---------- ---------- ---------- 470 SMITH 2012-07-02 1980-12-17 31 6 15 471 ALLEN 2012-07-02 1981-02-20 31 4 12 472 WARD 2012-07-02 1981-02-22 31 4 10 473 JONES 2012-07-02 1981-04-02 31 3 0 474 MARTIN 2012-07-02 1981-09-28 30 9 4 475 BLAKE 2012-07-02 1981-05-01 31 2 1 476 CLARK 2012-07-02 1981-06-09 31 0 23 477 SCOTT 2012-07-02 1987-04-19 25 2 13 478 KING 2012-07-02 1981-11-17 30 7 15 479 TURNER 2012-07-02 1981-09-08 30 9 24 480 ADAMS 2012-07-02 1987-05-23 25 1 9 481 JAMES 2012-07-02 1981-12-03 30 6 29 482 FORD 2012-07-02 1981-12-03 30 6 29 483 MILLER 2012-07-02 1982-01-23 30 5 9 484 485 14 rows selected