Oracle的基本查询

SQL> --清屏
SQL> host cls

SQL> --当前用户
SQL> show user
USER  "SCOTT"
SQL> --当前用户下的表
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID                               
------------------------------ ------- ----------                               
BONUS                          TABLE                                            
DEPT                           TABLE                                            
EMP                            TABLE                                            
SALGRADE                       TABLE                                            

SQL> --tab:表示用户字典(也可以称谓表)
SQL> --显示表结构
SQL> desc emp;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)

SQL> --查询员工的所有信息
SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM 
---------- ---------- --------- ---------- -------------- ---------- ---------- 
    DEPTNO                                                                      
----------                                                                      
      7369 SMITH      CLERK           7902 17-12月-80            800            
        20                                                                      

      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300 
        30                                                                      

      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500 
        30                                                                      


     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM 
---------- ---------- --------- ---------- -------------- ---------- ---------- 
    DEPTNO                                                                      
----------                                                                      
      7566 JONES      MANAGER         7839 02-4月 -81           2975            
        20                                                                      

      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400 
        30                                                                      

      7698 BLAKE      MANAGER         7839 01-5月 -81           2850            
        30                                                                      


     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM 
---------- ---------- --------- ---------- -------------- ---------- ---------- 
    DEPTNO                                                                      
----------                                                                      
      7782 CLARK      MANAGER         7839 09-6月 -81           2450            
        10                                                                      

      7788 SCOTT      ANALYST         7566 19-4月 -87           3000            
        20                                                                      

      7839 KING       PRESIDENT            17-11月-81           5000            
        10                                                                      


     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM 
---------- ---------- --------- ---------- -------------- ---------- ---------- 
    DEPTNO                                                                      
----------                                                                      
      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0 
        30                                                                      

      7876 ADAMS      CLERK           7788 23-5月 -87           1100            
        20                                                                      

      7900 JAMES      CLERK           7698 03-12月-81            950            
        30                                                                      


     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM 
---------- ---------- --------- ---------- -------------- ---------- ---------- 
    DEPTNO                                                                      
----------                                                                      
      7902 FORD       ANALYST         7566 03-12月-81           3000            
        20                                                                      

      7934 MILLER     CLERK           7782 23-1月 -82           1300            
        10                                                                      


已选择14行。

SQL> --设置行宽
SQL> set linesize 120
SQL> --设置列宽
SQL> col ename format a8
SQL> col sal 9999
SP2-0158: 未知的 COLUMN 选项 "9999"
SQL> col sal format 9999
SQL> /

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                     
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                     
      7369 SMITH    CLERK           7902 17-12月-80       800                    20                                     
      7499 ALLEN    SALESMAN        7698 20-2月 -81      1600        300         30                                     
      7521 WARD     SALESMAN        7698 22-2月 -81      1250        500         30                                     
      7566 JONES    MANAGER         7839 02-4月 -81      2975                    20                                     
      7654 MARTIN   SALESMAN        7698 28-9月 -81      1250       1400         30                                     
      7698 BLAKE    MANAGER         7839 01-5月 -81      2850                    30                                     
      7782 CLARK    MANAGER         7839 09-6月 -81      2450                    10                                     
      7788 SCOTT    ANALYST         7566 19-4月 -87      3000                    20                                     
      7839 KING     PRESIDENT            17-11月-81      5000                    10                                     
      7844 TURNER   SALESMAN        7698 08-9月 -81      1500          0         30                                     
      7876 ADAMS    CLERK           7788 23-5月 -87      1100                    20                                     

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                     
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                     
      7900 JAMES    CLERK           7698 03-12月-81       950                    30                                     
      7902 FORD     ANALYST         7566 03-12月-81      3000                    20                                     
      7934 MILLER   CLERK           7782 23-1月 -82      1300                    10                                     

已选择14行。

