sql 基本语法

  1. SCOTT>select loc,dname,deptno from dept; 
  2.  
  3. LOC           DNAME              DEPTNO 
  4. ------------- -------------- ---------- 
  5. NEW YORK      ACCOUNTING             10 
  6. DALLAS        RESEARCH               20 
  7. CHICAGO       SALES                  30 
  8. BOSTON        OPERATIONS             40 


#表里没有行和列没有次序,确切的说oracle称为堆表

sql算术表达式 一个常量和一个列名的组成

  1. SCOTT>select ename,job,sal,sal+200,comm from emp; 
  2.  
  3. ENAME      JOB              SAL    SAL+200       COMM 
  4. ---------- --------- ---------- ---------- ---------- 
  5. SMITH      CLERK            800       1000 
  6. ALLEN      SALESMAN        1600       1800        300 
  7. WARD       SALESMAN        1250       1450        500 
  8. JONES      MANAGER         2975       3175 
  9. MARTIN     SALESMAN        1250       1450       1400 
  10. BLAKE      MANAGER         2850       3050 
  11. CLARK      MANAGER         2450       2650 
  12. SCOTT      ANALYST         3000       3200 
  13. KING       PRESIDENT       5000       5200 
  14. TURNER     SALESMAN        1500       1700          0 
  15. ADAMS      CLERK           1100       1300 
  16. JAMES      CLERK            950       1150 
  17. FORD       ANALYST         3000       3200 
  18. MILLER     CLERK           1300       1500 


#销售工资加200
如果是null空值,任何null值进行运算都为null
如:

  1. SCOTT>select ename,job,sal,sal+null,comm from emp; 
  2.  
  3. ENAME      JOB              SAL   SAL+NULL       COMM 
  4. ---------- --------- ---------- ---------- ---------- 
  5. SMITH      CLERK            800 
  6. ALLEN      SALESMAN        1600                   300 
  7. WARD       SALESMAN        1250                   500 
  8. JONES      MANAGER         2975 
  9. MARTIN     SALESMAN        1250                  1400 
  10. BLAKE      MANAGER         2850 
  11. CLARK      MANAGER         2450 
  12. SCOTT      ANALYST         3000 
  13. KING       PRESIDENT       5000 
  14. TURNER     SALESMAN        1500                     0 
  15. ADAMS      CLERK           1100 
  16. JAMES      CLERK            950 
  17. FORD       ANALYST         3000 
  18. MILLER     CLERK           1300 
  19.  
  20. 14 rows selected. 



列的别名
SCOTT>select ename,sal,sal*12 year_sal,comm,deptno from emp; #销售的年薪是多少以别名year_sal

  1. ENAME             SAL   YEAR_SAL       COMM     DEPTNO 
  2. ---------- ---------- ---------- ---------- ---------- 
  3. SMITH             800       9600                    20 
  4. ALLEN            1600      19200        300         30 
  5. WARD             1250      15000        500         30 
  6. JONES            2975      35700                    20 
  7. MARTIN           1250      15000       1400         30 
  8. BLAKE            2850      34200                    30 
  9. CLARK            2450      29400                    10 
  10. SCOTT            3000      36000                    20 
  11. KING             5000      60000                    10 
  12. TURNER           1500      18000          0         30 
  13. ADAMS            1100      13200                    20 
  14. JAMES             950      11400                    30 
  15. FORD             3000      36000                    20 
  16. MILLER           1300      15600                    10 


  1. OTT>select ename,sal,sal*12 as year_sal,comm,deptno from emp; 例子2 
  2.  
  3. ENAME             SAL   YEAR_SAL       COMM     DEPTNO 
  4. ---------- ---------- ---------- ---------- ---------- 
  5. SMITH             800       9600                    20 
  6. ALLEN            1600      19200        300         30 
  7. WARD             1250      15000        500         30 
  8. JONES            2975      35700                    20 
  9. MARTIN           1250      15000       1400         30 
  10. BLAKE            2850      34200                    30 
  11. CLARK            2450      29400                    10 
  12. SCOTT            3000      36000                    20 
  13. KING             5000      60000                    10 
  14. TURNER           1500      18000          0         30 
  15. ADAMS            1100      13200                    20 
  16. JAMES             950      11400                    30 
  17. FORD             3000      36000                    20 
  18. MILLER           1300      15600                    10 
  19.  
  20. 14 rows selected. 



  1. SCOTT>select ename,sal,sal*12 as "year sal",comm,deptno from emp; 例子3 
  2.  
  3. ENAME             SAL   year sal       COMM     DEPTNO 
  4. ---------- ---------- ---------- ---------- ---------- 
  5. SMITH             800       9600                    20 
  6. ALLEN            1600      19200        300         30 
  7. WARD             1250      15000        500         30 
  8. JONES            2975      35700                    20 
  9. MARTIN           1250      15000       1400         30 
  10. BLAKE            2850      34200                    30 
  11. CLARK            2450      29400                    10 
  12. SCOTT            3000      36000                    20 
  13. KING             5000      60000                    10 
  14. TURNER           1500      18000          0         30 
  15. ADAMS            1100      13200                    20 
  16. JAMES             950      11400                    30 
  17. FORD             3000      36000                    20 
  18. MILLER           1300      15600                    10 
  19.  
  20. 14 rows selected. 



