28.Mysql条件查询介绍
1.语法:
selece 查询列表 from 表明 where 筛选条件;
2.分类
按条件表达式 | > < = <> >= <= |
---|---|
按逻辑表达式:主要用于连接条件表达式 | && 与 或 非 and or not |
模糊查询 | like /between and/ in /is null |
tips:
- &&和and :两个条件都为true,结果为true,否则为false;【全真才真】
- ||和or:有真则真,全假才假;【有一个真就可以】
- !或not:与连接条件结果取反值;
练习题目:
1.查询部门编号不是在90到110之间,或者工资高于15000的员工信息
select * from employee
where
department_id < 90 or id >110 or salary > 15000;
select * from employee
where
NOT(department_id >= 90 and id <=110) or salary > 15000;//or含义是或者、and含义是并且
31.模糊查询 like关键字
通配符
% | 任意多个字符,包含0个字符 |
---|---|
_ | 任意单个字符 |
例题:
1、查询第三个字符为e,第五个字符为a的员工名和薪资
select name,salary from employees where name like '__e_a%'
2.查询员工表中第二个字符为_的员工名
select name from employees where name like '_$_%' escape '$';//escape转义
注意点:
- 字符需要有’ '单引号 引起!
- 转义字符 \
- MYSQL中可以指定转义字符 ‘$_%’ escape ’ $’ 此为指定 $为转译字符;
32.模糊查询 between and
1.查询部门编号不是在90到110之间的员工信息
select * from employee
where
department_id between 90 and 110;
tips:
- between and 提高语句的简洁性;
- 包含临界值,between相当于>= ang相当于<=
- 两个临界值不能颠倒
33.模糊查询 in关键字
含义:判断某字段的值是否属于in列表中的某一项;等于号的作用,
select * from employee
where
name = ('jiajia','tobey','laoyang');
tips:
- in 括号中 值类型必须统一;
- in 括号中 值不支持通配符!
34.模糊查询 is null关键字
例题1:查询没有奖金的员工名
SELECT `last_name`,`commission_pct` FROM `employees` WHERE `commission_pct` IS NULL;
例题1:查询有奖金的员工名
SELECT `last_name`,`commission_pct` FROM `employees` WHERE `commission_pct` IS NOT NULL;
tips:
- = 或者<= 不能用于判断null值
- is null 或 is not null 可以判断null 值
35.安全等于
MTSQL中:
- 不等于 <>
- 安全等于<=>
安全等于 代表 判断是否等于,如果等于则返回true;
案例1:判断奖金为空的员工名和奖金率;
SELECT `last_name`,`commission_pct` FROM `employees` WHERE `commission_pct` <=> NULL;
案例2:查询工资为12000的员工信息;
SELECT `last_name`,`salary` FROM `employees` WHERE `salary` <=> 12000;
IS NULL 和 安全等于<=>的区别:
- IS NULL 仅仅可以判断NULL 值;可读性高,建议使用;
- 安全等于 既可以判断 NULL值,又可以判断普通数值;
测试题目:
1.查询员工号为176的员工的姓名、部门号和年薪;
SELECT
`last_name`,
`department_id`,
`salary`*12*(1+IFNULL(`commission_pct`,0))
FROM
`employees`
WHERE
`employee_id` = 176;
易错点:
(1)年薪=月薪*(1+年利率)
(2)若有字段值为null,使用ifnull关键字,并设置为 当这个关键字的内容为null时 默认该字段内容的值为0;
(3)筛选后的表的字段 也就是select 后跟的字段名,最后一个没有逗号;
2.显示出表中employee_id 是(100,101,110)的员工姓名和id
SELECT `last_name`,`job_id`,`employee_id` FROM `employees` WHERE `employee_id` IN (100,101,110);
以下为5个练习题:
#1 查询没有奖金,且工资小于18000的字段信息;
SELECT `salary`,`commission_pct`,`last_name` FROM `employees`
WHERE
`salary` < 18000 AND `commission_pct` IS NULL ;
#2 产需表中 job_id 不为IT 或者 工资为1200的员工信息;
SELECT * FROM `employees`
WHERE
`job_id` <> 'IT' OR `salary` = 12000;
#3 查询表结构
DESC `departments`;
#4 查询表中设计了哪些位置编号
SELECT DISTINCT `location_id` FROM `departments`;
#5 以下两个查询语句结果是否一致?并说明原因
SELECT * FROM `employees`;
SELECT * FROM `employees`
WHERE
`commission_pct` LIKE '%%' AND `last_name` LIKE '%%';
#解析:这两个语句结果不同,当字段内容有null值时,LIKE '%%' 语句执行后 展示内容不包含null值。