软件工具:ORACLE 11g,

第三方软件:PLSQL Developer

安装教程找百度,打破传统,建立数据库,建表操作先搁置一旁。从查询开始。

                                     ORACLE的基本查询

(1)简单查询------select

        从数据库中收集信息才是王道,因此检索信息是至关重要的关键步骤。查询数据使用select语句。

      语法: select <*,字段名1,字段名2..> 表名

     以下是使用ORACLE默认安装的示例数据库来演示。

     1.显示表的结构-----desc

        查看部门表的结构

  1. SQL> desc dept;  
  2. Name   Type         Nullable Default Comments   
  3. ------ ------------ -------- ------- --------   
  4. DEPTNO NUMBER(2)                                
  5. DNAME  VARCHAR2(14) Y                           
  6. LOC    VARCHAR2(13) Y                           
  7.   

    查看雇员表的结构

  1. SQL> desc emp;  
  2. Name     Type         Nullable Default Comments   
  3. -------- ------------ -------- ------- --------   
  4. EMPNO    NUMBER(4)                                
  5. ENAME    VARCHAR2(10) Y                           
  6. JOB      VARCHAR2(9)  Y                           
  7. MGR      NUMBER(4)    Y                           
  8. HIREDATE DATE         Y                           
  9. SAL      NUMBER(7,2)  Y                           
  10. COMM     NUMBER(7,2)  Y                           
  11. DEPTNO   NUMBER(2)    Y                           
  12.   

2.查询所有列表的数据

    主要使用*符号即可查询到所有列。

  1. SQL> select * from dept;  
  2.    
  3. DEPTNO DNAME          LOC  
  4. ------ -------------- -------------  
  5.     10 ACCOUNTING     NEW YORK  
  6.     20 RESEARCH       DALLAS  
  7.     30 SALES          CHICAGO  
  8.     40 OPERATIONS     BOSTON  
  9.   

3.查询特定的某些列

     查看雇员的姓名,岗位,工资,部门号信息,注意列名间要用逗号隔开

  1. SQL> select ename ,job,sal,deptno from emp;  
  2.    
  3. ENAME      JOB             SAL DEPTNO  
  4. ---------- --------- --------- ------  
  5. SMITH      CLERK        880.00     20  
  6. ALLEN      SALESMAN    1600.00     30  
  7. WARD       SALESMAN    1250.00     30  
  8. JONES      MANAGER     3272.50     20  
  9. MARTIN     SALESMAN    1250.00     30  
  10. BLAKE      MANAGER     2850.00     30  
  11. CLARK      MANAGER     2450.00     10  
  12. SCOTT      ANALYST     2706.00     20  
  13. KING       PRESIDENT   5000.00     10  
  14. TURNER     SALESMAN    1500.00     30  
  15. ADAMS      CLERK       1210.00     20  
  16. JAMES      CLERK        950.00     30  
  17. FORD       ANALYST     3300.00     20  
  18. MILLER     CLERK       1300.00     10  
  19.    
  20. 14 rows selected  
  21.   

4.查询日期相关列

     查询出来的日期显示方式可能有所不同。主要原因是数据库本身安装的语言不同,显示方式有所差别,或者第三方工具显未日期格式有所差别。

默认方式:

  1. SQL> select ename,hiredate from emp;  
  2.    
  3. ENAME      HIREDATE  
  4. ---------- -----------  
  5. SMITH      1980/12/17  
  6. ALLEN      1981/2/20  
  7. WARD       1981/2/22  
  8. JONES      1981/4/2  
  9. MARTIN     1981/9/28  
  10. BLAKE      1981/5/1  
  11. CLARK      1981/6/9  
  12. SCOTT      1982/1/2  
  13. KING       1981/11/17  
  14. TURNER     1981/9/8  
  15. ADAMS      1987/5/23  
  16. JAMES      1981/12/3  
  17. FORD       1981/12/3  
  18. MILLER     1982/1/23  
  19.    
  20. 14 rows selected  
  21.   