SQL> set linesize 150;
SQL> select * from emp;

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      7369 SMITH    CLERK           7902 17-12月-80       800                    20                                                                   
      7499 ALLEN    SALESMAN        7698 20-2月 -81      1600        300         30                                                                   
      7521 WARD     SALESMAN        7698 22-2月 -81      1250        500         30                                                                   
      7566 JONES    MANAGER         7839 02-4月 -81      2975                    20                                                                   
      7654 MARTIN   SALESMAN        7698 28-9月 -81      1250       1400         30                                                                   
      7698 BLAKE    MANAGER         7839 01-5月 -81      2850                    30                                                                   
      7782 CLARK    MANAGER         7839 09-6月 -81      2450                    10                                                                   
      7788 SCOTT    ANALYST         7566 19-4月 -87      3000                    20                                                                   
      7839 KING     PRESIDENT            17-11月-81      5000                    10                                                                   
      7844 TURNER   SALESMAN        7698 08-9月 -81      1500          0         30                                                                   
      7876 ADAMS    CLERK           7788 23-5月 -87      1100                    20                                                                   

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      7900 JAMES    CLERK           7698 03-12月-81       950                    30                                                                   
      7902 FORD     ANALYST         7566 03-12月-81      3000                    20                                                                   
      7934 MILLER   CLERK           7782 23-1月 -82      1300                    10                                                                   

已选择14行。

SQL> --通过列名查找
SQL> select empno,ename,job,mgr,hibernate,sal,comm,deptno
  2  from emp;
select empno,ename,job,mgr,hibernate,sal,comm,deptno
                           *
 1 行出现错误: 
ORA-00904: "HIBERNATE": 标识符无效 


SQL> select empno,ename,job,mgr,hiredate,sal,comm,deptno
  2  from emp;

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      7369 SMITH    CLERK           7902 17-12月-80       800                    20                                                                   
      7499 ALLEN    SALESMAN        7698 20-2月 -81      1600        300         30                                                                   
      7521 WARD     SALESMAN        7698 22-2月 -81      1250        500         30                                                                   
      7566 JONES    MANAGER         7839 02-4月 -81      2975                    20                                                                   
      7654 MARTIN   SALESMAN        7698 28-9月 -81      1250       1400         30                                                                   
      7698 BLAKE    MANAGER         7839 01-5月 -81      2850                    30                                                                   
      7782 CLARK    MANAGER         7839 09-6月 -81      2450                    10                                                                   
      7788 SCOTT    ANALYST         7566 19-4月 -87      3000                    20                                                                   
      7839 KING     PRESIDENT            17-11月-81      5000                    10                                                                   
      7844 TURNER   SALESMAN        7698 08-9月 -81      1500          0         30                                                                   
      7876 ADAMS    CLERK           7788 23-5月 -87      1100                    20                                                                   

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      7900 JAMES    CLERK           7698 03-12月-81       950                    30                                                                   
      7902 FORD     ANALYST         7566 03-12月-81      3000                    20                                                                   
      7934 MILLER   CLERK           7782 23-1月 -82      1300                    10                                                                   

已选择14行。

SQL> /*
SQL> sql优化
SQL> 1、尽量使用列名来查找(在Oracle9i之前,Oracle读取到*的时候,需要时间来解析需要查找的表所有列,但是在Oracle9i之后,*和列名的查找效率一样)
SQL> */
SQL> --查询员工的编号,姓名,薪水
SQL> select empno,ename,sal
  2  from emp;

     EMPNO ENAME      SAL                                                                                                                             
---------- -------- -----                                                                                                                             
      7369 SMITH      800                                                                                                                             
      7499 ALLEN     1600                                                                                                                             
      7521 WARD      1250                                                                                                                             
      7566 JONES     2975                                                                                                                             
      7654 MARTIN    1250                                                                                                                             
      7698 BLAKE     2850                                                                                                                             
      7782 CLARK     2450                                                                                                                             
      7788 SCOTT     3000                                                                                                                             
      7839 KING      5000                                                                                                                             
      7844 TURNER    1500                                                                                                                             
      7876 ADAMS     1100                                                                                                                             

     EMPNO ENAME      SAL                                                                                                                             
---------- -------- -----                                                                                                                             
      7900 JAMES      950                                                                                                                             
      7902 FORD      3000                                                                                                                             
      7934 MILLER    1300                                                                                                                             

已选择14行。


SQL> --查询员工信息 员工号,姓名,月薪,年薪
SQL> select empno,ename,sal,sal*12
  2  from emp;

     EMPNO ENAME      SAL     SAL*12                                                                                                                  
