oracle学习笔记之二限制和排列数据

来源:互联网 发布:demo制作软件 编辑:程序博客网 时间:2024/04/28 04:33

1.限定被选择的数据行

 

SELECT *|{[DISTINCT] column [alias], ...}
FROM   table
WHERE condition(s)];

 

例:
SELECT ename,job,deptno
FROM   emp
WHERE  job='CLERK';

结果:
       ENAME   JOB    DEPTNO 
       SMITH   CLERK    20 
       ADAMS   CLERK    20 
       JAMES   CLERK    30 
       MILLER  CLERK    10 

 

注:

字符串和日期型数值都要用单引号引起来
字符型数值是区分大小写的
日期型数值是区分日期表达形式的
默认的日期形式是DD-MON-RR

 

2.比较操作符


  =                  等于
  >                  大于
  >=                 大于等于
  <                  小于
  <=                 小于等于
  <>或!=             不等于


  BETWEEN...AND...   两个值之间(包含) 
  IN(list)           和多个值中任何一个匹配
  LIKE               字形匹配
  IS NULL            是空值

 

1)使用比较操作符:

 

例1:

SELECT ename,sal,comm
FROM   emp
WHERE  sal<=comm;
结果:
       ENAME    SAL     COMM 
       MARTIN   1250    1400 

 

例2:

SELECT ename,sal,hiredate
FROM   emp
WHERE  hiredate>'10-9月-07'
AND    sal>1000;

 

2)使用BETWEEN运算符

 

例:

SELECT  ename,sal
FROM    emp
WHERE   sal BETWEEN 1000 AND 1500;
结果:
       ENAME     SAL 
       WARD     1250 
       MARTIN   1250 
       TURNER   1500 
       ADAMS    1100 
       MILLER   1300 

       ...

 

3)使用IN运算符

 

例:

SELECT  empno,ename,sal,mgr
FROM    emp
WHERE   mgr IN (7902,7566,7788);
结果:
       EMPNO   ENAME    SAL    MGR 
       7369    SMITH    2000   7902 
       7788    SCOTT    3000   7566 
       7876    ADAMS    1100   7788 
       7902    FORD     3000   7566 

        ...

 

4)使用LIKE运算符:

 

例1:

SELECT  ename,sal
FROM    emp
WHERE   ename LIKE 'S%';
结果:
       ENAME   SAL 
       SMITH   2000 
       SCOTT   3000 

       ...

 

例2:

SELECT  ename,sal
FROM    emp
WHERE   ename LIKE '_A%';
结果:
        ENAME    SAL 
        WARD     1250 
        MARTIN   1250 
        JAMES    950 

        ...

注:

“%”表示零个或任意更多的字符

“_”表示一个字符 

可以使用ESCAPE标识符实现对“%”和“_”的查找
  
例3:

SELECT ename
FROM   emp
WHERE  ename LIKE '%A/_B%' ESCAPE '/';

 

5)使用空值运算符
   
例7:

SELECT ename,mgr
FROM   emp
WHERE  mgr IS NULL;
结果:
       ENAME    MGR 
       KING 

 

3.逻辑运算符
 
  AND         如果两部分条件都为真则返回真值
  OR          两部分条件中的任何一个为真则返回真值
  NOT         如果条件为假则返回真值  
  
例1:

SELECT empno,ename,job,sal
FROM   emp
WHERE  sal>=1100
AND    job='CLERK';

例2:

SELECT empno,ename,job,sal
FROM   emp
WHERE  sal>=1100
OR     job='CLERK';

例3:

SELECT ename,job
FROM   emp
WHERE  job NOT IN('CLERK','MANAGER','ANALYST');

 

4.运算符优先级
  计算顺序            运算符
     1                所有比较运算符
     2                NOT
     3                AND
     4                OR


注:使用括号可以改变运算符的优先级

   
例1:

SELECT empno,ename,job,sal
FROM   emp
WHERE  job='SALESMAN'
OR     job='PRESIDENT'
AND    sal>1500;

  //先运算AND再运算OR 
 
例2:

SELECT empno,ename,job,sal
FROM   emp
WHERE  (job='SALESMAN'
OR     job='PRESIDENT')
AND    sal>1500;
  //使用了括号,先运算OR再运算AND

 

5.排序
  使用ORDER BY子句对行排序
    -ASC:升序,默认值
    -DESC:降序
  ORDER BY子句出现在SELECT语句的最后
 
例1:

SELECT ename,job,deptno,hiredate
FROM   emp
ORDER BY hiredate;

例2:

SELECT ename,job,deptno,hiredate
FROM   emp
ORDER BY hiredate DESC;

 

例3:

SELECT empno,ename,sal*12 annsal
FROM   emp
ORDER BY annsal;

 

6.多列参与排序


  ORDER BY列表的顺序就是数据排列的顺序
  可以用没有在SELECT列表中出现的列进行排序

 

例:

SELECT ename,deptno,sal
FROM   emp
ORDER BY deptno,sal DESC;


  
练习
1.查询emp表,显示薪水大于2000,且工作类别是MANAGER的雇员信息

 

SELECT * 
FROM   emp
WHERE  sal>2000
AND    job='MANAGER';

 

2.查询emp表,显示年薪大于30000,工作类别不是MANAGER的雇员信息
   
SELECT * 
FROM   emp
WHERE  sal*12 >30000 
AND    job NOT LIKE 'M%';

 

3.查询emp表, 显示薪水在1500到3000之间,工作类别以“M”开头的雇员信息

 

SELECT * 
FROM   emp
WHERE  sal BETWEEN 1500 AND 3000
AND    job LIKE 'M%';
    
4.查询emp表,显示佣金为空并且部门号为20或30的雇员信息
  
SELECT * 
FROM   emp
WHERE  deptno IN (20,30)
AND    comm IS NULL;
 
  或者:
SELECT * 

FROM   emp
WHERE  (deptno=20
OR      deptno=30)
AND    comm IS NULL;
    

5.查询emp表,显示佣金不为空或者部门号为20的雇员信息,要求按照薪水降序排列
  
SELECT   * 
FROM     emp
WHERE    deptno=20
OR       comm IS NOT NULL
ORDER BY sal desc;

 

6.查询emp表,显示年薪大于30000工作类别不是MANAGER,且部门号不是10或40的雇员信息,要求按照雇员姓名进行排列
  
SELECT   * 
FROM     emp
WHERE    sal*12 >30000 
AND      job NOT LIKE 'MANAGER'
AND      deptno NOT IN(10,40)
ORDER BY ename;