mysql中in的用法详解

mysql中in的用法详解

一、基础用法
mysql中in常用于where表达式中,其作用是查询某个范围内的数据。

select * from where field in (value1,value2,value3,)

当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择

select * from where field not in (value1,value2,value3,)

二、IN 子查询
更多情况下,IN 列表项的值是不明确的,而可能是通过一个子查询得到的:

SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0)

在这个 SQL 例子里,我们实现了查出所有状态为 0 的用户(可能是被禁止)的所有文章。首先通过一个查询得到所有所有 status=0 的用户:

SELECT uid FROM user WHERE status=0

然后将查询结果作为 IN 的列表项以实现最终的查询结果,注意在子查询中返回的结果必须是一个字段列表项。

在in的子查询中常常会遇到查询效率太低问题,解决方法如下:

1、仍使用in子查询,多查询一次

SELECT * FROM basic_zdjbxx WHERE suiji IN ( SELECT zdcode FROM ( SELECT zdcode FROM basic_h WHERE zdcode != "" ) AS h )

2、使用LEFT JOIN

SELECT zd.* FROM ( SELECT DISTINCT zdcode FROM basic_h WHERE zdcode != "" ) AS h LEFT JOIN basic_zdjbxx zd ON zd.suiji = h.zdcode

三、IN 运算符补充说明

IN 列表项不仅支持数字,也支持字符甚至时间日期类型等,并且可以将这些不同类型的数据项混合排列而无须跟 column 的类型保持一致:

SELECT * FROM user WHERE uid IN(1,2,'3','c')

一个 IN 只能对一个字段进行范围比对,如果要指定更多字段,可以使用 AND 或 OR 逻辑运算符:

  SELECT * FROM user WHERE uid IN(1,2) OR username IN('admin','manong')

使用 AND 或 OR 逻辑运算符后,IN 还可以和其他如 LIKE、>=、= 等运算符一起使用。

四、关于 IN 运算符的效率问题

如果 IN 的列表项是确定的,那么可以用多个 OR 来代替:

SELECT * FROM user WHERE uid IN (2,3,5)

等效为:

SELECT * FROM user WHERE (uid=2 OR aid=3 OR aid=5)

一般认为:
1、如果是对索引字段进行操作,使用 OR 效率高于 IN,但对于列表项不确定的时候(如需要子查询得到结果),就必须使用 IN 运算符。另外,对于子查询表数据小于主查询的时候,也是适用 IN 运算符的。

2、in或or在字段没有添加索引的情况下,所连接的字段越多(1 or 2 or 3 or 4 or…),or比in的查询效率低很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

keyProperty=“id“ 和useGeneratedKeys=“true“作用

keyProperty“id“ 和useGeneratedKeys“true“作用 使用 mysql 自增长序列&#xff0c;新插入一条数据时&#xff0c;怎么得到主键&#xff1f; 加入以下属性即可&#xff1a; useGeneratedKeys“true” keyProperty“id” <insert id"insertSelective" para…

mvn install:install-file将本地一个中央仓库没有的jar包,推到本地仓库----所有依赖不上仓库不能用

mvn install:install-file将本地一个中央仓库没有的jar包&#xff0c;推到本地仓库----所有依赖不上仓库不能用! 前提&#xff1a;maven等环境配置Ok 目标&#xff1a;把中央仓库没有的&#xff0c;部门内部 自研开发的jar&#xff0c;推到私服或者本地服务器&#xff0c;给相…

ZooKeeper 的工作流程

ZooKeeper 集群中的角色简介&#xff1a; Leader&#xff1a; 负责发起投票和决议&#xff0c;更新系统状态Follower&#xff1a;用于接收客户端请求并向客户端返回结果&#xff0c;在选主过程中参与投票Observer&#xff1a; 可以接收客户端连接&#xff0c;将写请求转发给 L…

TikTok真题第4天 | 1366. 通过投票对团队排名、1029.两地调度、562.矩阵中最长的连续1线段

1366. 通过投票对团队排名 题目链接&#xff1a;rank-teams-by-votes/ 解法&#xff1a; 这道题就是统计每个队伍在每个排名的投票数&#xff0c;队伍为A、B、C&#xff0c;则排名有1、2、3&#xff0c;按照投票数进行降序排列。如果有队伍在每个排名的投票数都一样&#xf…

idea Maven图标的使用

idea Maven图标的使用

动态规划算法之数塔问题