---------- -------- ----- ----------                                                                                                                  
      7369 SMITH      800       9600                                                                                                                  
      7499 ALLEN     1600      19200                                                                                                                  
      7521 WARD      1250      15000                                                                                                                  
      7566 JONES     2975      35700                                                                                                                  
      7654 MARTIN    1250      15000                                                                                                                  
      7698 BLAKE     2850      34200                                                                                                                  
      7782 CLARK     2450      29400                                                                                                                  
      7788 SCOTT     3000      36000                                                                                                                  
      7839 KING      5000      60000                                                                                                                  
      7844 TURNER    1500      18000                                                                                                                  
      7876 ADAMS     1100      13200                                                                                                                  

     EMPNO ENAME      SAL     SAL*12                                                                                                                  
---------- -------- ----- ----------                                                                                                                  
      7900 JAMES      950      11400                                                                                                                  
      7902 FORD      3000      36000                                                                                                                  
      7934 MILLER    1300      15600                                                                                                                  

已选择14行。

SQL> --查询员工编号,姓名,月薪,年薪,奖金,年收入
SQL> select empno,ename,sal,sal*12,comm,sal*12+comm
  2  from emp;

     EMPNO ENAME      SAL     SAL*12       COMM SAL*12+COMM                                                                                           
---------- -------- ----- ---------- ---------- -----------                                                                                           
      7369 SMITH      800       9600                                                                                                                  
      7499 ALLEN     1600      19200        300       19500                                                                                           
      7521 WARD      1250      15000        500       15500                                                                                           
      7566 JONES     2975      35700                                                                                                                  
      7654 MARTIN    1250      15000       1400       16400                                                                                           
      7698 BLAKE     2850      34200                                                                                                                  
      7782 CLARK     2450      29400                                                                                                                  
      7788 SCOTT     3000      36000                                                                                                                  
      7839 KING      5000      60000                                                                                                                  
      7844 TURNER    1500      18000          0       18000                                                                                           
      7876 ADAMS     1100      13200                                                                                                                  

     EMPNO ENAME      SAL     SAL*12       COMM SAL*12+COMM                                                                                           
---------- -------- ----- ---------- ---------- -----------                                                                                           
      7900 JAMES      950      11400                                                                                                                  
      7902 FORD      3000      36000                                                                                                                  
      7934 MILLER    1300      15600                                                                                                                  

已选择14行。

SQL> /*
SQL> sql语句中的null值
SQL> 1、从上面的结果我们可以看到,奖金为null的值其年收入也为null
SQL> 2、在Oracle中,判断一个属性的值是否为null,不能使用它是否为null作为判断,
SQL>     因为null!=null
SQL> */
SQL> --针对第一个问题,我们引入了滤空函数,在Oracle中一共有两种滤空函数,第一种为nvl(a,b)还有一种在后面接触
SQL> select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0)
  2  from emp;

     EMPNO ENAME      SAL     SAL*12       COMM SAL*12+NVL(COMM,0)                                                                                    
---------- -------- ----- ---------- ---------- ------------------                                                                                    
      7369 SMITH      800       9600                          9600                                                                                    
      7499 ALLEN     1600      19200        300              19500                                                                                    
      7521 WARD      1250      15000        500              15500                                                                                    
      7566 JONES     2975      35700                         35700                                                                                    
      7654 MARTIN    1250      15000       1400              16400                                                                                    
      7698 BLAKE     2850      34200                         34200                                                                                    
      7782 CLARK     2450      29400                         29400                                                                                    
      7788 SCOTT     3000      36000                         36000                                                                                    
      7839 KING      5000      60000                         60000                                                                                    
      7844 TURNER    1500      18000          0              18000                                                                                    
      7876 ADAMS     1100      13200                         13200                                                                                    

     EMPNO ENAME      SAL     SAL*12       COMM SAL*12+NVL(COMM,0)                                                                                    
---------- -------- ----- ---------- ---------- ------------------                                                                                    
      7900 JAMES      950      11400                         11400                                                                                    
      7902 FORD      3000      36000                         36000                                                                                    
      7934 MILLER    1300      15600                         15600                                                                                    

已选择14行。

