过滤:使用WHERE 子句,将不满足条件的行过滤掉。
比较运算符 | >、< 、>=、<=、= 、<> != | 大于、小于、大于等于、小于等于、等于、不等于、不等于 |
---|---|---|
- | BETWEEN …AND… | 显示在某一区间的值(含头含尾) [ ] |
- | IN(set) | 显示在in列表中的值,例:in(100,200) |
- | LIKE 通配符 | 模糊查询,Like语句中有两个通配符:% 用来匹配多个字符;例first_name like ‘a%’;_ 用来匹配一个字符。例first_name like ‘a_’; |
- | IS NULL | 判断是否为空is null; 判断为空;is not null; 判断不为空 |
逻辑运算符 | and (&&) | 多个条件同时成立 |
- | or ( || ) | 多个条件任一成立 |
- | not (!) | 不成立,例:where not(salary>100); |
案例
按条件表达式筛选
1.查询工资>12000的员工信息
SELECT
*
FROM
employees
WHERE
salary>12000;
2.查询部门编号不等于90号的员工名和部门编号
SELECT
*
FROM
`employees`
WHERE
!(`manager_id`>=90 AND `manager_id`<=110)
OR
`salary`>=15000
按逻辑表达式筛选
1.查询工资在10000到20000之间的员工名、工资以及奖金
SELECT
CONCAT (`last_name`," ",`first_name`) AS 姓名,
`salary` 工资,
IFNULL(`commission_pct`,0) AS 奖金率
FROM
`employees`
WHERE
`salary`>=10000
AND
`salary`<=20000
模糊查询
- 一般和通配符搭配使用:
通配符:
%任意多字符,包含0个字符
_任意单个字符,
1.查询员工名中包含字符a的员工信息
SELECT
*
FROM
`employees`
WHERE
`first_name`
LIKE
'%a'
2.查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__e_a%';
特殊案例:
查询员工名中第二个字符为_的员工名
ESCAPE:定义转义标识
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$';
或者直接使用:
last_name LIKE '_\_%' ;
between and的用法:
SELECT
CONCAT (`last_name`," ",`first_name`) AS 姓名,
`salary` 工资,
IFNULL(`commission_pct`,0) AS 奖金率
FROM
`employees`
WHERE
`salary`>=10000
AND
`salary`<=20000
可以改为
SELECT
CONCAT (`last_name`," ",`first_name`) AS 姓名,
`salary` 工资,
IFNULL(`commission_pct`,0) AS 奖金率
FROM
`employees`
WHERE
`salary` BETWEEN 10000 AND 12000
IN
含义:判断某字段的值是否属于in列表中的某一项 特点:
1.使用in提高语句简洁度
2.列表的值类型必须一致或兼容
3.列表中不支持通配符
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';
修改为
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';
体现了上述第二点
但是与Java中不同的是“=”可以作为判断符使用,而不是“==”
IS NULL
.=或<>不能用于判断null值 is null或is not null 可以判断null值
1.查询没有奖金的员工名和奖金率
SELECT
`first_name`,
`commission_pct`
FROM
`employees`
WHERE
`commission_pct`
IS NULL
安全等于<=>
1.判断是否等于
SELECT
last_name,
salary
FROM
employees
WHERE
salary <=> 12000;
判断是否为null亦可以使用下面的方法
SELECT
`first_name`,
`commission_pct`
FROM
`employees`
WHERE
`commission_pct`
<=> NULL
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用 <=> :既可以判断NULL值,又可以判断普通的数值,可读性较低