文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

大厂都这样使用MySQL8进行条件查询

2024-12-03 16:33

关注

 日常业务中经常需要通过查询条件过滤数据。

1 查询条件

1.1 WHERE

指定查询的过滤条件。以下语句只返回姓名为“刘备”的员工信息:


WHERE 位于 FROM 之后,指定一个或者多个过滤条件,满足条件的数据才会返回。

  1. WHERE 子句被称为谓词(Predicate)。 

 2 选择(Selection)

通过查询条件过滤数据的操作在关系运算中被称为选择

它是针对表进行的水平选择,保留满足条件的行生成的新表

3 比较运算符

比较两个数值的大小,包括字符、数字以及日期类型的数据。


查询员工在 2018 年 11 月 11 日之后入职



其中,DATE 定义了一个日期类型的常量值。指定日期时也可以省略 DATE


4 BETWEEN

想要查找一个范围内的数据。

查询月薪位于 10000 到 15000 之间的员工:



需要注意的是,BETWEEN 包含了两端的值(10000 和 15000)。

5 IN 运算符

5.1 查找列表中的值

查询姓名为“刘备”、“关羽”或者“张飞”的员工:


只要匹配列表中的任何一个值,都会返回结果

6 空值判断

代表缺失或者未知的数据.

判断一个值是否为空不能使用等于或者不等于.

例如,以下查询尝试找出没有上级领导(manager 字段为空)的员工:

空值判断的错误示例


该语句没有返回任何结果


但确实存在这样的数据。错因在于将一个值与一个未知的值进行数学比较,结果仍然未知;即使是将两个空值进行比较,结果也是未知。

以下运算均是非法的,在 MySQL8.0 版本下,会报错


6.1 空值判断


expression 的值为空,IS NULL 返回真,IS NOT NULL 返回假

表达式的值不为空,IS NULL 返回假,IS NOT NULL 返回真

查找没有上级领导的员工


如果仅仅能够指定单个过滤条件,就无法满足复杂的查询需求;为此,SQL 引入了用于构建复杂条件的逻辑运算符。

7 复合条件

借助于逻辑代数中的逻辑运算,SQL 提供了三个逻辑运算符:

7.1 AND 逻辑与运算符

只有当两边的条件都为真时,结果才为真,返回数据;否则,不返回数据。

以下示例使用 AND 运算符查找性别为“女”,并且月薪超过 10000 的员工:

  1. SELECT emp_name, sex, salary 
  2.   FROM employee 
  3.  WHERE sex = '女' 
  4.    AND salary > 10000; 
  5.  
  6. emp_name|sex|salary  | 
  7. --------|---|--------| 
  8. 孙尚香   |女 |12000.00| 
  9. “孙尚香”是女性员工,并且月薪为 12000。 

7.2 OR 运算符

使用 OR 运算符查找姓名为“刘备”、“关羽”或者“张飞”的员工:

SELECT emp_name, sex, salary FROM employee WHERE emp_name = '刘备' OR emp_name = '关羽' OR emp_name = '张飞';

该查询的结果与前文中 IN 运算符的示例相同。

7.3 短路运算

对于逻辑运算符 AND 和 OR,SQL 使用短路运算(short-circuit evaluation)。也就是说,只要前面的表达式能够决定最终的结果,不执行后面的计算。这样能够提高运算效率。因此,以下语句不会产生除零错误:

  1. SELECT 'AND' 
  2.   FROM employee 
  3.  WHERE 1 = 0 AND 1/0 = 1; 
  4.  
  5. SELECT 'OR' 
  6.   FROM employee 
  7.  WHERE 1 = 1 OR 1/0 = 1; 

第一个查询由于 AND 左边的结果为假,肯定不会返回任何结果,因此也就不会计算 1/0;第二个查询由于 OR 左边的结果为真,一定会返回结果,同样不会产生除零错误。

4 NOT 运算符

以下示例查找除了“刘备”、“关羽”以及“张飞”之外的其他员工:

  1. SELECT emp_id, emp_name 
  2.   FROM employee 
  3.  WHERE emp_name NOT IN ('刘备''关羽''张飞'); 

将多个逻辑运算符进行组合,可以构造任意复杂的查询条件。不过,需要注意不同的运算符之间的优先级问题。

8 运算符优先级

假如我们想要知道人力资源部(deptid = 2)或者财务部门(deptid = 3)中,哪些员工拥有奖金。如果使用以下查询:

  1. SELECT emp_name, dept_id, bonus 
  2.   FROM employee 
  3.  WHERE dept_id = 2 
  4.     OR dept_id = 3 
  5.    AND bonus IS NOT NULL

 【编辑推荐】

  1. 比特币跳水3000美元的3个原因,为什么它继续看涨?
  2. 使用你喜欢的编程语言,将基础设施作为代码进行配置
  3. 2020年,值得收藏的50多种Kubernetes工具
  4. 应对“删库跑路”的一种解决思路
  5. 10个让你进入Emacs世界的技巧

 

来源:JavaEdge内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