美文网首页数据库
MySQL数据操作语言:条件查询

MySQL数据操作语言:条件查询

作者: InsaneLoafer | 来源:发表于2021-09-19 12:10 被阅读0次

条件查询

  • 很多时候,用户感兴趣的并不是逻辑表里的全部记录,而只是它们当中能够满足某一种或某几种条件的记录。这类条件要用WHERE子句来实现数据的筛选
    SELECT ... FROM ... WHERE 条件 [AND | OR] 条件 ...;
SELECT empno , ename , sal 
    FROM t_emp
WHERE deptno=10 AND sal >= 2000;
SELECT empno , ename , sal 
    FROM t_emp
WHERE (deptno=10 OR deptno=20) AND sal >= 2000;

四类运算符

  • WHERE语句中的条件运算会用到以下四种运算符:


算数运算符

null 进行加减乘除后的值仍然是null,如果此时要对null进行运算可以使用IFNULL(null,0)将其转为0。
SELECT 3+null; -> null
SELECT 3+IFNULL(null,0); -> 3

  • 例子:求部门编号为10,年薪大等于15000且工作时间大等于20年的员工信息。
SELECT empno, ename, deptno, sal, hiredate
FROM t_emp
WHERE deptno=10 AND (sal+IFNULL(null,0))*12>=15000
AND DATEDIFF(NOW(),hiredate)/365>=20;

//DATEDIFF 用于计算前后的天数差

DATEDIFF(date1,date2) 用于计算前后的天数差

比较运算符

  • 例子:查询部门编号在(10,20,30)中且职位不是“SALESMAN”且入职日期小于“1985-01-01”的员工信息
SELECT empno,ename,sal,deptno,hiredate
FROM t_emp
WHERE deptno IN(10,20,30) AND job!="SALESMAN"
AND hiredate<"1985-01-01";

  • 例子:名字含有A
SELECT 
    ename,comm,sal,hiredate
FROM t_emp WHERE comm IS NULL
AND sal BETWEEN 2000 AND 3000
AND ename LIKE "%A%";
  • 例子:不知道名字的第一个字符,但是其他为LAKE,使用下划线_匹配一个字符
//匹配一个字符用下划线_
SELECT 
    ename,comm,sal,hiredate
FROM t_emp WHERE comm IS NULL
AND sal BETWEEN 2000 AND 3000
AND ename LIKE "_LAKE";
  • 例子:使用正则表达式匹配2-4位中文字符
//正则表达式匹配中文字符且长度为2-4位
SELECT 
    ename,comm,sal,hiredate
FROM t_emp WHERE comm IS NOT NULL
AND sal BETWEEN 1000 AND 3000
AND ename REGEXP "^[\\u4e00-\\u9fa5]{2,4}$";

[\\u4e00-\\u9fa5]代表中文字符的Unicode编码范围

逻辑运算符

  • 异或关系:左右两端结果不一致才为真,比如 True XOR False=True

二进制按位运算

  • 二进制位运算的实质是将参与运算的两个操作数,按对应的二进制数逐位进行逻辑运算。


按位运算符

WHERE子句的注意事项

  • WHERE子句中,条件执行的顺序是从左到右的。所以我们应该把索引条件,或者筛选掉记录最多的条件写在最左侧
SELECT empno, ename FROM t_emp WHERE ename = "FORD" AND sal >=2000;
SELECT empno, ename FROM t_emp WHERE deptno = 10 AND sal >= 2000;

各种子句的执行顺序

  • 条件查询中,WHERE子句应该是第几个执行?
    FROM -> WHERE -> SELECT -> ORDER BY -> LIMIT

相关文章

网友评论

    本文标题:MySQL数据操作语言:条件查询

    本文链接:https://www.haomeiwen.com/subject/bdoawltx.html