Oracle In子句
Oracle In子句
在本教程中,您将学习如何使用Oracle IN运算符来确定值是否与列表或子查询中的任何值相匹配。
Oracle IN操作符介绍
Oracle IN运算符确定值是否匹配列表或子查询中的任何值。
注:子查询是嵌套在另一个查询中的查询,可通过在子查询教程中了解子查询用法。
确定表达式是否与值列表匹配的Oracle IN运算符的语法如下所示:
expression [NOT] IN (v1,v2,...)
并且表达式的语法与子查询匹配:
expression [NOT] IN (subquery)
参数
在上面语法中,这里将介绍每个参数含义:
- expression - 该表达式(expression)是任何有效的表达式,它可以是要匹配的表的列。
- v1, v2, v3.. -
IN运算符后面是逗号分隔值列表,用于测试匹配。所有值必须与表达式具有相同的数据类型。 - subquery - 子查询返回一列的结果集以测试匹配。该列还必须具有与表达式相同的数据类型。
返回值
如果表达式(expression)的值等于值列表中的任何值或由子查询返回的结果集,则IN运算符返回true。 否则,它返回false。
NOT运算符否定IN运算符的结果。
Oracle IN运算符示例
我们将使用示例数据库中的orders和employees表进行演示:

1. Oracle IN示例
以下语句查找所有销售员ID为54,55和56所负责的订单:
SELECT
order_id,customer_id,status,salesman_id
FROM
orders
WHERE
salesman_id IN (54,55,56)
ORDER BY
order_id;
执行上面查询语句,得到以下结果 -

如上图中所示,查询结果集返回了salesman_id列中值为54,55或56的所有订单。同样,以下示例将检索状态(status)列的值为"Pending"或"Canceled"的销售订单信息:
SELECT
order_id, customer_id, status, salesman_id
FROM
orders
WHERE
status IN('Pending','Canceled')
ORDER BY
order_id;
执行上面查询语句返回状态(status)列的值为"Pending"或"Canceled"的销售订单信息,如下所示 -

2. Oracle NOT IN示例
这个示例演示如何查找状态(status)不是"Pending"或"Canceled"的订单:
SELECT
order_id, customer_id, status, salesman_id
FROM
orders
WHERE
status NOT IN( 'Shipped', 'Canceled')
ORDER BY
order_id;
执行上面查询语句返回状态(status)列的值不是"Pending"或"Canceled"的销售订单信息,如下所示 -

3. Oracle IN子查询示例
以下示例返回负责订单状态为取消(Canceled)的销售员的ID,名字和姓氏,参考以下查询语句 -
SELECT employee_id, first_name, last_name
FROM employees
WHERE
employee_id IN(
SELECT
DISTINCT salesman_id
FROM
orders
WHERE
status = 'Canceled'
)
ORDER BY first_Name;
执行上面查询语句,得到以下结果 -

在这个例子中,子查询首先执行并返回一个销售员ID列表:
SELECT
DISTINCT salesman_id
FROM
orders
WHERE
status = 'Canceled'
执行上面查询语句,得到以下结果 -

这些销售人员id用于外部查询,查找所有员工的ID与销售员ID列表中的任何id相同。
4. Oracle NOT IN子查询示例
请参阅以下customers和orders表的ER图:

以下示例使用NOT IN来查找尚未下过任何订单的客户:
SELECT
customer_id, name
FROM customers
WHERE
customer_id NOT IN(
SELECT
customer_id
FROM
orders
);
执行上面查询语句,得到以下结果 -

5. Oracle IN与OR运算符
以下示例显示如何获得销售员ID为60,61和62的销售订单:
SELECT
customer_id, status, salesman_id
FROM
orders
WHERE
salesman_id IN(60, 61, 62)
ORDER BY
customer_id;
执行上面查询语句,得到以下结果 -