SQL> /*
SQL> 如上的查询中的年收入的结果是正确的,其中滤空表达式的意思为:
SQL> 如果(a,b)a的值为null时,返回b。
SQL> */
SQL> --我们验证第二个问题:null!=null
SQL> select *
  2  from emp
  3  where comm=null;

未选定行

SQL> --我们判断一个值是否为空不能用等于还是不等于,应该用is/is not
SQL> select *
  2  from emp
  3  where comm is null;

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      7369 SMITH    CLERK           7902 17-12月-80       800                    20                                                                   
      7566 JONES    MANAGER         7839 02-4月 -81      2975                    20                                                                   
      7698 BLAKE    MANAGER         7839 01-5月 -81      2850                    30                                                                   
      7782 CLARK    MANAGER         7839 09-6月 -81      2450                    10                                                                   
      7788 SCOTT    ANALYST         7566 19-4月 -87      3000                    20                                                                   
      7839 KING     PRESIDENT            17-11月-81      5000                    10                                                                   
      7876 ADAMS    CLERK           7788 23-5月 -87      1100                    20                                                                   
      7900 JAMES    CLERK           7698 03-12月-81       950                    30                                                                   
      7902 FORD     ANALYST         7566 03-12月-81      3000                    20                                                                   
      7934 MILLER   CLERK           7782 23-1月 -82      1300                    10                                                                   

已选择10行。

SQL> --在Oracle中,如果我们写错了查询语句应该怎么办?
SQL> select *
  2  form emp;
form emp
*
 2 行出现错误: 
ORA-00923: 未找到要求的 FROM 关键字 


SQL> --就像上面的例子一样,我们写错了,那么我们首先采用麻烦的方法,c命令,即change
SQL> --我们先找到在第几行错了
SQL> 2
  2* form emp
SQL> --输入了2之后,然后再调用c命令,把错误的值写在前面,把正确的值卸载后面
SQL> c /form/from;
  2* from emp
SQL> --然后再一起执行
SQL> /

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      7369 SMITH    CLERK           7902 17-12月-80       800                    20                                                                   
      7499 ALLEN    SALESMAN        7698 20-2月 -81      1600        300         30                                                                   
      7521 WARD     SALESMAN        7698 22-2月 -81      1250        500         30                                                                   
      7566 JONES    MANAGER         7839 02-4月 -81      2975                    20                                                                   
      7654 MARTIN   SALESMAN        7698 28-9月 -81      1250       1400         30                                                                   
      7698 BLAKE    MANAGER         7839 01-5月 -81      2850                    30                                                                   
      7782 CLARK    MANAGER         7839 09-6月 -81      2450                    10                                                                   
      7788 SCOTT    ANALYST         7566 19-4月 -87      3000                    20                                                                   
      7839 KING     PRESIDENT            17-11月-81      5000                    10                                                                   
      7844 TURNER   SALESMAN        7698 08-9月 -81      1500          0         30                                                                   
      7876 ADAMS    CLERK           7788 23-5月 -87      1100                    20                                                                   

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      7900 JAMES    CLERK           7698 03-12月-81       950                    30                                                                   
      7902 FORD     ANALYST         7566 03-12月-81      3000                    20                                                                   
      7934 MILLER   CLERK           7782 23-1月 -82      1300                    10                                                                   

已选择14行。

SQL> select *
  2  form emp;
form emp
*
 2 行出现错误: 
ORA-00923: 未找到要求的 FROM 关键字 


SQL> ed
已写入 file afiedt.buf

  1  select *
  2* from emp
SQL> /

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      7369 SMITH    CLERK           7902 17-12月-80       800                    20                                                                   
      7499 ALLEN    SALESMAN        7698 20-2月 -81      1600        300         30                                                                   
      7521 WARD     SALESMAN        7698 22-2月 -81      1250        500         30                                                                   
      7566 JONES    MANAGER         7839 02-4月 -81      2975                    20                                                                   
      7654 MARTIN   SALESMAN        7698 28-9月 -81      1250       1400         30                                                                   
      7698 BLAKE    MANAGER         7839 01-5月 -81      2850                    30                                                                   
      7782 CLARK    MANAGER         7839 09-6月 -81      2450                    10                                                                   
      7788 SCOTT    ANALYST         7566 19-4月 -87      3000                    20                                                                   
      7839 KING     PRESIDENT            17-11月-81      5000                    10                                                                   
      7844 TURNER   SALESMAN        7698 08-9月 -81      1500          0         30                                                                   
      7876 ADAMS    CLERK           7788 23-5月 -87      1100                    20                                                                   

     EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   
