从开始写博客来认知此书,这本书是入门者的敲门砖,非常优秀的一本书,讲的内容都很实用!

    从最简单开始0开始、单个、多个、全部以此套路逐步深入,是不是所谓的脉络清晰就是这样呢?

    前一篇介绍的是根据单列进行数据过滤,单列查询是多列查询的基础,现在使用多字段去进行数据过滤查询。


    1.多字段过滤查询

    类比现实:查询公司中户籍是北京的、年龄超过30岁、性别是男的同事信息;  

查询商品名称是'King doll'、商品价格是9.49的商品。

    查询SQL:

SELECT prod_id, prod_name, prod_price FROM Products WHERE prod_name = 'King doll' AND prod_price = 9.49;

   

查询结果:

           

MySQL 某字段多个拆成多个字段 mysql多字段数据_字段

    2.多字段过滤连接

    WHERE字句中有多个字段进行查询过滤,过滤条件如何连接的呢?MySql允许给出多个WHERE字句进行过滤,它们可以使用AND或者OR进行连接!

    AND连接类比现实:飞鹰小学5年2班身高超过1米3、不戴眼镜的男同学去操场上跑步。根据上述描述可以得出结论必须同时满足身高超过1米3、不戴眼镜、男生这三个条件的同学才需要去操场跑步,任何一个条件不满足都不用去操场跑步。

飞鹰小学5年2班身高超过1米3或不戴眼镜的同学去操场上跑步,根据上述描述可以得出结论只要满足身高超过1米3,或不戴眼镜这两个条件中任意一个条件的学生就要去操场跑步,即身高超过1米3的同学要去跑步,不戴眼镜的同学要去跑步。只要满足任意一个条件就需要去操场可以!

   

   2.1AND操作符

AND运算符作用?用来指示检索满足所有给定条件的行。如果需要同时满足多个过滤条件,只需要在过滤条件之间添加AND即可。

   测试案例:查询商品单价在2-5之间,商品数量大于等于10的订单数据。

   测试SQL:

SELECT * FROM OrderItems WHERE item_price BETWEEN 2 AND 5 AND quantity >= 10 ORDER BY order_num DESC;



   测试结果:

  

MySQL 某字段多个拆成多个字段 mysql多字段数据_运算符_02

   结果说明:如果有多个过滤条件需要同时满足,那么只需要在哪些过滤条件之间加上AND关键字即可,查询条件理论上个数不限!

  

   2.2OR操作符

用来指示检索满足任一给定条件的行。如果有多个过滤条件,那么需要过滤条件之间添加OR即可。

   测试案例:查询商品单价在3-5之间,或商品数量大于等于200的订单数据。

   测试SQL:

SELECT * FROM OrderItems WHERE item_price BETWEEN 3 AND 5 OR  quantity >= 200 ORDER BY order_num DESC;



   测试结果:

  

MySQL 某字段多个拆成多个字段 mysql多字段数据_SQL_03

   结果说明:只要满足商品单价在[3,5]之间,或者商品数量大于等于200的订单都满足条件。

  

   AND必须满足全部条件,OR只需要满足任一条件。

SELECT * FROM 企鹅 WHERE 颜色=白色 OR 性别=母,那么就可以将白色公企鹅查询出来。

  

   2.4执行次序

   将AND和OR结合使用进行复杂的数据过滤,那么就会出现执行次序的问题。

   类比现实:比如小学中学习有括号四则混合运算,那么运算就要满足一定顺序;比如公司中查询月薪超过10w,并且职位是管理层或开发者的员工。

   测试情景:查询商品单价是3.49,商品编号是BNBG01或BNBG03的订单。

BNBG01或BNBG03任一个即可。

   测试SQL:

SELECT * FROM OrderItems WHERE  item_price= 3.49 AND prod_id = 'BNBG01' OR prod_id= 'BNBG03' ;



测试结果:

  

MySQL 某字段多个拆成多个字段 mysql多字段数据_SQL_04

   结果分析:

   1.数据没有满足我们的预期,为什么呢?单价必须等于3.49。

   2.在SQL的世界中AND运算符优先于OR运算符,好比乘法运算优先于加减法运算先执行。

'BNBG01'的订单,或者商品编号是'BNBG03'的订单,所以和我们预期是不一样的!

  

如何解决AND和OR的顺序问题呢?使用圆括号明确地分组进行相应的操作。

   测试SQL:

SELECT * FROM OrderItems WHERE  item_price= 3.49 AND (prod_id = 'BNBG01' OR prod_id= 'BNBG03') ;



  

   测试结果:

  

MySQL 某字段多个拆成多个字段 mysql多字段数据_SQL_05

 

   结果分析:

   1.从查询结果中可以看到,(prod_id='BNBG01' OR prod_id='BNBG03')作为1个整体变成1个执行单元;

圆括号的优先级高于AND,AND优先级高于OR;

   3.如果查询过滤条件过多,使用AND或者OR,那么就应该使用圆括号明确地分组操作,不要以来默认地计算次序!使用圆括号的好处在于可消除歧义,增强可读性。