上面语句相当于:
SELECT
customer_id,
status,
salesman_id
FROM
orders
WHERE
salesman_id = 60
OR salesman_id = 61
OR salesman_id = 62
ORDER BY
customer_id;
请注意,表达式:
salesman_id NOT IN (60,61,62);
与以下语句具有相同的效果:
salesman_id = 60
AND salesman_id = 61
AND salesman_id = 62;
在本教程中,您已学习如何使用Oracle IN运算符来查询与值列表或子查询匹配的数据。
Oracle In子句的更多相关文章
- Oracle Like子句
Oracle Like子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,您将学习如何使用Oracle LIKE运算符来测试列中的值是否与指定 ...
- Oracle Between子句
Oracle Between子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,您将学习如何使用Oracle BETWEEN运算符来选择值在一 ...
- Oracle Fetch子句
Oracle Fetch子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,将学习如何使用Oracle FETCH子句来限制查询返回的行数. ...
- Oracle Or子句
Oracle Or子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,我们来学习如何使用Oracle OR运算符来组合两个或更多的布尔表达式. ...
- Oracle And子句
Oracle And子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,将学习如何使用Oracle AND运算符来组合两个或更多的布尔表达式. ...
- Oracle Where子句
Oracle Where子句 作者:初生不惑 Oracle基础 评论:0 条 Oracle技术QQ群:175248146 在本教程中,将学习如何使用Oracle WHERE子句来指定过滤的条件返回符合 ...
- oracle排序子句的特殊写法与ORA-01785错误
刚刚写的SQL语句在执行的时候报[ORA-01785: ORDER BY item must be the number of a SELECT-list expression]错误,于是自己百度了一 ...
- oracle SELECT子句中避免使用 ‘ * ‘
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法. 不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将’*’ 依次转换成所 ...
- oracle WHERE子句中的连接顺序
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. 例如: (低效,执行时间1 ...
随机推荐
- 磁盘管理|df、du|分区 fdisk |格式化
3.磁盘管理 3.1命令df ·用于查看已挂载磁盘的总容量,使用容量,剩余容量等. -i:查看inodes的使用情况 -h:使用合适的单位显示 -k:以KB为单位显示 -m:以MB为单位显示 3.1. ...
- express接受ajax的发送post请求
两种常用的方式: $.ajax({ type: "POST", url: '/everdayPost', // data: JSON.parse({cont:data}),注意: ...
- qt undefined reference to `vtable for subClass'
1. 建立一个console工程 QT -= gui CONFIG += c++ console CONFIG -= app_bundle # The following define makes y ...
- Python链表倒置的两种方法
实现链表的翻转: 思路一: def reverse(self): """ 翻转链表的第一种思路:依次改变结点的指向,将结点指向此结点的上一个结点,并使用pre来指向这个节 ...
- tensorflow学习笔记七----------RNN
和神经网络不同的是,RNN中的数据批次之间是有相互联系的.输入的数据需要是要求序列化的. 1.将数据处理成序列化: 2.将一号数据传入到隐藏层进行处理,在传入到RNN中进行处理,RNN产生两个结果,一 ...
- set(详解)
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...
- Docker Compose 部署 Redis 及原理讲解 | 懒人屋
原文:Docker Compose 部署 Redis 及原理讲解 | 懒人屋 Docker Compose 部署 Redis 及原理讲解 4.4k 字 16 分钟 2019-10-1 ...
- Linux中设置别名alias永久生效
现在有个项目目录位于/var/www/html/tp5下 这也是我经常用到的工作目录 为了避免每次进入此目录 都需要输入 cd /var/www/html/tp5 可以加上述命令加入别名 alias ...
- 简单的物流项目实战,WPF的MVVM设计模式(二)
往Models文件添加一个类,ConnectObject /// <summary> /// 链接数据库字符串 /// </summary ...
- CPM、CPC、CPA、PFP、CPS、CPL、CPR等广告术语是什么意思
CPM.CPC.CPA.PFP.CPS.CPL.CPR等广告术语是什么意思 一个网络媒体(网站)会包含有数十个甚至成千上万个页面,网络广告所投放的位置和价格 就牵涉到特定的页面以及浏览人数的多寡.这好 ...