MySQL中的常用逻辑操作符

news2025/1/10 23:50:24

逻辑运算符在MySQL查询中扮演着重要角色,通过AND、OR、NOT等运算符的组合使用,可以提高查询的准确性和灵活性,确保查询结果满足业务需求。合理使用这些运算符还能优化查询性能,减少不必要的数据检索,并提高SQL语句的可读性和可维护性。
本来是想借助力扣的题目来巩固学习,结果刷了三道题后感觉太慢,还是从网上下载了一个动漫角色战力数据,自己建了两个数据库,操作更快更方便一点。
常用的MySQL逻辑运算符如下

逻辑运算符描述示例
AND (或 &&)当且仅当两个操作数都为真时,条件才为真SELECT * FROM 数据表 WHERE 列1 = '数值1' AND 列2 = '数值2';
OR (或 ||)当至少有一个操作数为真时,条件就为真SELECT * FROM 数据表 WHERE 列1 = '数值1' OR 列2 = '数值2';
NOT (或 !)用于反转操作数的逻辑状态SELECT * FROM 数据表 WHERE NOT 列1 = '数值1';
BETWEEN用于在某个范围内选择值SELECT * FROM 数据表 WHERE 列1 BETWEEN '数值1' AND '数值2';
IN用于测试某个值是否在给定的列表中SELECT * FROM 数据表 WHERE 列1 IN ('数值1', '数值2', '数值3');
IS NULL, IS NOT NULL用于测试某个字段是否为NULL或不为NULLSELECT * FROM 数据表 WHERE 列1 IS NULL;
EXISTS, NOT EXISTS用于测试子查询是否返回任何结果SELECT * FROM 数据表1 WHERE EXISTS (SELECT 1 FROM 数据表2 WHERE 数据表2.column = 数据表1.column);
LIKE用于在字符串中搜索模式SELECT * FROM 数据表 WHERE 列1 LIKE 'pattern%';
<> (或 !=)用于检查两个值是否不等SELECT * FROM 数据表 WHERE 列1 <> '数值1';

AND(&&)

借助力扣的题库来演示下。
原题链接:高频SQL50题:1757
题目要求如下:
表:Products

Column NameType
product_idint
low_fatsenum
recyclableenum

product_id 是该表的主键(具有唯一值的列)。
low_fats 是枚举类型,取值为以下两种 (‘Y’, ‘N’),其中 ‘Y’ 表示该产品是低脂产品,‘N’ 表示不是低脂产品。
recyclable 是枚举类型,取值为以下两种 (‘Y’, ‘N’),其中 ‘Y’ 表示该产品可回收,而 ‘N’ 表示不可回收。

编写解决方案找出既是低脂又是可回收的产品编号。

返回结果 无顺序要求 。

返回结果格式如下例所示:

示例 1:

输入:
Products 表:

product_idlow_fatsrecyclable
0YN
1YY
2NY
3YY
4NN

输出:

product_id
1
3

解释:
只有产品 id 为 1 和 3 的产品,既是低脂又是可回收的产品。

先建立以下表格模拟:

CREATE TABLE Products (  
    product_id INT PRIMARY KEY,  
    low_fats ENUM('Y', 'N'),  
    recyclable ENUM('Y', 'N')  
);
-- 一口气插入数据
INSERT INTO Products (product_id, low_fats, recyclable) VALUES  
(0, 'Y', 'N'),  
(1, 'Y', 'Y'),  
(2, 'N', 'Y'),  
(3, 'Y', 'Y'),  
(4, 'N', 'N');

我的解题方法是在使用了SELECTFROMWHERE的基础上,使用AND逻辑操作符来确保两个条件(低脂和可回收)同时得到满足。

SELECT product_id  
FROM Products  
WHERE low_fats = 'Y' AND recyclable = 'Y';

运行结果如下,我的应该是最常见的解法
在这里插入图片描述

在这里插入图片描述

OR(||)

这个也是力扣的题库。
原题链接:高频SQL50题:584
表: Customer

Column NameType
idint
namevarchar
referee_idint

在 SQL 中,id 是该表的主键列。
该表的每一行表示一个客户的 id、姓名以及推荐他们的客户的 id。
找出那些 没有被 id = 2 的客户 推荐 的客户的姓名。

以 任意顺序 返回结果表。

结果格式如下所示。