---------- -------- --------- ---------- -------------- ----- ---------- ----------                                                                   
      7900 JAMES    CLERK           7698 03-12月-81       950                    30                                                                   
      7902 FORD     ANALYST         7566 03-12月-81      3000                    20                                                                   
      7934 MILLER   CLERK           7782 23-1月 -82      1300                    10                                                                   

已选择14行。

SQL> --如上是第二种方式,在发现了错误之后,直接输入ed 然后回车
SQL> --然后就直接弹出一个文本对话框,然后我们作完相应的修改之后,
SQL> --把文本关闭,然后返回这个dos窗口,再输入/表示执行以上的命令
SQL> --
SQL> --
SQL> --
SQL> --
SQL> --关于别名的使用:如果我们要给查找相应的列一个别名的话,我们可以
SQL> select empno as "员工编号",ename "姓名",sal 月薪,job 职位
  2  from emp;

  员工编号 姓名             月薪 职位                                                                                                                 
---------- ---------- ---------- ---------                                                                                                            
      7369 SMITH             800 CLERK                                                                                                                
      7499 ALLEN            1600 SALESMAN                                                                                                             
      7521 WARD             1250 SALESMAN                                                                                                             
      7566 JONES            2975 MANAGER                                                                                                              
      7654 MARTIN           1250 SALESMAN                                                                                                             
      7698 BLAKE            2850 MANAGER                                                                                                              
      7782 CLARK            2450 MANAGER                                                                                                              
      7788 SCOTT            3000 ANALYST                                                                                                              
      7839 KING             5000 PRESIDENT                                                                                                            
      7844 TURNER           1500 SALESMAN                                                                                                             
      7876 ADAMS            1100 CLERK                                                                                                                

  员工编号 姓名             月薪 职位                                                                                                                 
---------- ---------- ---------- ---------                                                                                                            
      7900 JAMES             950 CLERK                                                                                                                
      7902 FORD             3000 ANALYST                                                                                                              
      7934 MILLER           1300 CLERK                                                                                                                

已选择14行。

SQL> --如上所示,上面的as "" 跟直接写名字 都可以使用
SQL> --那么上面的带双引号的"员工编号"和"姓名"有没有区别呢?
SQL> --答案是莪米有
SQL> --答案是没有
SQL> --那么上面的不带双引号的月薪跟带双引号的"员工编号"或者"姓名"有没有区别呢?
SQL> --答案是有
SQL> --当我们使用不带双引号的别名的时候,如果里面包含关键字或者空格,那么会报错

SQL> select emono 员工编号,ename员工姓名,sal 月from薪
  2  from emp;
select emono 员工编号,ename员工姓名,sal 月from薪
                      *
 1 行出现错误: 
ORA-00904: "ENAME员工姓名": 标识符无效 


SQL> ed
已写入 file afiedt.buf

  1  select emono 员工编号,ename员工姓名,sal "月from薪"
  2* from emp
SQL> /
select emono 员工编号,ename员工姓名,sal "月from薪"
                      *
 1 行出现错误: 
ORA-00904: "ENAME员工姓名": 标识符无效 


SQL> ed
已写入 file afiedt.buf

  1  select empno 员工编号,ename 员工姓名,sal "月from薪"
  2* from emp
SQL> /

  员工编号 员工姓名     月from薪                                                                                                                      
---------- ---------- ----------                                                                                                                      
      7369 SMITH             800                                                                                                                      
      7499 ALLEN            1600                                                                                                                      
      7521 WARD             1250                                                                                                                      
      7566 JONES            2975                                                                                                                      
      7654 MARTIN           1250                                                                                                                      
      7698 BLAKE            2850                                                                                                                      
      7782 CLARK            2450                                                                                                                      
      7788 SCOTT            3000                                                                                                                      
      7839 KING             5000                                                                                                                      
      7844 TURNER           1500                                                                                                                      
      7876 ADAMS            1100                                                                                                                      

  员工编号 员工姓名     月from薪                                                                                                                      
