当前位置: 首页 > 科技观察

各大厂商使用MySQL8都是这样进行条件查询的

时间:2023-03-16 19:05:50 科技观察

在日常业务中,经常需要通过查询条件来过滤数据。1查询条件1.1WHERE指定查询的过滤条件。以下语句只返回名为“刘备”的员工信息:WHERE位于FROM之后,指定一个或多个过滤条件,返回满足条件的数据。WHERE子句称为谓词(Predicate)。2选择(Selection)通过查询条件过滤数据的操作在关系操作中称为选择。是对表的横向选择,保留满足条件的行生成新表3.比较运算符比较两个值的大小,包括字符、数字、日期类型的数据。MySQL的比较运算符查询2018年11月11日之后入职的员工,其中DATE定义了一个日期类型的常量值。在指定DATE4BETWEEN以查找某个范围内的数据时,也可以省略日期。查询月薪在10000到15000之间的员工:需要注意的是BETWEEN包含了两端的值(10000到15000)。5IN运算符5.1查找列表中的值查询名为“刘备”、“关羽”或“张飞”的员工:只要匹配到列表中的任意一个值,就会返回结果6空值判断方式缺失或未知数据。判断一个值是否为空不能使用等于或不等于。例如,下面的查询试图找到没有主管(经理字段为空)的员工:空值判断示例该语句不返回任何结果,但有这样的数据。错误的原因是在数学上比较一个值和一个未知值,结果仍然未知;即使比较两个空值,结果也是未知的。以下操作都是非法的。MySQL8.0下会报错[42000][1064]你的SQL语法有错误;查看对应你MySQL服务器版本的手册16.1行near'NULL!=NULL'的正确语法使用空值判断表达式的值为空,ISNULL返回true,ISNOTNULL返回false的值expression不为空,ISNULL返回false,ISNOTNULL返回true查找没有上级的员工如果只能指定单一的过滤条件,无法满足复杂的查询需求;为此,SQL引入了用于构建复杂条件的逻辑运算符。7复合条件SQL借助于逻辑代数中的逻辑运算,提供了三种逻辑运算符:7.1AND逻辑与运算符只有当两边的条件都为真时,结果才为真,返回数据;否则,不返回任何数据。以下示例使用AND运算符查找性别为“女性”且月薪超过10000的员工:SELECTemp_name,sex,salaryFROMemployeeWHEREsex='female'ANDsalary>10000;emp_name|sex|salary|--------|---|--------|孙尚香|女|12000.00|“孙尚香”为女员工,月薪12000。OR,逻辑或运算符。只要其中一个条件为真,则结果为真,返回数据;否则,不返回任何数据NOT,逻辑NOT运算符。用于将判断结果取反,真变假,假变真;null值反转后还是null。7.2OR运算符使用OR运算符查找名为“刘备”、“关羽”或“张飞”的员工:SELECTemp_name,sex,salaryFROMemployeeWHEREemp_name='LiuBei'ORemp_name='GuanYu'ORemp_name='张飞';此查询的结果与前面的IN运算符示例相同。7.3短路求值对于逻辑运算符AND和OR,SQL使用短路求值。也就是说,只要前面的表达式能确定最终的结果,就不会进行后面的计算。这可以提高运营效率。因此,以下语句不会产生被零除的错误:SELECT'AND'FROMemployeeWHERE1=0AND1/0=1;SELECT'OR'FROMemployeeWHERE1=1OR1/0=1;第一次查询肯定不会,因为AND左边的结果为false没有返回结果,所以不会计算1/0;第二个查询会返回一个结果,因为OR左边的结果为真,不会产生被零除的错误。7.4NOT运算符NOT运算符可以与其他运算符结合使用来反转查询条件的结果:NOTBETWEEN,超出范围NOTIN,不在列表中NOTLIKE,不匹配某种模式。LIKE操作符用于字符串的模糊搜索,下篇文章会介绍。NOTEXISTS,子查询中没有结果。关于子查询和EXISTS操作符,在第16章会介绍NOTISNULL,不为空。相当于ISNOTNULL。以下示例查找“刘备”、“关羽”和“张飞”以外的员工:SELECTemp_id,emp_nameFROMemployeeWHEREemp_nameNOTIN('刘备','关羽','张飞');通过组合多个逻辑运算符,可以构造任意复杂的查询条件。但是需要注意不同运算符之间的优先级问题。8算子优先级假设我们想知道人力资源部(deptid=2)或财务部(deptid=3)的哪些员工有奖金。如果您使用以下查询:SELECTemp_name,dept_id,bonusFROMemployeeWHEREdept_id=2ORdept_id=3ANDbonusISNOTNULL;【编辑推荐】比特币暴跌至3000美元的3个理由,为何继续看涨?用你喜欢的编程语言配置基础设施即代码2020年50多款Kubernetes工具值得收藏解决“删库跑路”的10个技巧带你进入Emacs世界