示例 1:

输入:
Customer 表:

idnamereferee_id
1Willnull
2Janenull
3Alex2
4Billnull
5Zack1
6Mark2

输出:

name
Will
Jane
Bill
Zack

建立表格先,这里我在建立时添加了外键约束,可以允许referee_id列有NULL

CREATE TABLE Customer (  
    id INT PRIMARY KEY,  
    name VARCHAR(255),  
    referee_id INT,  
    FOREIGN KEY (referee_id) REFERENCES Customer(id) ON DELETE SET NULL  
);  
  
INSERT INTO Customer (id, name, referee_id) VALUES  
(1, 'Will', NULL),  
(2, 'Jane', NULL),  
(3, 'Alex', 2),  
(4, 'Bill', NULL),  
(5, 'Zack', 1),  
(6, 'Mark', 2);

在这里插入图片描述
使用OR

SELECT name  
FROM Customer  
WHERE referee_id != 2 OR referee_id IS NULL;

在这里插入图片描述
在这里插入图片描述
刷题太费劲了,我还是自建一个小数据库吧

创建超级英雄战力数据库

CREATE DATABASE superheroes;
USE superheroes; 
CREATE TABLE IF NOT EXISTS characters (    
    `Character` VARCHAR(255),    
    `Universe` VARCHAR(255),    
    `Strength` INT,    
    `Speed` INT,    
    `Intelligence` INT,    
    `SpecialAbilities` VARCHAR(255),    
    `Weaknesses` VARCHAR(255),    
    `BattleOutcome` INT    
);

插入超级英雄信息

INSERT INTO `characters` (`Character`, `Universe`, `Strength`, `Speed`, `Intelligence`, `SpecialAbilities`, `Weaknesses`, `BattleOutcome`) VALUES 
('Wonder Woman', 'Marvel', 7, 8, 3, 'Telekinesis', 'Kryptonite', 0),  
('Iron Man', 'Marvel', 4, 7, 9, 'Telekinesis', 'Kryptonite', 0),  
('Ass Man', 'DC Comics', 8, 7, 5, 'Telekinesis', 'Magic', 0),  
('Spider-Dick-Man', 'DC Comics', 5, 6, 10, 'Telekinesis', 'Kryptonite', 0),  
('Flash', 'Marvel', 7, 6, 2, 'Invisibility', 'Magic', 0),  
('Spider-Man', 'DC Comics', 10, 9, 7, 'Invisibility', 'Wooden Stake', 1),  
('Wonder Woman', 'Marvel', 3, 6, 2, 'Super Strength', 'Silver', 1),  
('Thor', 'DC Comics', 7, 2, 4, 'Invisibility', 'Magic', 1),  
('Batman', 'DC Comics', 8, 2, 7, 'Flight', 'Silver', 0),  
('Iron Man', 'DC Comics', 5, 5, 4, 'Flight', 'Wooden Stake', 0),  
('Superman', 'DC Comics', 4, 4, 7, 'Telekinesis', 'Kryptonite', 0),  
('Thor', 'DC Comics', 8, 2, 7, 'Flight', 'Wooden Stake', 0),  
('Iron Man', 'DC Comics', 8, 3, 1, 'Super Strength', 'Silver', 0),  
('Batman', 'Marvel', 3, 7, 6, 'Invisibility', 'Wooden Stake', 0),  
('Flash', 'DC Comics', 6, 8, 9, 'Invisibility', 'Kryptonite', 0),  
('Superman', 'Marvel', 5, 6, 2, 'Invisibility', 'Wooden Stake', 0),  
('Iron Man', 'Marvel', 2, 5, 3, 'Flight', 'Kryptonite', 0),  
('Captain America', 'Marvel', 8, 1, 10, 'Invisibility', 'Magic', 1),  
('Wonder Woman', 'Marvel', 6, 8, 5, 'Telekinesis', 'Silver', 1),  
('Thor', 'Marvel', 2, 3, 9, 'Telekinesis', 'Kryptonite', 0),  
('BigDick', 'Marvel', 100, 100, 100, 'Flight', 'Kryptonite', 0);

查看下数据库是否正创建成功,使用CREATE VIEW创建一个虚拟表格来展示下:

CREATE VIEW superheroes_view AS  
SELECT `Character`, `Universe`, `Strength`, `Speed`, `Intelligence`, `SpecialAbilities`, `Weaknesses`, `BattleOutcome`  
FROM characters;