package cn.gldwolf.bigdata;/* 3 12 56 23 4 78 34 69 34 19 12 3 54 12 34 *//* 思路&#xff1a;从最底层往上走&#xff0c;判断下层两个节点中的最大值&#xff0c; 并将最大值与上层节点中的值相加得到这一步的最大值&#xff0c; 将最大值保存到新的数塔中 …

Log4j 配置详解

1. Log4j 简介 Log4j 有三个主要的组件&#xff1a; Loggers&#xff08;记录器&#xff09;&#xff1a;日志类别和级别 Appenders&#xff08;输出源&#xff09;&#xff1a;日志要输出的地方 Layouts&#xff08;布局&#xff09;&#xff1a;日志以何种形式输出 1.1 Log…

Iterator主要有三个方法:hasNext()、next()、remove()详解

Iterator主要有三个方法&#xff1a;hasNext()、next()、remove()详解 一、Iterator的API 关于Iterator主要有三个方法&#xff1a;hasNext()、next()、remove()hasNext:没有指针下移操作&#xff0c;只是判断是否存在下一个元素next&#xff1a;指针下移&#xff0c;返回该指…

Java获取登录用户IP地址

Java获取登录用户IP地址 /*** param * return * throws * description * author wqd* date 2021/9/21 13:45*/public static String getIpAddr(HttpServletRequest request) {String ip request.getHeader("x-forwarded-for");if (ip null || ip.length() 0 || &q…

Kafka Shell 基本操作

1. 启动集群每个节点的进程 nohup kafka-server-start.sh \ /home/hadoop/apps/kafka_2.11-1.1.0/config/server.properties \ 1>~/logs/kafka_std.log \ 2>~/logs/kafka_err.log &2. 创建 Topic 解释说明&#xff1a; –create --> 创建 Topic 的选项 –zookee…

Spark 简介

1. 什么是 Spark 官网&#xff1a;http://spark.apache.org Spark 是一个快速、通用、可扩展的大数据分析引擎。 Spark 是基于内存计算的大数据并行计算框架 1.1 Spark 的特点 快&#xff1a;与 Hadoop 的 MapReduce 相比&#xff0c;Spark 基于内存的运算要快 100 倍以上&a…

Linux环境下安装Mysql5.7

本文记录下我近期在Linux环境下安装Mysql5.7的实践经历。 服务器版本Mysql版本Centos 7.65.7.32 1. 下载Mysql 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 进入页面后选择你需要的版本进行下载&#xff0c;这里提供了2种格式&#xff1a;tar.gz和…

Redis 入门及实战

目录 1. Redis 基本概念 2. Redis 的优势 3. Redis 适用场景 4. Redis-3.2.6 安装(未整理)与测试 5. 使用 Redis 的 Java API 客户端——Jedis 6. 数据结构 6.1 String -- 字符串 6.1.1 String 使用概述 6.1.2 String 常用操作 6.1.3 String 使用案例 6.2 List -- 列…

HBase 简介

HBase 是一个通过大量廉价机器解决海量数据的调整存储和读取的分布式数据库解决方案 HBase 的特点&#xff1a; 高并发&#xff0c;易扩展&#xff0c;解决海量数据集的随机实时增删改查HBase 本质依然是 Key-Value 数据库&#xff0c;不支持 join 等复杂操作不支持复杂的事务…

Flink官网自学笔记

1. What is Apache Flink? Apache Flink 是一款用来进行分布式流数据和批数据处理的开源平台。Apache Flink 是一个对有界数据流和无界数据流进行有状态计算的框架和分布式处理引擎。Flink 被设计用于在所有常见的集群环境中运行&#xff0c;以内存中的速度和任意规模进行计算…

HBase Java API 代码开发

1. API 介绍 几个主要 HBase API 类和数据模型之间的对应关系&#xff1a; Java 类 HBase 数据模型 Admin 数据库&#xff08;Database&#xff09; HBaseConfiguration Table 表&#xff08;Table&#xff09; HTableDescriptor 列簇&#xff08;Column Family&#…

HBase 原理

1. HBase 底层原理 1.1 系统架构 1.1.1 Client 职责 1. HBase 有两张特殊的表&#xff1a; .META.: 记录了用户所有表拆分出来的 Region 映射信息&#xff0c;.META. 可以有多个 Region -ROOT-(新版中已去掉这一层): 记录了 .META. 表的 Region 信息&#xff0c;-ROOT- 只有…

用IDEA debug按键功能

用IDEA debug按键功能 一、断点 断点键&#xff0c;是用户在所选行代码处标记的功能点&#xff0c;表示在debug时代码执行到此处暂停。 注&#xff1a;断点可设置多个 二、启动debug 在设置好断点后单击此功能键&#xff0c;启动debug功能。 三、中止任务 点击该功能键&a…

HBase 的表设计

1 ColumnFamily 设计 追求的原则是&#xff1a;在合理的范围内能尽量少的减少列簇就尽量减少列簇。 最优设计是&#xff1a;将所有相关性很强的 Key-Value 都放在同一个列簇下&#xff0c;这样既能做到查询效率最高&#xff0c;也能保持尽可能少的访问不同的磁盘文件。 以用…

shiro原理及其运行流程介绍

什么是shiro shiro是apache的一个开源框架&#xff0c;是一个权限管理的框架&#xff0c;实现 用户认证、用户授权。 spring中有spring security (原名Acegi)&#xff0c;是一个权限框架&#xff0c;它和spring依赖过于紧密&#xff0c;没有shiro使用简单。 shiro不依赖于sp…