---------- ---------- ----------                                                                                                                      
      7900 JAMES             950                                                                                                                      
      7902 FORD             3000                                                                                                                      
      7934 MILLER           1300                                                                                                                      

已选择14行。

SQL> --如果遇到有空格的情况
SQL> select empno 员工编号,ename 员工    姓名
  2  from emp;
select empno 员工编号,ename 员工    姓名
                                    *
 1 行出现错误: 
ORA-00923: 未找到要求的 FROM 关键字 


SQL> ed
已写入 file afiedt.buf

  1  select empno 员工编号,ename "员工    姓名"
  2* from emp
SQL> /

  员工编号 员工                                                                                                                                     
---------- ----------                                                                                                                                 
      7369 SMITH                                                                                                                                      
      7499 ALLEN                                                                                                                                      
      7521 WARD                                                                                                                                       
      7566 JONES                                                                                                                                      
      7654 MARTIN                                                                                                                                     
      7698 BLAKE                                                                                                                                      
      7782 CLARK                                                                                                                                      
      7788 SCOTT                                                                                                                                      
      7839 KING                                                                                                                                       
      7844 TURNER                                                                                                                                     
      7876 ADAMS                                                                                                                                      

  员工编号 员工                                                                                                                                     
---------- ----------                                                                                                                                 
      7900 JAMES                                                                                                                                      
      7902 FORD                                                                                                                                       
      7934 MILLER                                                                                                                                     

已选择14行。

SQL> --distinct 去掉重复的数据,比如我们查找部门,肯定有重复的
SQL> select deptno
  2  from emp;

    DEPTNO                                                                                                                                            
----------                                                                                                                                            
        20                                                                                                                                            
        30                                                                                                                                            
        30                                                                                                                                            
        20                                                                                                                                            
        30                                                                                                                                            
        30                                                                                                                                            
        10                                                                                                                                            
        20                                                                                                                                            
        10                                                                                                                                            
        30                                                                                                                                            
        20                                                                                                                                            

    DEPTNO                                                                                                                                            
----------                                                                                                                                            
        30                                                                                                                                            
        20                                                                                                                                            
        10                                                                                                                                            

已选择14行。

SQL> --我们加上distinct关键字
SQL> select distinct deptno
  2  from emp;

    DEPTNO                                                                                                                                            
----------                                                                                                                                            
        30                                                                                                                                            
        20                                                                                                                                            
        10                                                                                                                                            

SQL> --再比如我们查找所有的职位,这里肯定有不同的员工从事相同的职位
SQL> select job
  2  from emp;

JOB                                                                                                                                                   
---------                                                                                                                                             
CLERK                                                                                                                                                 
SALESMAN                                                                                                                                              
SALESMAN                                                                                                                                              
MANAGER                                                                                                                                               
SALESMAN                                                                                                                                              
MANAGER                                                                                                                                               
MANAGER                                                                                                                                               
ANALYST                                                                                                                                               
PRESIDENT                                                                                                                                             
SALESMAN                                                                                                                                              
CLERK                                                                                                                                                 

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

已选择14行。

SQL> select distinct job
  2  from emp;

JOB                                                                                                                                                   
---------                                                                                                                                             
CLERK                                                                                                                                                 
SALESMAN                                                                                                                                              
PRESIDENT                                                                                                                                             
MANAGER                                                                                                                                               
ANALYST                                                                                                                                               

SQL> --当我们部门跟工作一起查询的时候会出现怎样的结果?
SQL> select distinct distinct,job
  2  from emp;
select distinct distinct,job
                *
 1 行出现错误: 
ORA-00936: 缺失表达式 


SQL> ed
已写入 file afiedt.buf

  1  select distinct deptno,job
  2* from emp
SQL> /

    DEPTNO JOB                                                                                                                                        
---------- ---------                                                                                                                                  
        20 CLERK                                                                                                                                      
        30 SALESMAN                                                                                                                                   
        20 MANAGER                                                                                                                                    
        30 CLERK                                                                                                                                      
        10 PRESIDENT                                                                                                                                  
        30 MANAGER                                                                                                                                    
        10 CLERK                                                                                                                                      
        10 MANAGER                                                                                                                                    
        20 ANALYST                                                                                                                                    

