Oracle中where子句详细用法

Oracle WHERE子句简介

WHERE子句指定SELECT语句返回符合搜索条件的行记录。下面说明了WHERE子句的语法:

SELECT
    column_1,
    column_2,
    ...
FROM
    table_name
WHERE
    search_condition
ORDER BY
    column_1,
    column_2;

WHERE子句出现在FROM子句之后但在ORDER BY子句之前。在WHERE关键字之后是search_condition - 它定义了返回行记录必须满足的条件。

除了SELECT语句之外,还可以使用DELETE或UPDATE语句中的WHERE子句来指定要更新或删除的行记录。

通过使用简单的相等运算符来查询行记录

以下示例仅返回名称为“Kingston”的产品:

SELECT
    product_name,
    description,
    list_price,
    category_id
FROM
    products
WHERE
    product_name = 'Kingston';

执行上面示例中的查询语句,得到以下结果:

Oracle中where子句详细用法

在这个例子中,Oracle按以下顺序评估子句:FROM WHERE和SELECT

  • 首先,FROM子句指定查询数据的表。
  • 其次,WHERE子句基于条件(例如product_name ='Kingston'过滤行记录)。
  • 第三,SELECT子句选择了应该返回的列。

2. 使用比较运算符选择行记录

除了等于(=)运算符之外,Oracle还提供了下表中所示的许多其他比较运算符:

编号 运算符 描述
1 = 等于
2 !=,<> 不等于
3 > 大于
4 < 小于
5 >= 大于或等于
6 <= 小于或等于
7 IN 等于值列表中的任何值
8 ANY/SOME/ALL 将值与列表或子查询进行比较。它必须以另一个运算符(例如:=><)作为前缀。
9 NOT IN 不等于值列表中的任何值
10 [NOT] BETWEEN n AND m 相当于[Not] >= n 且 <= y
11 [NOT] EXISTS 如果子查询返回至少一行,则返回true
12 IS [NOT] NULL 测试NULL的值

where语句的查询

--where子句
--查询部门编号是10的所有的员工
select * from emp where deptno = 10;

--查询部门中工资是3000的员工
select * from emp where sal = 3000;

--找到部门中编号是 7788的员工
select * from emp where empno = 7788;

--查询姓名为SCOTT的员工所有信息
--在使用where 查询条件,字符串是单引号而且区分大小写
select * from emp WHERE ename = 'SCOTT';

--查询所有在日期是1981年5月1日入职的员工信息
--select * from emp where hiredate = '1981-5-1';
--日期默认格式是   DD-MON-YYYY  查询条件按照日期来,日期也要加单引号
select * from emp where hiredate = '1/5月/1981';

--查询工资大于3000的员工
select * from emp where sal>=3000; ---注意:sal=>3000 是错误的!数据库将不认识此符号!

--查询工资范围在1500-3000的员工所有信息
select * from emp where sal>=1500 and sal<=3000;
-- between..and...表示介于 两个值之间,包涵边界值
select * from emp where sal between 1500 and 3000;

--查询姓名是KING和SCOTT的详细信息
select * from emp where ename = 'KING' or ename ='SCOTT';
--IN 表示出现在集合中的记录 
select * from emp where ename in ('KING','SCOTT');

--查询工资不等于3000的员工信息
select * from emp where sal <> 3000;    --method1
select * from emp where sal !=3000;    --method2
select * from emp where not sal = 3000;    --method3 取反运算

--查询所有没有提成的员工的信息
-- is null 表示某个字段为空   不为空 is not null
select * from emp where comm is not null;
-- 取反的意思 where not comm is null
select * from emp where not comm is null;
-- not 也可以代表取反的意思
select * from emp where  ename not in ('KING','SCOTT');

--查询所有姓名以s开头的员工信息
-- 使用 like 和 通配符
-- 两个通配符  %代表0个或者多个字符  _一个字符
select * from emp where ename like '%S';    ---字符(或是' ')里面严格区分大小写。建议全部大写书写语句!
--查询名字中带有0的
select * from emp where ename like '%O%';

--查询第二个字母是L的员工的所有信息
select * from emp where ename like '_L%';

--查询员工姓名中带有_的所有的信息
--ESCAPE ‘’ 相当于自己定义一个转义符
select * from emp where ename like '%a_%' ESCAPE 'a';

选择复合条件的行

要组合条件,可以使用AND,OR和NOT逻辑运算符。

例如,要获取属于类别编号是4且标价大于500的所有主板,请使用以下语句:

SELECT
    product_name,
    list_price
FROM
    products
WHERE
    list_price > 500
    AND category_id = 4;

选择在两个值之间的值的行记录

要查找具有两个值之间的值的行,请在WHERE子句中使用BETWEEN运算符。

例如,要获取标价在650到680之间(650 <= list_price <= 680)的产品,请使用以下语句:

SELECT
    product_name,
    list_price
FROM
    products
WHERE
    list_price BETWEEN 650 AND 680
ORDER BY
    list_price;

        注:此处的 between 字句是包含边界值,上述语句还有同意写法,以下表达式是等效的:

SELECT
    product_name,
    list_price
FROM
    products
WHERE
    list_price >= 650 AND list_price <= 680
ORDER BY
    list_price;

 

注意:在组合查询中on字句与where字句具有一定区别区别如下

1.在内连接即inner join中没有区别,

2.在使用left jion时,on和where条件的区别如下:
1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left
join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

假设有两张表:

表1

Oracle中where子句详细用法

 

 表2:

Oracle中where子句详细用法

select * from AAAA left join AAAAB on  AAAAB.ST_SIZE=AAAA.ST_SIZE

Oracle中where子句详细用法

 

select * from AAAA left join AAAAB on( AAAAB.ST_SIZE=AAAA.ST_SIZE and AAAAB.ST_NAME='111' )

Oracle中where子句详细用法

 

 

select * from AAAA left join AAAAB on(AAAAB.ST_SIZE=AAAA.ST_SIZE) where AAAAB.ST_NAME='111'

Oracle中where子句详细用法