SELECT * FROM superheroes_view;

在这里插入图片描述

NOT (或 !)

根据superheroes数据库查询非漫威宇宙的角色

SELECT * FROM characters WHERE NOT Universe = 'Marvel';  
-- 或者SELECT * FROM characters WHERE Universe != 'Marvel';

在这里插入图片描述

BETWEEN

查询力量值在5到8之间的角色:

SELECT * FROM characters WHERE Strength BETWEEN 5 AND 8;

在这里插入图片描述

IN

查询宇宙为漫威或DC的角色(这里再插入几个Pig Pig Man中的角色):

INSERT INTO `characters` (`Character`, `Universe`, `Strength`, `Speed`, `Intelligence`, `SpecialAbilities`, `Weaknesses`, `BattleOutcome`) VALUES 
('Pig Woman', 'Pig Pig Man', 7, 8, 3, 'Telekinesis', 'Kryptonite', 0),  
('Super People Strang', 'Pig Pig Man', 4, 7, 9, 'Telekinesis', 'Kryptonite', 0),  
('Teacher MiHu', 'Pig Pig Man', 8, 7, 5, 'Telekinesis', 'Magic', 0),  
('GGBond', 'Pig Pig Man', 5, 6, 10, 'Telekinesis', 'Kryptonite', 0);
SELECT * FROM characters WHERE Universe IN ('Marvel', 'DC Comics');

在这里插入图片描述

IS NULLIS NOT NULL

插入含有NULL值的角色信息,随后查询字段不为NULL的角色:

INSERT INTO `characters` (`Character`, `Universe`, `Strength`, `Speed`, `Intelligence`, `SpecialAbilities`, `Weaknesses`, `BattleOutcome`) VALUES 
('Fei Fei', 'Pig Pig Man', NULL, 8, 3, 'Telekinesis', 'Kryptonite', 0),  
('Old Eight', 'Pig Pig Man', 4, 7, NULL, 'Telekinesis', 'Kryptonite', 0),  
('Doger', 'Pig Pig Man', NULL, 7, 5, 'Telekinesis', 'Magic', 0),  
('Hu Ge', 'Pig Pig Man', 5, NULL, 10, 'Telekinesis', 'Kryptonite', 0);

查询能力的三个数值字段中不存在NULL值的角色

SELECT * FROM `characters` WHERE `Strength` IS NOT NULL AND `Speed` IS NOT NULL AND `Intelligence` IS NOT NULL;

在这里插入图片描述

查询能力的三个数值字段存在NULL值的角色:

SELECT * FROM `characters` WHERE `Strength` IS NULL OR `Speed` IS NULL OR `Intelligence` IS NULL;

在这里插入图片描述

EXISTSNOT EXISTS

这是一个稍微复杂的操作符,需要有两个表格,先新建一个名为missions的表格,在里面记录角色的战斗任务:

SELECT `Character`, `Universe`  
FROM `characters` c  
WHERE EXISTS (  
    SELECT 1  
    FROM `missions` m  
    WHERE m.`Character` = c.`Character`  
);

给角色安排下任务:

CREATE TABLE IF NOT EXISTS missions (  
    `MissionID` INT AUTO_INCREMENT PRIMARY KEY,  
    `Character` VARCHAR(255),  
    `MissionName` VARCHAR(255),  
    `Success` BOOLEAN  
);  
  
INSERT INTO `missions` (`Character`, `MissionName`, `Success`) VALUES  
('Spider-Man', 'Save the PigWord', TRUE),  
('Batman', 'Love the Joker', TRUE),  
('Iron Man', 'Defend the Earth', TRUE),  
('Wonder Woman', 'Find the Lost Artifact', FALSE),  
('GGBond', 'Rescue the Piglets', TRUE);

使用EXISTS查询有任务的英雄:

SELECT `Character`, `Universe`  
FROM `characters` c  
WHERE EXISTS (  
    SELECT 1  
    FROM `missions` m  
    WHERE m.`Character` = c.`Character`  
);

在这里插入图片描述

使用NOT EXISTS查询没有任务的英雄:

SELECT `Character`, `Universe`  
FROM `characters` c  
WHERE NOT EXISTS (  
    SELECT 1  
    FROM `missions` m  
    WHERE m.`Character` = c.`Character`  
);

