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值。