#条件查询 /* 语法: select 查询列表 from 表名 where 筛选条件; 分类: 一。按条件表达式筛选 条件运算符:> < = != <> >= <= 二。按逻辑表达式筛选 逻辑运算符:用于连接条件表达式 逻辑运算符: && || ! and or not 三。模糊查询 like between and in is null */ #一 条件表达式 #1.查询工资>12000的员工信息 SELECT * FROM employees WHERE salary>12000; #2. 查询部门编号不等于90号的员工名和部门编号 SELECT `first_name`,`department_id` FROM `employees` WHERE `department_id`<>90# != 和 <> 一样 #二 逻辑表达式 #1 工资在10000~20000的员工名、工资和奖金 SELECT `first_name`,`salary`,`commission_pct` FROM `employees` WHERE `salary`>10000 AND `salary`<20000 #2 查询部门编号不是在90~110,或者工资高于15000的员工信息 SELECT * FROM `employees` WHERE !(`department_id`>=90 AND `department_id`<=110) || `salary`>15000 #三 模糊查询 /* like: 特点:(1) 一般和通配符搭配使用 通配符 % 任意多个字符 _ 任意单个字符 between and in is null|is not null */ #1 like #1.查询员工名单中包含字符a的员工信息 SELECT * FROM `employees` WHERE last_name LIKE '%a%'; #2 查询员工名中第三个字符为e,第五个字符为a的员工名和工资 SELECT last_name, salary FROM `employees` WHERE last_name LIKE '__e_a%' ; #3 查询员工名中第二个字符为_的员工名 SELECT last_name FROM `employees` WHERE last_name LIKE '_\_%'#第二个字符前必须加'' SELECT last_name FROM `employees` WHERE last_name LIKE '_*_%' ESCAPE '*'#escape指定的字符后面紧挨着的第一个字符被看作是普通字符而非通配符。功能同上,这里的‘*’也可以是其它的字符 #2 between and /* (1)提高语句简洁度 (2)包含临界值 (3)2个临界值不要调换 */ #案例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 列表的值类型必须一致或兼容 列表内容不可用通配符 */ #查询员工的工种编号属于IT_PROG AD_VP AD_PRES 员工名和工种编号 SELECT last_name,`job_id` FROM `employees` WHERE `job_id` IN ('IT_PROG', 'AD_VP', 'AD_PRES'); #4 is null /* =或<>不能用于判断null值 is null或者 is not null 可以判断null值 */ #查询没有奖金的员工名和奖金率 SELECT `last_name`,`commission_pct` FROM `employees` WHERE `commission_pct` IS NULL #必须用is,不能用= SELECT `last_name`,`commission_pct` FROM `employees` WHERE `commission_pct` IS NOT NULL #安全等于 <=> #1查询没有奖金的员工名和奖金率 SELECT `last_name`,`commission_pct` FROM `employees` WHERE `commission_pct` <=> NULL #null #2 查询工资为12000的员工信息 SELECT * FROM employees WHERE salary<=>12000;#常量值 /* 总结 is null :仅仅可以判断NULL,可读性高,建议使用 <=> : 既可以判断null值,又可以判断普通的数值,可读性低 */ #查询员工号为176的员工姓名和部门号和年薪 SELECT `last_name`,`department_id`,`salary`*12*(1+IFNULL(`commission_pct`,0)) 年薪 #这里要考虑(1+IFNULL(`commission_pct`,0)) FROM `employees` WHERE `employee_id` <=> 176 #测试题 #1查询没有奖金,且工资小于18000的salary,last_name SELECT salary,last_name FROM `employees` WHERE `commission_pct` IS NULL AND `salary`<18000; #2 查询job_id 不为`job_id`‘IT’ 或者工资为12000的员工信息 SELECT * FROM `employees` WHERE `job_id` <>'IT' OR salary=12000; #3 查询`departments` 表的结构 DESC `departments`; #4 查询`departments`表涉及哪些位置编号 SELECT DISTINCT `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 '%%' OR last_name LIKE '%%'; #当where 语句为假时,该条数据不被选择。and:如`commission_pct` :null 此时为假,那么这条数据无法被选择。 #但是or 两者都为假where语句才为假,同时`last_name`不可能为null。因此where语句不会为假,也就是所有数据都会被选择 #因此 用or 时的功能和SELECT * FROM `employees`;一样。