在这里插入图片描述

LIKE

查询名字以"G"开头的角色:

SELECT * FROM `characters` WHERE `Character` LIKE 'G%';

在这里插入图片描述

<> (或 !=)

查询力量值不等于7的角色:

SELECT * FROM characters WHERE Strength <> 7;  
-- 或者SELECT * FROM characters WHERE Strength != 7;

在这里插入图片描述

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

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

相关文章

maven 根据不同环境,走不同的实现(多种环境组合)

​ 原因&#xff1a; 线上程序同时支持人大金仓和mysql&#xff0c;且支持根据环境动态选择 java JCE 的实现方式前期已完成 springboot 从mysql 迁移人大金仓 -kingbase &#xff1a;https://blog.csdn.net/qq_26408545/article/details/137777602?spm1001.2014.3001.5502 …

检测SD NAND文件系统异常和修复的方法

目录 1、打开命令提示符&#xff1a; 2、运行chkdsk命令&#xff1a; 3、命令参数说明&#xff1a; chkdsk是Windows中的一个命令行工具&#xff0c;用于检查磁盘上的文件系统错误和修复坏块。MK米客方德为您提供指导&#xff0c;以下是使用chkdsk的步骤&#xff1a; 1、打开…

CAN收发器

1、收发器的主要功能 &#xff08;1&#xff09;CAN通讯&#xff08;即报文收发&#xff09; MCU要CAN通讯&#xff1a;收发器模式切换至正常通讯模式&#xff08;Normal&#xff09;&#xff0c;正常通讯模式收发器能收能发。 MCU不要CAN通讯&#xff1a;把收发器切换至其它…

EHS环境健康安全管理:制造业ESG尖子生的“绿色通行证”

嘿&#xff0c;亲爱的制造业老铁们&#xff01;你们是不是经常听到“EHS环安卫管理”这个词&#xff0c;但又觉得它有些神秘和高大上呢&#xff1f;别担心&#xff0c;今天我就带你们轻松愉快地了解这个让制造业更加绿色、健康、安全的“神器”&#xff01; 一、EHS环安卫管理&…

大模型学习笔记-汇总篇

本文记录一下最近一个月学习的大模型相关的技术知识点&#xff0c;为拥抱AI浪潮做些技术储备。 大模型术语相关 参数规模 GPT 3.5 千亿级别 GPT4 1.8W亿级别 国内一般都是十亿或百亿级别 ChatGLM2_2K_6B BAICHUAN_4K_13B 淘宝星辰_4K_13B 【一一AGI大模型学习 所有资源获…

点云可视化 .ply文件 | 方案汇总

前言 本文分析可视化点云.ply文件的几种方法&#xff0c;包括MeshLab软件、在线可视化点云.ply文件、通过PyntCloud库编程实现。 PLY是一种用于存储三维数据的文件格式&#xff0c;常用于点云数据和多边形网格。 被广泛应用于计算机图形学、3D扫描和3D打印等领域。PLY文件可…

【AI落地应用实战】如何让扫描工具更会思考——智能高清滤镜2.0实战测评

一、引言 在这个信息爆炸的数字化时代&#xff0c;扫描工具已经成为我们日常工作和学习中不可或缺的助手。最近&#xff0c;扫描全能王推出了革命性的“智能高清滤镜2.0”&#xff0c;本次更新后&#xff0c;智能高清滤镜能够智能识别并优化扫描过程中的各种问题。无论是光线不…

好书安利 | LangChain入门指南:构建高可复用、可扩展的LLM应用程序(送PDF)轻松入门LangChain

《LangChain入门指南》 LangChain作为大模型集成框架鼎鼎大名&#xff0c;这本《LangChain入门指南》是一本很及时的书&#xff0c;值得推荐&#xff5e; 01 为什么需要LangChain 首先想象一个开发者在构建一个LLM应用时的常见场景。 当你开始构建一个新项目时&#xff0c;…

云仓是如何发展起来的?

1、电子商务的繁荣&#xff1a; 随着电商的兴起&#xff0c;对高效仓储和物流的需求越来越大。传统的仓储方式难以满足海量订单处理和快速配送的要求&#xff0c;因此需要一种更加灵活和高效的仓储解决方案。 ------------------------------------------------- 2、科技进步…

