• ADADADADAD

    如何解决SQL语句中AND和OR执行顺序遇到的问题[ mysql数据库 ]

    mysql数据库 时间:2024-11-28 13:25:39

    作者:文/会员上传

    简介:

    场景1、有一张学生表Student,表字段包括Id(用户主键)、Name(用户名)、Grade(年级)、Class(班级)、Sex(性别)。如下:表结构2、在表中导入十条测试数据,如下:表数据3、现需要查询出性别为女

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    场景

    1、有一张学生表Student,表字段包括Id(用户主键)、Name(用户名)、Grade(年级)、Class(班级)、Sex(性别)。如下:

    表结构

    2、在表中导入十条测试数据,如下:

    表数据

    3、现需要查询出性别为女的1年级女学生,或者性别为女的2班级女学生。SQL语句如下:
    select * from student where sex='女' and grade=1 or class=2
    但是该sql查询出来的结果并不符合要求,执行结果如下:

    执行结果

    执行的结果中还查询出了班级为2的男学生,显然结果是不正确的。

    4、修改下SQL语句,添加上括号。如下:

    select*fromstudentwheresex='女'and(grade=1orclass=2)

    该sql查询出来的结果符合要求

    分析

    从上面的场景中,问题的关键就在于AND和OR的执行顺序问题。
    查阅资料,关系型运算符优先级高到低为:NOT >AND >OR
    如果where 后面有OR条件的话,则OR自动会把左右的查询条件分开。
    就如上面场景中的第一条语句,他的查询条件分为两部分(或):

    1、sex='女'andgrade=12、class=2

    这也就是查询出1年级的女学生,2班级的学生。不符合最初查询的要求。
    那么解决办法就是使用括号区分执行的顺序
    就如上面场景的第二条语句,查询条件分为两部分(并):

    1、sex='女'2、(grade=1orclass=2)
    如何解决SQL语句中AND和OR执行顺序遇到的问题.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysqlandor