• MySQL之数据查询(WHERE)


            WHERE子句必须紧跟在FROM子句之后,在WHERE子句中,使用一个条件从FROM子句的中间结果中选取行。语法格式:WHERE <判定运算>

    判定运算:结果为true、false或unknown

            WHERE子句会根据条件对FROM子句的中间结果中的行一行一行地进行判断,当条件为ture时,一行就被包含到WHERE子句的中间结果集中。

            在SQL中,返回逻辑值(true或false)的运算符或关键字都可称为谓词,判定运算包括比较运算、模式匹配、范围比较、空值比较和子查询。

     1、比较运算

            比较运算符用于比较两个表达式值,MySQL支持的比较运算符有:=(等于),<(小于),<=(小于等于),>(大于),>=(大于等于),<=>(相等或都等于空),<>(不等于),!=(不等于)。

            表达式是除TEXT和BLOB类型外的表达式。

            当两个表达式值均不为空值(NULL)时,除了“<=>”运算符,其他比较运算返回逻辑值true(真)或false(假)。而当两个表达式值中有一个为空值或都为空值时,将返回unknown。

     例:查询Bookstore数据库book表中书名为“网页程序设计”的记录

    1. SELECT *
    2. FROM book
    3. WHERE 书名='网页程序设计';

     例:查询Book表中单价大于30的图书情况

    1. SELECT *
    2. FROM Book
    3. WHERE 单价>30;

             MySQL有一个特殊的等于运算符“<=>”,当两个表达式彼此相等或都等于空值时,其运算的值为true,其中有一个空值或都是非空值但不相等时该条件结果就是false,而没有unknown的情况。

     2、逻辑运算

            逻辑运算可以将多个判定运算的结果通过逻辑运算符(AND、OR、XOR和NOT)组成更为复杂的查询条件。

            逻辑运算符用于对某个条件进行测试,运算结果为true(1)或false(0)。MySQL提供的逻辑运算符有:

    not或!:逻辑非

    or或||:逻辑或

    and或&&:逻辑与

    xor:逻辑异或

            逻辑运算操作的结果是1或0,分别表示true和false。

    3、模式匹配 

            LIKE运算符用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是char、varchar、text、datetime等类型的数据,返回逻辑值true或false。

    语法格式:表达式 [not] LIKE 表达式

            使用LIKE进行模式匹配时,常使用特殊符号_和%进行模糊查询,%代表0个或多个字符,_代表单个字符。

            由于MySQL默认不区分大小写,要区分大小写时需要更换字符集的校对规则。

     例:查询Members表中姓“张”的会员的身份证号、姓名、注册时间

    1. SELECT 身份证号,会员姓名,注册时间
    2. FROM Members
    3. WHERE 会员姓名 LIKE'张%';

     例:查询book表中图书编号倒数第2位为D的图书编号和书名

    1. SELECT 图书编号,书名
    2. FROM book
    3. WHERE 图书编号 LIKE'%D_';

     若要查找特殊符号中的一个或全部(_和%),须使用一个转义字符。如当要查找下划线_时,可以使用ESCAPE'#'来定义#为转义字符,这样,语句中在#后面的_就失去了其原来的特殊意义,被视为正常的下划线_。

    例:查询book表中书名中包含下划线的图书。

    1. SELECT 图书编号,书名
    2. FROM book
    3. WHERE 书名 LIKE'%#_%'ESCAPE'#';

     4、范围比较

            用于范围比较的关键字有两个,分别是BETWEEM和IN

            当要查询的条件是某个值的范围时,可以使用BETWEEN关键字。BETWEEN关键字指出查询范围,格式为:表达式 [NOT] BETWEEN 表达式1 AND 表达式2

    例:查询Book表中2003年出版的图书的情况 

    1. SELECT *
    2. FROM Book
    3. WHERE 出版时间 BETWEEN'2003-1-1' AND '2003-12-31';
    4. #或
    5. SELECT *
    6. FROM Book
    7. WHERE 出版时间>='2003-1-1' AND 出版时间<='2003-12-31';

     例:若要查询Book表中不在2003年出版的所有图书的情况,则要使用NOT

    1. SELECT *
    2. FROM Book
    3. WHERE 出版时间 NOT BETWEEN '2003-1-1' AND '2003-12-31';
    4. #或
    5. SELECT *
    6. FROM Book
    7. WHERE 出版时间<='2003-1-1' OR 出版时间>='2003-12-31';

            使用IN关键字可以指定一个值表,值表中列出所有可能的值,当与值表中的任一个匹配时,即返回true,否则返回false。

    语法格式:表达式 [NOT] IN(子查询 | 表达式1[,...表达式n])

            IN关键字应用最多的是表达子查询,也可以用于OR运算。

     例:查询Book表中“高等教育出版社”,“北京大学出版社”和“人民大学出版社”出版的图书情况

    1. SELECT * FROM Book
    2. WHERE 出版社 IN'高等教育出版社','北京大学出版社','人民大学出版社');
    3. #或
    4. SELECT * FROM Book
    5. WHERE 出版社='高等教育出版社'
    6. OR 出版社='北京大学出版社'
    7. OR 出版社='人民大学出版社';

    5、空值比较

            当需要判定一个表达式的值是否为空值时,使用IS NULL关键字。

    语法格式:表达式 IS [NOT] NULL

    若表达式的值为空值,返回true,否则返回false,当使用not时,结果刚好相反。

    例:查询Sell 表中还未发货的订单记录

    1. SELECT *
    2. FROM Sell
    3. WHERE 是否发货 IS NULL;
  • 相关阅读:
    【WebRTC---源码篇】(十:一)WEBRTC 发送视频RTP包
    uniapp获取cilinet
    【web-攻击访问控制】(5.1.2)常见漏洞:多阶段功能、静态文件、平台配置错误、访问控制方法不安全
    vs c++ 代码 c2362错误
    JAVA面试技巧之自我介绍
    ArrayList分析1:循环、扩容、版本
    ssm冬奥会志愿者报名系统毕业设计源码241154
    《C++新经典》第16章 智能指针
    基于篇章结构的英文作文自动评分方法(学习笔记)
    【技术分享】NetLogon于域内提权漏洞(CVE-2020-1472)
  • 原文地址:https://blog.csdn.net/qq_62731133/article/details/126004618