列连接

  1. SCOTT>select ename || job from emp; 
  2.  
  3. ENAME||JOB 
  4. ------------------- 
  5. SMITHCLERK 
  6. ALLENSALESMAN 
  7. WARDSALESMAN 
  8. JONESMANAGER 
  9. MARTINSALESMAN 
  10. BLAKEMANAGER 
  11. CLARKMANAGER 
  12. SCOTTANALYST 
  13. KINGPRESIDENT 
  14. TURNERSALESMAN 
  15. ADAMSCLERK 
  16. JAMESCLERK 
  17. FORDANALYST 
  18. MILLERCLERK 


  1. SCOTT>select ename|| ' is a ' || job from emp; 
  2.  
  3. ENAME||'ISA'||JOB 
  4. ------------------------- 
  5. SMITH is a CLERK 
  6. ALLEN is a SALESMAN 
  7. WARD is a SALESMAN 
  8. JONES is a MANAGER 
  9. MARTIN is a SALESMAN 
  10. BLAKE is a MANAGER 
  11. CLARK is a MANAGER 
  12. SCOTT is a ANALYST 
  13. KING is a PRESIDENT 
  14. TURNER is a SALESMAN 
  15. ADAMS is a CLERK 
  16. JAMES is a CLERK 
  17. FORD is a ANALYST 
  18. MILLER is a CLERK 


取消重复行

  1. SCOTT>select distinct deptno from emp; 
  2.  
  3.     DEPTNO 
  4. ---------- 
  5.         30 
  6.         20 
  7.         10 


取消重复的列

  1. SCOTT>select distinct ename,deptno from emp; 
  2.  
  3. ENAME          DEPTNO 
  4. ---------- ---------- 
  5. SMITH              20 
  6. JONES              20 
  7. FORD               20 
  8. CLARK              10 
  9. SCOTT              20 
  10. TURNER             30 
  11. JAMES              30 
  12. KING               10 
  13. ADAMS              20 
  14. BLAKE              30 
  15. MILLER             10 
  16. ALLEN              30 
  17. WARD               30 
  18. MARTIN             30 


where
用来限制行

  1. SCOTT>select * from emp where deptno=10; 查找emp表中部门号为10的员工 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10 
  6.       7839 KING       PRESIDENT            17-NOV-81       5000                    10 
  7.       7934 MILLER     CLERK           7782 23-JAN-82       1300                    10 



  1. SCOTT>select * from emp where job='SALESMAN'; 查找emp表中所有销售的工资 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 
  6.       7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30 
  7.       7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30 
  8.       7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30 


  1. SCOTT>select * from emp where hiredate='20-feb-81'; 查找入职时间为20-frb-81年的员工 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 


  1. SCOTT>select * from emp where sal+100 > 1500; #销售工资+100做逻辑运算且大于1500的打印出来 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 
  6.       7566 JONES      MANAGER         7839 02-APR-81       2975                    20 
  7.       7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30 
  8.       7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10 
  9.       7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20 
  10.       7839 KING       PRESIDENT            17-NOV-81       5000                    10 
  11.       7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30 
  12.       7902 FORD       ANALYST         7566 03-DEC-81       3000                    20 



