查询
# 进阶2:条件查询/*语法: SELECT 查询列表 FROM 表明 WHERE 筛选条件;分类: 一、按条件表达式筛选表 条件运算符:> < = != <> >= <= 解释:这里的 = 不是赋值,是比较是否相等,<> 和 != 用意一样。 二、按逻辑表达式筛选 逻辑运算符: && || ! and or not 三、模糊查询 like between and in is null | is not null*/# 一、按条件表达式筛选表# 案例# 1 工资>12000的员工信息SELECT * FROM `employees` WHERE `salary` > 12000 ;# 2 查询部门编号不等于90号的员工名和部门编号SELECT `department_id`, `first_name` FROM `employees` WHERE `department_id` <> 100 ;#二、按逻辑表达式筛选# 1 查询工资在10000到20000之间的的员工名,工资以及奖金;SELECT `last_name` AS '名', `salary` AS '工资', IFNULL(`commission_pct`, 0) AS '奖金' FROM `employees` WHERE salary >= 10000 AND salary <= 20000 ;# 2 查询部门编号不是90到110之间,或者工资高于15000的员工信息。SELECT * FROM `employees` WHERE NOT ( `department_id` >= 90 AND `department_id` <= 110 ) OR `salary` > 15000 ;/*WHERE `department_id` < 90 or `department_id` > 110 or `salary` > 15000 ; */#三、 模糊查询/*like特点:①一般和通配符搭配使用 通配符:% 任意多个字符,包含0个字符,_ 任意单个字符,*/#1.like#案例# 1.1:查询员工名中包含字符a的员工信息SELECT *FROM `employees`WHERE `last_name` LIKE '%a%';# 1.2:查询员工名中第二个字符为c,第六个字符为a的员工名和工资。SELECT last_name, salary FROM `employees` WHERE last_name LIKE '_c___n' ;# 1.3:查出员工名中第二个字符为_的员工名,使用转义符号 \ 。SELECT * FROM `employees` WHERE last_name LIKE '_\_%'; # 指定一个转义符号: last_name LIKE '_$_%' ESCAPE '$' # 指定 $ 为转义字符。#2.between and /*①使用between and 可以提高代码的简洁度。②包含临界值。③两分临界值不要调换。*/#案例# 1.1:查询员工编号100到120之间的员工信息SELECT * FROM `employees` WHERE `employee_id` >= 100 AND `employee_id` <= 120 ;# 上下两块代码意义一样 — — — — — — — — — — — —SELECT * FROM `employees` WHERE `employee_id` BETWEEN 100 AND 120;#3.in/*含义:判断某字段的值是否属于in列表中的某一项特点: ①使用in相对某些情况代码相对简洁。 ②in列表的值类型必须统一。 ③不支持使用模糊查询格式的值。*/#案例#1.1 查询员工的工种编号是 IT_PROG 、AD_VD 、AD_PRES 中的一个员工名和工种编号。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 IN ('IT_PROG', 'AD_VP', 'AD_PRES')#4. is null#案例#1.1:查询没有奖金的员工名和奖金率, mysql语句 xxx = null 是不能判断 xxx 是否等于null的。SELECT last_name, IFNULL(commission_pct, '是的是null') FROM `employees` WHERE commission_pct IS NULL ;#1.2:查询有奖金的员工名和奖金率。SELECT last_name, commission_pct FROM `employees` WHERE commission_pct IS NOT NULL ;# 安全等于:<=>#案例#1.1:查询没有奖金的员工名和奖金率,安全等于可以直接用来判断目标等不等于null。SELECT last_name, commission_pct FROM `employees` WHERE (`commission_pct` <=> NULL) ;#1.2: 查询员工工资为12000的员工信息。SELECT last_name, salary FROM `employees` WHERE salary <=> 12000 ;# is null pk <=>IS NULL :仅仅可以判断NULL值,可读性相对好点。<=> :既可以判断NULL值,又可以判断普通的数值,但是可读性相对低。# 条件查询2# 查询员工号为176的员工的姓名和部门号和年薪SELECT last_name, department_id, salary * 12 * (1+ IFNULL(commission_pct, 0)) AS 年薪 FROM `employees` ;
小作业
# 作业
# 1. 查询没有奖金,且工资小于18000的salary,last_name
SELECT * FROM `employees` WHERE `salary`<18000 AND `commission_pct` IS NULL;
# 2. 查询部门,job_id不为 ‘IT’ 或者工资为12000的员工信息
SELECT * FROM `employees` WHERE job_id != 'IT' OR salary = 12000;
# 3. 查看部门`departments`表的结构
DESC `departments`;
# 4. 查询部门`departments`表中涉及到了那些位置编号
SELECT location_id FROM `departments`;
# 5.
#试问:
/*
SELECT
*
FROM
`employees` ;
和
SELECT
*
FROM
`employees`
WHERE `commission_pct` LIKE '%%' AND last_name like '%%';
结果是否一样?并说明原因。
*/
SELECT
*
FROM
`employees`
WHERE `commission_pct` LIKE '%%'
AND last_name LIKE '%%' ;
# 答案:不一样,因为判断的值有的可能为null,如果全部没有为null的那么就是一样的。