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的查询转换问题: