WHERE字句

structured query language(非过程性的结构查询语言)

主要内容:
数据库怎么限制里面的数据;
数据库怎么排列里面的数据。
WHERE子句:

--WHERE字句起到的是对数据库查询结果集的限制做用
----[WHERE condition(s)]
------[]表明可选,意思是WHERE字句是能够没有的
------(s)也就是说条件是能够多个的

----WHERE条件的三个要素
------列名
------比较条件
--------不等于的三种形式!=、<>、^=

SQL > select count( *) from emp;

  COUNT( *)
----------
        14

SQL > select count( *) from emp where empno^ = 7788;

  COUNT( *)
----------
        13

------between and 是有边界的,意思是包括边界值的

------常数、值列表
--------常数的特征一、字符串和日期必须用引号括起来;二、字符串是大小写敏感

------like走索引的问题:like '%XX'是不走索引的,基于索引的原理
SQL > select * from emp where empno = '7788';

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7788 SCOTT      ANALYST         7566 09 - 2- 82           3000                     20


执行计划
----------------------------------------------------------
Plan hash value: 4024650034

--------------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |     1 |     38 |     1   ( 0)| 00:00: 01 |
|   1 |   TABLE ACCESS BY INDEX ROWID| EMP    |     1 |     38 |     1   ( 0)| 00:00: 01 |
| *   2 |   INDEX UNIQUE SCAN         | EMP_PK |     1 |       |     0   ( 0)| 00:00: 01 |
--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

    2 - access( "EMPNO" = 7788)


统计信息
----------------------------------------------------------
          0   recursive calls
          0  db block gets
          2  consistent gets
          0  physical reads
          0  redo size
        772  bytes sent via SQL *Net to client
        405  bytes received via SQL *Net from client
          1   SQL *Net roundtrips to / from client
          0  sorts (memory)
          0  sorts (disk)
          1   rows processed
有索引,且走索引
SQL > select * from emp where empno like '%88';

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7788 SCOTT      ANALYST         7566 09 - 2- 82           3000                     20


执行计划
----------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     38 |     3   ( 0)| 00:00: 01 |
| *   1 |   TABLE ACCESS FULL| EMP  |     1 |     38 |     3   ( 0)| 00:00: 01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

    1 - filter(TO_CHAR( "EMPNO") LIKE '%88')


统计信息
----------------------------------------------------------
          0   recursive calls
          0  db block gets
          8  consistent gets
          0  physical reads
          0  redo size
        864  bytes sent via SQL *Net to client
        416  bytes received via SQL *Net from client
          2   SQL *Net roundtrips to / from client
          0  sorts (memory)
          0  sorts (disk)
          1   rows processed
不能走索引,走全表扫描

--------except 逃避符 通常用来处理 字符串里面的特点字符 例如 '\'
------null的特征之一就是不能用比较等于或者不等于
SQL > select * from emp where comm ! = null;

未选定行

SQL > select * from emp where comm = null;

未选定行
--逻辑运算
----AND
AND TRUE FALSE NULL
TRUE TRUE FALSE NULL
FALSE FALSE FALSE FALSE
NULL NULL FALSE NULL
----OR
OR TRUE FALSE NULL
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE NULL
NULL TRUE NULL NULL
----NLS_UPPER:转换成大写,不一样语言都有用
----UPPER:不能处理特殊语言
--IN的查询转换问题:




相关文章
相关标签/搜索