Mac中的xshell、xftp

ROYAL TSX 插件式支持远程连接linux、支持命令行、支持ftp、支持远程windows桌面。 免费版就足够使用了。&#xff08;支持维护一个Connections文件夹&#xff09; 需要在本地创建一个文件夹&#xff0c;用以保存链接信息 使用方法

注意!!2024下《网络规划设计师》易混淆知识点来了,赶紧码住

宝子们&#xff0c;在复习软考网络规划设计师中&#xff0c;是不是觉得有很多知识点含义比较相近&#xff0c;很多友友刚看的时候&#xff0c;估计会像我一样把它们弄混&#xff0c;作为一个软考老鸟&#xff0c;在这里给大家整理了网规学习过程中易混淆的知识点&#xff0c;大…

【GreenHills】GHS中Build的高级选项设置

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解GHS中高级构建选项的使用 2、 问题场景 1&#xff09;、想要清除工程的所有输出文件 2&#xff09;、想要对于工程进行重新构建的时候&#xff0c;希望删掉之前的输出文件&#xff0c;保证工程中所有输出文件…

C语言力扣刷题1——最长回文字串[双指针]

力扣算题1——最长回文字串[双指针] 一、博客声明二、题目描述三、解题思路1、思路说明2、知识补充a、malloc动态内存分配b、free释放内存c、strlen求字符数组长度d、strncpy函数 四、解题代码&#xff08;附注释&#xff09; 一、博客声明 找工作逃不过刷题&#xff0c;为了更…

中小企业进行数字化转型会面临哪些挑战?

在当今这个信息化、数字化的时代&#xff0c;中小企业进行数字化转型已不再是选择&#xff0c;而是必然。然而&#xff0c;这条转型之路并非坦途&#xff0c;它充满了未知与挑战。今天&#xff0c;我们就来探讨一下中小企业为社么要进行数字化转型以及在数字化转型过程中可能遇…

solidworks钣金工厂共享云桌面方案

随着信息技术的飞速发展和企业数字化转型的深入&#xff0c;传统的钣金工厂面临着诸多挑战&#xff0c;其中之一就是如何在保证数据安全的前提下&#xff0c;提高设计、生产和管理的效率。 SolidWorks是一款专业的三维3D设计软件&#xff0c;功能强悍&#xff0c;支持分布式数…

OpenAI最强大模型ChatGPT-4o,论文降重小技巧,国内直接使用

一、万字论文&#xff0c;从0到1&#xff0c;只需1小时 通过OpenAI5月14日1点发布的最新大模型ChatGPT4o&#xff1a; 1小时即可完成万字论文的编写通过GPT定制的降重大模型“中文论文降重”&#xff0c;2小时即可完成一篇优质的、查重率较低的万字论文。 在ChatGPT4o对话框中…

GPT-5的到来:智能飞跃与未来畅想

IT之家6月22日消息&#xff0c;在美国达特茅斯工程学院的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂确认了GPT-5的发布计划&#xff0c;预计将在一年半后推出。穆拉蒂形象地将GPT-4到GPT-5的飞跃比作高中生到博士生的成长。这一飞跃将给我们带来哪些变化&#xff1f;GPT-5的…

计算机公共课面试常见问题:线性代数篇

目录 1. 特征向量和特征值代表什么含义&#xff1f; 2. 矩阵的秩是什么&#xff1f;满秩代表什么&#xff1f;不满秩呢&#xff1f; 3. 奇异值分解是什么&#xff1f; …

昇思25天学习打卡营第五天|网络构建

背景 提供免费算力支持&#xff0c;有交流群有值班教师答疑的华为昇思训练营进入第五天了。 今天是第五天&#xff0c;前四天的学习内容可以看链接 昇思25天学习打卡营第一天|快速入门 昇思25天学习打卡营第二天|张量 Tensor 昇思25天学习打卡营第三天|数据集Dataset 昇思25天…

借助 Aspose.Words,在 C# 中将 Word 转换为 Excel

有时我们会遇到需要将 Word 文档&#xff08;DOC 或 DOCX&#xff09;转换为 Excel 文档的任务。例如&#xff0c;这对于数据分析和报告很有用&#xff0c;或者如果您收到了任何文本数据并想将其转换为表格格式&#xff08;XLS 或 XLSX&#xff09;以便进一步工作。在本文中&am…