MySQL第二课 查询进阶 条件查询

一 条件查询 

/*
select
查询列表 3
from
表名
where 筛选条件; 2
*/

分类

       一 按条件表达式筛选

        条件运算符:>   <    =   !=   <>    >=   <=

       二 按逻辑表达式筛选

         逻辑运算符: &&   ||   !  and or not(用于连接条件表达式)

          &&和and: 两个条件都为true,结果为true,反之为false

          ||或or:  只要有一个条件为true 结果为true  反之为false

          !或not: 如果连接的条件本身为false,结果为true

        三  模糊查询

            like   

            一般和通配符搭配使用(通配符%表示任意多字符包括0个)

            between and

            可以提高简洁度,包含临界值,两个临界值有顺序

            in

           判断某字段的值是否属于in列表中的某一项,in列表的值类型必须一致或兼容

            is null

            is not null

一 按条件表达式筛选

#案例一  查询工资>12000的员工信息

SELECT 
  * 
FROM
  employees 
WHERE salary > 12000 ;

 

#案例二 查询部门编号不等于90的员工号和部门编号

SELECT 
  `employee_id`,`department_id` 
FROM
  employees 
WHERE `department_id`<>90 ;

 

SELECT 
  `employee_id`,`department_id` 
FROM
  employees 
WHERE `department_id`=90 ;

 

二 按逻辑表达式筛选

#案例一  查询工资在10000到20000之间的员工名,工资 以及奖金

SELECT 
  last_name,
  salary,
  commission_pct 
FROM
  employees 
WHERE salary > 10000 
  AND salary <= 20000 ;

 #案例2 查询部门编号不是在90到110之间 或者工资高于15000的员工信息

SELECT 
  * 
FROM
  employees 
WHERE `department_id` < 90 
  OR `department_id` > 100 
  OR salary > 15000 ;
SELECT 
  * 
FROM
  employees 
WHERE NOT (
    `department_id` >= 90 
    AND `department_id` <= 100
  ) 
  OR salary > 15000 ;

 

三 模糊查询

案例一  查询员工名中包含字符a的员工信息

SELECT 
  * 
FROM
  employees 
WHERE last_name LIKE '%a%' ;

 

案例2  查询员工名中第三个字符为e,第五个字符为a的员工名和工资(_表示任一内容)

SELECT 
  * 
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 '$';# 指定$为转义字符

 

案例1 查询员工编号在100到120 之间的员工信息

SELECT 
*
FROM
  employees 
WHERE `employee_id` between 100 and 120;

 

案例1 查询员工的工种编号是IT_PROG  AD_VP  AD_PRES中的一个员工名和工种编号

SELECT 
last_name,
job_id
FROM
  employees 
WHERE `job_id`='IT_PROG' 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');

 

错误示范(搜不出AD开头的)

SELECT 
last_name,
job_id
FROM
  employees 
WHERE `job_id` IN('IT_PROG',' AD_%' );

 

案例1 查询没有奖金的员工名和奖金率

SELECT 
last_name,
`commission_pct`
FROM
  employees 
WHERE `commission_pct`is null;

 

错误示范

SELECT 
last_name,
`commission_pct`
FROM
  employees 
WHERE `commission_pct`= null;

 

SELECT 
last_name,
`commission_pct`
FROM
  employees 
WHERE salary is 12000;

 

安全等于<=>

案例  查询没有奖金的员工名和奖金率

SELECT 
last_name,
`commission_pct`
FROM
  employees 
WHERE `commission_pct` <=> null;

 

is null  VS   <=>

is null :仅仅可以判断null值,可读性较高

<=>:既可以判断普通的数值,又可以判断null值

例题

1选择姓名中有字母a和e的员工信息 

SELECT 
  * 
FROM
  employees 
WHERE last_name LIKE '%a%' and last_name LIKE '%e%' ;

 

2 判断下面两个语句是否一样

SELECT 
  * 
FROM employees;


SELECT 
  * 
FROM employees
WHERE `commission_pct`LIKE '%%' AND last_name LIKE '%%';

 

(不一样,如果字段 有NULL值)

 

posted @ 2020-09-15 16:27  袁小娜  阅读(161)  评论(0)    收藏  举报