逻辑表达式

  1. SCOTT>select * from emp where sal in (1500,5000,1100);(列表查询结果在()里) 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7839 KING       PRESIDENT            17-NOV-81       5000                    10 
  6.       7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30 
  7.       7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20 


  1. SCOTT>select * from emp where deptno=30 and sal > 2000; #emp表中查找部门号为30,且销售工资为2000的员工 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30 


  1. SCOTT>select * from emp where sal between 1000 and 2000; #查找emp表中销售工资在1000到2000之间的员工 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 
  6.       7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30 
  7.       7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30 
  8.       7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30 
  9.       7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20 
  10.       7934 MILLER     CLERK           7782 23-JAN-82       1300                    10 
  11.  
  12. 6 rows selected. 


  1. SCOTT>select * from emp where ename like '%A%'; #查找emp表中名字里面有一个A的员工 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 
  6.       7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30 
  7.       7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30 
  8.       7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30 
  9.       7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10 
  10.       7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20 
  11.       7900 JAMES      CLERK           7698 03-DEC-81        950                    30 
  12.  
  13. 7 rows selected. 


  1. SCOTT>select * from emp where ename like '_A%';#查找emp表中员工名字第二个字母为A的员工 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30 
  6.       7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30 
  7.       7900 JAMES      CLERK           7698 03-DEC-81        950                    30 



  1. SCOTT>select * from emp where ename like '__A%'; #查找emp表中第三个字母为A的员工,第四个,第五个以此类推 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30 
  6.       7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10 
  7.       7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20 





  1. SCOTT> select  * from emp where  (job='SALESMAN' or job='CLERK') and sal >=1300 ; 
  2. #我的理解是查找销售和秘书 并且工资大于1300括号中优先级高 
  3.  
  4.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  5. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  6.       7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 
  7.       7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30 
  8.       7934 MILLER     CLERK           7782 23-JAN-82       1300                    10 


  1. SCOTT> select  * from emp where  job='SALESMAN' or job='CLERK' and sal >=1300 ; 
  2. 优先级一样,所有销售,秘书,工资大于1300的都打印出来! 
  3.  
  4.  
  5.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  6. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  7.       7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 
  8.       7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30 
  9.       7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30 
  10.       7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30 
  11.       7934 MILLER     CLERK           7782 23-JAN-82       1300                    10 



  1. SCOTT>select * from emp order by sal; #销售工资排序oracle默认是从小到达排序 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7369 SMITH      CLERK           7902 17-DEC-80        800                    20 
  6.       7900 JAMES      CLERK           7698 03-DEC-81        950                    30 
  7.       7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20 
  8.       7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30 
  9.       7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30 
  10.       7934 MILLER     CLERK           7782 23-JAN-82       1300                    10 
  11.       7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30 
  12.       7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 
  13.       7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10 
  14.       7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30 
  15.       7566 JONES      MANAGER         7839 02-APR-81       2975                    20 
  16.       7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20 
  17.       7902 FORD       ANALYST         7566 03-DEC-81       3000                    20 
  18.       7839 KING       PRESIDENT            17-NOV-81       5000                    10 
  19.  
  20. 14 rows selected. 


  1. SCOTT>select * from emp order by sal desc;#销售工资排序 desc 指定从大到小排序 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7839 KING       PRESIDENT            17-NOV-81       5000                    10 
  6.       7902 FORD       ANALYST         7566 03-DEC-81       3000                    20 
  7.       7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20 
  8.       7566 JONES      MANAGER         7839 02-APR-81       2975                    20 
  9.       7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30 
  10.       7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10 
  11.       7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 
  12.       7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30 
  13.       7934 MILLER     CLERK           7782 23-JAN-82       1300                    10 
  14.       7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30 
  15.       7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30 
  16.       7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20 
  17.       7900 JAMES      CLERK           7698 03-DEC-81        950                    30 
  18.       7369 SMITH      CLERK           7902 17-DEC-80        800                    20 
  1. SCOTT>select * from emp order by sal asc; 取消空值 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7369 SMITH      CLERK           7902 17-DEC-80        800                    20 
  6.       7900 JAMES      CLERK           7698 03-DEC-81        950                    30 
  7.       7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20 
  8.       7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30 
  9.       7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30 
  10.       7934 MILLER     CLERK           7782 23-JAN-82       1300                    10 
  11.       7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30 
  12.       7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 
  13.       7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10 
  14.       7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30 
  15.       7566 JONES      MANAGER         7839 02-APR-81       2975                    20 
  16.       7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20 
  17.       7902 FORD       ANALYST         7566 03-DEC-81       3000                    20 
  18.       7839 KING       PRESIDENT            17-NOV-81       5000                    10 


  1. 注意order后面可以接别名 
  2. SCOTT>select * from emp where deptno=30  order by 2; 
  3.  
  4.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  5. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  6.       7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 
  7.       7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30 
  8.       7900 JAMES      CLERK           7698 03-DEC-81        950                    30 
  9.       7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30 
  10.       7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30 
  11.       7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30 
  12.  
  13. 6 rows selected. 



  1. SCOTT>select * from emp where deptno=30  order by 3; #从第二列开始排序 
  2.  
  3.      EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO 
  4. ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
  5.       7900 JAMES      CLERK           7698 03-DEC-81        950                    30 
  6.       7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30 
  7.       7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30 
  8.       7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30 
  9.       7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 
  10.       7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30 
  11.