如果你觉得看起来丑陋,不自然!可使用to_char来改变显示方式。

 

  1. SQL> select ename,to_char(hiredate,'YYYY-MM-DD'from emp;  
  2.    
  3. ENAME      TO_CHAR(HIREDATE,'YYYY-MM-DD')  
  4. ---------- ------------------------------  
  5. SMITH      1980-12-17  
  6. ALLEN      1981-02-20  
  7. WARD       1981-02-22  
  8. JONES      1981-04-02  
  9. MARTIN     1981-09-28  
  10. BLAKE      1981-05-01  
  11. CLARK      1981-06-09  
  12. SCOTT      1982-01-02  
  13. KING       1981-11-17  
  14. TURNER     1981-09-08  
  15. ADAMS      1987-05-23  
  16. JAMES      1981-12-03  
  17. FORD       1981-12-03  
  18. MILLER     1982-01-23  
  19.    
  20. 14 rows selected  
  21.   

5.踢除重复的行
  只要添加distinct这个关键字即可。第一个例子是保留重复的,第二个例子消除不重复。

  1. SQL> select deptno,job from emp;  
  2.    
  3. DEPTNO JOB  
  4. ------ ---------  
  5.     20 CLERK  
  6.     30 SALESMAN  
  7.     30 SALESMAN  
  8.     20 MANAGER  
  9.     30 SALESMAN  
  10.     30 MANAGER  
  11.     10 MANAGER  
  12.     20 ANALYST  
  13.     10 PRESIDENT  
  14.     30 SALESMAN  
  15.     20 CLERK  
  16.     30 CLERK  
  17.     20 ANALYST  
  18.     10 CLERK  
  19.    
  20. 14 rows selected  
  21.    
  22. SQL> select distinct deptno,job from emp;  
  23.    
  24. DEPTNO JOB  
  25. ------ ---------  
  26.     20 CLERK  
  27.     30 SALESMAN  
  28.     20 MANAGER  
  29.     30 CLERK  
  30.     10 PRESIDENT  
  31.     30 MANAGER  
  32.     10 CLERK  
  33.     10 MANAGER  
  34.     20 ANALYST  
  35.    
  36. rows selected  

6.算术表达式的运用

   对于某些算术型的列可以使用算述表达式+—*/

  下例是查询雇员名,与年薪。

  1. SQL> select ename,sal*12 from emp;  
  2.    
  3. ENAME          SAL*12  
  4. ---------- ----------  
  5. SMITH           10560  
  6. ALLEN           19200  
  7. WARD            15000  
  8. JONES           39270  
  9. MARTIN          15000  
  10. BLAKE           34200  
  11. CLARK           29400  
  12. SCOTT           32472  
  13. KING            60000  
  14. TURNER          18000  
  15. ADAMS           14520  
  16. JAMES           11400  
  17. FORD            39600  
  18. MILLER          15600  
  19.    
  20. 14 rows selected  
  21.   

7.别名的运用

   只要在列字后加as "某某某" 即可。 注意一定要使用双引号,单引号出错!

 

  1. SQL>  select ename as "姓名",sal*12 as "年薪" from emp;  
  2.    
  3. 姓名               年薪  
  4. ---------- ----------  
  5. SMITH           10560  
  6. ALLEN           19200  
  7. WARD            15000  
  8. JONES           39270  
  9. MARTIN          15000  
  10. BLAKE           34200  
  11. CLARK           29400  
  12. SCOTT           32472  
  13. KING            60000  
  14. TURNER          18000  
  15. ADAMS           14520  
  16. JAMES           11400  
  17. FORD            39600  
  18. MILLER          15600  
  19.    
  20. 14 rows selected  
  21.   

8 NULL处理

NULL表示未知值,不是0也不是空格。如果某列没有数据,也没有默认值,则为NULL。十分要注意的是,NULL进行算述运算时,结果为NULL!

 

  1. SQL> select ename,sal,comm,sal+comm from emp;  
  2.    
  3. ENAME            SAL      COMM   SAL+COMM  
  4. ---------- --------- --------- ----------  
  5. SMITH         880.00     80.00        960  
  6. ALLEN        1600.00    300.00       1900  
  7. WARD         1250.00    500.00       1750  
  8. JONES        3272.50    297.50       3570  
  9. MARTIN       1250.00   1400.00       2650  
  10. BLAKE        2850.00             
  11. CLARK        2450.00             
  12. SCOTT        2706.00    246.00       2952  
  13. KING         5000.00             
  14. TURNER       1500.00      0.00       1500  
  15. ADAMS        1210.00    110.00       1320  
  16. JAMES         950.00             
  17. FORD         3300.00    300.00       3600  
  18. MILLER       1300.00             
  19.    
  20. 14 rows selected  

你会发现,如果COMM为NULL时,SAL+COMM就是NULL.

如果需要正确地显示SAL+COMM的结果的,NULL处理方式常用的有两种:

  (1)NVL函数处理

   NVL函数有两个参数,如:NVL(expr1,expr2)如果第一个参数为NULL,则返回第二个参数; 如果第一个参数不为NULL,则直接将它返回。

  1. SQL> select ename,sal,comm,sal+nvl(comm,0) as"月新" from emp;  
  2.    
  3. ENAME            SAL      COMM         月新  
  4. ---------- --------- --------- ----------  
  5. SMITH         880.00     80.00        960  
  6. ALLEN        1600.00    300.00       1900  
  7. WARD         1250.00    500.00       1750  
  8. JONES        3272.50    297.50       3570  
  9. MARTIN       1250.00   1400.00       2650  
  10. BLAKE        2850.00                 2850  
  11. CLARK        2450.00                 2450  
  12. SCOTT        2706.00    246.00       2952  
  13. KING         5000.00                 5000  
  14. TURNER       1500.00      0.00       1500  
  15. ADAMS        1210.00    110.00       1320  
  16. JAMES         950.00                  950  
  17. FORD         3300.00    300.00       3600  
  18. MILLER       1300.00                 1300  
  19.    
  20. 14 rows selected  
  21.   

(2)NVL2函数处理

NVL2有三个参数,如NVL(expr1,expr2,expr3).第一个为判断是否为NULL的条件,如果第一个参数不是NULL,则返回第二个参数。如果第一个参数是NULL,则返回第三个参数。

 

  1. SQL> select ename,nvl2(comm,sal+comm,sal) from emp;  
  2.    
  3. ENAME      NVL2(COMM,SAL+COMM,SAL)  
  4. ---------- -----------------------  
  5. SMITH                          960  
  6. ALLEN                         1900  
  7. WARD                          1750  
  8. JONES                         3570  
  9. MARTIN                        2650  
  10. BLAKE                         2850  
  11. CLARK                         2450  
  12. SCOTT                         2952  
  13. KING                          5000  
  14. TURNER                        1500  
  15. ADAMS                         1320  
  16. JAMES                          950  
  17. FORD                          3600  
  18. MILLER                        1300  
  19.    
  20. 14 rows selected  

9.连接字符串

  这功能少用,只为显示明白意思罢了。在两个||间添加内容即可。

 

  1. SQL> select ename || 'is a'|| job from emp;  
  2.    
  3. ENAME||'ISA'||JOB  
  4. -----------------------  
  5. SMITHis aCLERK  
  6. ALLENis aSALESMAN  
  7. WARDis aSALESMAN  
  8. JONESis aMANAGER  
  9. MARTINis aSALESMAN  
  10. BLAKEis aMANAGER  
  11. CLARKis aMANAGER  
  12. SCOTTis aANALYST  
  13. KINGis aPRESIDENT  
  14. TURNERis aSALESMAN  
  15. ADAMSis aCLERK  
  16. JAMESis aCLERK  
  17. FORDis aANALYST  
  18. MILLERis aCLERK  
  19.    
  20. 14 rows selected  
  21.   

 

今天这些课程都是最简单的查询。