已选择9行。

SQL> --从上面的例子我们可以看到,当我们要查询的结果完全一样时才去掉重复
SQL> 
SQL> 
SQL> 
SQL> --
SQL> --
SQL> --空值的定义:空值既不是0也不是空格,空值是未知的,不可预算的值
SQL> 
SQL> --
SQL> --连接符
SQL> select concat('hello',' world') from emp;

CONCAT('HEL                                                                                                                                           
-----------                                                                                                                                           
hello world                                                                                                                                           
hello world                                                                                                                                           
hello world                                                                                                                                           
hello world                                                                                                                                           
hello world                                                                                                                                           
hello world                                                                                                                                           
hello world                                                                                                                                           
hello world                                                                                                                                           
hello world                                                                                                                                           
hello world                                                                                                                                           
hello world                                                                                                                                           

CONCAT('HEL                                                                                                                                           
-----------                                                                                                                                           
hello world                                                                                                                                           
hello world                                                                                                                                           
hello world                                                                                                                                           

已选择14行。

SQL> --concat就相当于Java中的字符串连接的+
SQL> --并且当我们使用了select的时候,就必须要使用from关键字
SQL> --但是我们又不想与其他表产生关系,
SQL> --Oracle为了解决这个问题,推出了dual这张表
SQL> select concat('hello',' world')
  2  from dual;

CONCAT('HEL                                                                                                                                           
-----------                                                                                                                                           
hello world                                                                                                                                           

SQL> --如上,结果只出现了一行数据
SQL> --dual这张表示一张伪表,在数据库中并不能找到,只是为了满足语法而推出的
SQL> --再举一个例子
SQL> seelct 3+5 from dual;
SP2-0734: 未知的命令开头 "seelct 3+5..." - 忽略了剩余的行。
SQL> ed
已写入 file afiedt.buf

  1  select concat('hello',' world')
  2* from dual
SQL> --刚刚的例子作废。。
SQL> select 3+5 from dual;

       3+5                                                                                                                                            
----------                                                                                                                                            
         8                                                                                                                                            

SQL> --在Oracle中concat与||的作用是一样的
SQL> select 'hello'||' world' from dual;

'HELLO'||'W                                                                                                                                           
-----------                                                                                                                                           
hello world                                                                                                                                           

SQL> --比如我们要查询***员工的薪水是***
SQL> select ename||'员工的薪水是'||sal
  2  from emp;

ENAME||'员工的薪水是'||SAL                                                                                                                            
--------------------------------------------------------------                                                                                        
SMITH员工的薪水是800                                                                                                                                  
ALLEN员工的薪水是1600                                                                                                                                 
WARD员工的薪水是1250                                                                                                                                  
JONES员工的薪水是2975                                                                                                                                 
MARTIN员工的薪水是1250                                                                                                                                
BLAKE员工的薪水是2850                                                                                                                                 
CLARK员工的薪水是2450                                                                                                                                 
SCOTT员工的薪水是3000                                                                                                                                 
KING员工的薪水是5000                                                                                                                                  
TURNER员工的薪水是1500                                                                                                                                
ADAMS员工的薪水是1100                                                                                                                                 

ENAME||'员工的薪水是'||SAL                                                                                                                            
--------------------------------------------------------------                                                                                        
JAMES员工的薪水是950                                                                                                                                  
FORD员工的薪水是3000                                                                                                                                  
MILLER员工的薪水是1300                                                                                                                                

已选择14行。

SQL> --在Oracle中字符串可以表示数字,字符,日期
SQL> --但是字符和日期只能用单引号
SQL> --sql与sqlplus的区别
SQL> /*
SQL> 1、sql是一种语言,是一种标准
SQL> 2、sqlplus是一种环境/工具
SQL> 3、sql的关键字不能缩写,但是sqlplus的关键字可以缩写
SQL> 比如:update select delete 是sql语句
SQL> set desc col c是sqlplus语句
SQL> desc=describ
SQL> col=column
SQL> c=change
SQL> */
SQL> spool off
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值