首页 > 数据库 >Mysql 入门之过滤数据(二)

Mysql 入门之过滤数据(二)

时间:2023-04-12 23:09:08浏览次数:39  
标签:入门 1002 vend 过滤 products Mysql 1003 id SELECT

关键字: and 、or、in、not

知识点

1、and 并列关系,可对多个列进行过滤 2、or 或关系,满足条件之一即可 3、in 指定范围过滤 4、not 否定关系,取反

思考

1、and 和or 若同时存在,哪个优先级最高? 2、in 使用的优势? 3、not 存在的意义是什么?

案列

数据表如下:

SELECT * FROM products img.png

and、or

1、and 和or

SELECT * FROM products WHERE vend_id = 1001 AND prod_price < 10; 

SELECT * FROM products WHERE vend_id = 1002 OR  vend_id = 1003;

结果分别如下:

and :ID为1001且价格小于10的记录 img_1.png or :ID为1002或ID为1003的记录 img_2.png

2、and 和or 同时使用对比案列 若我们想要获取id 为1002或1003,而且价格不低于10的记录

SELECT * FROM products WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10

以上写法的结果如下: img_3.png 很明显有两条记录不是我们希望的,原因是and的优先级要比or高,因此机器对命令的理解是: 获取id为1002 或者ID为1003的且价格不低于10的记录,而不会对1002的价格做限定

因此我们需要按照下面的写法,并且建议在多条件时使用这种方法避免歧义

SELECT * FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10

结果如下; img_4.png

in

SELECT * FROM products WHERE vend_id IN (1002,1003)

结果: img_5.png

根据结果看,其实就是or的另一种写法,对吧?那么回到思考的问题:in的优势? 1、设想如果vend_id的范围比较多,就需要写很多or ,没有in直观,如果写到更复杂的查询语句,不具备可读性 2、使用in是可以加快查询速度的(需要对Mysql稍微深入了解,并且需要数据结构的知识) 3、最核心的优势在于in可以包含其他select语句

not

SELECT * FROM products WHERE vend_id NOT IN (1002,1003)

结果: img_6.png

ps:not在简单的子句优势并不大,但在复杂的子句中优势很明显,就如上个语句中,找出范围之外的数据记录就很方便

另外,在Mysql中not支持对in、between、exists取反

标签:入门,1002,vend,过滤,products,Mysql,1003,id,SELECT
From: https://blog.51cto.com/u_14557673/6186327

相关文章

  • Mysql四种事务隔离级别
    先了解一下事务的四大特性:ACID原子性(Atomicity)原子性就是不可拆分的特性,要么全部成功然后提交(commit),要么全部失败然后回滚(rollback)。MySQL通过RedoLog重做日志实现了原子性,在将执行SQL语句时,会先写入redologbuffer,再执行SQL语句,若SQL语句执行出错就会根据redologbuffer中的......
  • Mysql 入门之过滤数据(一)
    关键字:where、between、null知识点1、where关键字在Mysql中用于获取指定搜素条件的数据,这些条件也称之为过滤条件2、between为where子句的操作符,诸如=、<、>等符号功能类似3、关于null可以初步理解为它是Mysql中不确定的“值”,从根本上讲它都不是个“值”下面给出一些案......
  • cnetos8上RPM安装mysql8后,修改初始密码提示Your password does not satisfy the curre
    我在修改mysql8初始密码是遇到了Yourpassworddoesnotsatisfythecurrentpolicyrequirements,如果您的mysql版本5.x可能不太合适。下图是我遇到的问题: 意思是,密码不符合密码验证要求。但是mysql8的初始密码连验证要求都查不到,不过一般密码强度是不过我们可以密码设置为......
  • Springmvc入门
             1.什么是springmvcSpringWebMVC是一种基于Java的实现了MVC设计模式的、请求驱动类型的、轻量级Web框架。ssm:即springmvc,spring,mybatis  2.项目中加入springmvc支持2.1导入依赖<dependency><groupId>org.springframework</groupI......
  • mysql性能优化二
    索引:高校检索数据的数据结构索引能干吗呢‘?索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提......
  • Netty入门
    一、Netty概述1、Netty是什么?>Netty是由JBOSS提供的一个Java开源框架。Netty提供异步的、基于事件驱动的网络应用程序架构,用以快速开发高性能、高可靠性的网络IO程序。Netty可以帮助你快速、简单的开发出一个网络应用,相当于简化和流程化了NIO的开发过程Netty是目前最流行的NI......
  • Docker快速入门 第一篇
    目录Docker容器一、前言1、什么时虚拟化2、cocker是什么3、容器与虚拟化的区别4、Docker的概念二、安装dockerDocker容器一、前言1、什么时虚拟化在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转......
  • Docker快速入门 第二篇
    目录Docker一、Iass-Paas和Saas1、简介二、Docker常用命令1、镜像站设置2、启动/停止常用命令三、镜像命令相关四、容器相关命令Docker一、Iass-Paas和Saas1、简介什么是lass-Pass和Saas:#Iaas:Infrastructure-as-a-Service(基础设施即服务) IaaS公司会提供场外服务器,存储......
  • centos安装MySQL8记录
    1.卸载mariadb因centos7默认安装了mariadb,会造成依赖冲突,按下列方式进行卸载:rpm-qa|grepmariadb#如果出现mariadb-libs-5.5.68-1.el7.x86_64#执行rpm-emariadb-libs--nodeps2.下载  注意权限:(chmod-R777/var/lib/mysql)(chmod-R777/var......
  • js入门
    js的基础JavaScript(简称JS”)是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。javascript又名ECMAscriptECMA是什么?1、全称:Europeancomputermanufacturersassociation欧洲计算机制造联合会;2、它的标准名单中的:ECMA—262脚本语言的规范:规范化脚本语言,......