五、DQL语言
文章目录
5.6.条件查询
-
分类
-
按条件表达式
-
条件运算符
-
java中的不等于
!=
也支持 -
< > <>(又大又小就是不等于),在MySQL中推荐使用 <= >=
-
-
按逻辑表达式
- 逻辑运算符
- && || !
- and or not
推荐使用
-
模糊查询
- like 像
- between and
- in
- is null
-
5.6.1.按条件表达式
-
条件表达式
-
找出
employees
中工资大于12000的员工信息SELECT * FROM employees WHERE salary >12000;
-
部门编号不等于90的员工
-
SELECT last_name, department_id FROM employees WHERE department_id <> 90
-
5.6.2.按逻辑表达式
-
找出工资在10000-20000的员工信息
-
SELECT * FROM employees WHERE salary >=10000 AND salary <=20000;
-
-
部门编号不在90—100之间,或者工资大于15000的员工信息
-
SELECT * FROM employees WHERE department_id<90 OR department_id>100 OR salary;
-
5.6.3.按模糊查询
5.6.3.1.关键字like的使用
-
查找出名中含有字母
a
的员工信息- 显然使用条件表达式或者逻辑表达式无法操作,二者是精确查询,精确到具体
- 使用模糊查询
- 通配符
百分号
- 代表多个任意字符
- 包括0个字符
- %a%
- 字母
a
的前后还有任意字符
- 字母
- 通配符下滑线
- 单个字符的通配符
-
select * from employees where last_name like '%a%'; #在MySQL中,字符必须使用单引号括起来 #MySQL不区分大小写,所以结果中,last_name #有大写字母A的也筛选出来了 #注意`a`使用通配符,因为人名不可以就一个字母
-
问题:
找出名第三个字符是a
员工和及工资
select last_name,salary
from employees
where last_name like '__a%';
注意:
-
找出第二个字符是下划线的名,怎么找?
-
使用转义字符
-
与java转义字符一致用
反斜杠
-
‘\_’
-
自己定义转义字符
(推荐使用)
+关键字escape
-
where last_name like '_$_%' escape '$' #使用escape将美元符号定义为转义字符
-
-
-
5.6.3.2.关键字 between and
问题:
员工编号在50—100之间的员工信息?
SELECT *
FROM employees
WHERE employee_id BETWEEN 50 AND 100;
注意:
- 员工ID可以=100,也就说
between and
是包含边界的
5.6.3.3.关键字 in
注意:在输入命令时,若报错,请仔细检查,肯定有那个字符细节上处理不到位
想输入着重号,很难输入,反正就是不顺利,很可能此时是把(单引号)当做着重号了
-
in不支持通配符,为什么?
SELECT last_name,job_id
FROM employees
WHERE job_id IN ('AD_VD','PRES_VD','AD_VP');
思考:
为什么in里面的参数要用好、单引号?
5.6.3.4.关键字is null
- 注意:
is
和null
是搭配使用的,is not null
也是,不要拿去和别的对象使用- 不要出现
is 12000
来找出工资12000的员工,这是错误使用 - 要找工资12000的员工,直接用等于号,条件表达式就可以了
问题:
给我把公司里没有奖金的员工找出来
select last_name,commission_pct
from employees
where commission_pct is null
思考:
逆向思维,给我找出有奖金的员工,怎么做?
- 逆向,在编程里,逆向,好办呀,非
select last_name,commission_pct
from employees
where commission_pct is not null;
5.6.3.4.1安全等于<=>
对比:
符号 | 用法 | 范围 |
---|---|---|
is null | 判断有 | 固定使用 |
is not null | 判断没有 | 固定使用 |
<=> | 可以代替is null | 除了用于null,还可以用于普通的等于,机动灵活,比如工资12000 |
注意 | 否定时,not的位置 |
SELECT last_name,commission_pct
FROM employees
WHERE NOT commission_pct <=> NULL;
练习:
查出工号176的员工年薪和所属部门编号
SELECT last_name,department_id,employee_id,
salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM employees
WHERE employee_id=176;