MySQL条件查询

语法:

SELECT

  查询列表

FROM

  表名

WHERE (过滤) 筛选条件 ;

 

 满足条件返回true , 不满足返回false。

 

分类:

1) 按条件表达式筛选:

条件运算符号  >  <  =  <> <= ...

2) 按逻辑表达式筛选:

&&   ||   !

3) 模糊查询:

  like   between and   in    is null

 

一、按条件表达式筛选

案例1

查询`employees`表中的工资>12000的员工信息

SELECT

  *

FROM

  employees

WHERE salary > 12000 ;

 

案例2

查询表中的工资<3000的员工名和工资

SELECT

  last_name,

  salary

FROM

  employees

WHERE salary < 3000 ;

 

案例3

查询部门编号department_id不等于80的员工名和部门编号

SELECT

  last_name,

  department_id

FROM

  employees

WHERE department_id <> 80 ;

 

二、按逻辑表达式筛选 (&& || ! 与或非)

-- 逻辑运算符的作用:用于连接条件表达式

# && 和 and:两个条件都为true,则返回true;反则false

# || 和 or:两个条件有一个为true,结果为true;反之false

# !  和  not:如果连接的条件本身为false,返回true;反之false

 

案例1:

请用&&查询工资在11000到14000之间的员工名、工资、编号

 

SELECT

  last_name,

  salary,

  employee_id

FROM

  employees

WHERE salary >= 11000 && salary <= 14000 ;

 

案例2

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

SELECT

  *

FROM

  employees

WHERE department_id < 90

  AND department_id > 110

  OR salary > 15000 ;

 

案例3:

查询department_id不是90、100、110、80、50的员工编号及员工名

SELECT

  department_id,

  last_name

FROM

  employees

WHERE department_id != 80 && department_id != 90 && department_id <> 50 && department_id <> 100 && department_id != 110 && department_id <> 30 ;

 

三、模糊查询 -- LIKE  IN BETWEEN..AND.. IS NULL

1) LIKE  

%任意个任意字符

 _1个任意字符

案例1

查询员工名中以字符e开头的员工信息

SELECT

  *

FROM

  employees

WHERE last_name LIKE ‘e%‘ ;

 

案例2

查询员工名中以字符y结尾的名字、员工编号、工资

SELECT

  last_name,

  employee_id,

  salary

FROM

  employees

WHERE last_name LIKE ‘%y‘ ;

 

案例3

查询第2个字符为e,第五个字符为l的员工名和工资

SELECT

  last_name,

  salary

FROM

  employees

WHERE last_name LIKE ‘_e__l%‘

 

案例4

查询员工表中的名字第二个字符为_的员工名

 SELECT

    last_name

  FROM

    employees

  WHERE last_name LIKE ‘__%‘ ;

 

#-----------------------------以上写法错误

 

在以上写法中_不被理解为下划线,

它被认为是一个任意单字符 -- 我们需要给他进行转义,才能让语法认识它

SELECT

  last_name

FROM

  employees

WHERE last_name LIKE ‘_\_%‘ ;

 

-- \:字符串中需要使用\来进行转义,否则会报错提示语法错误

 

LIKE 特点:一般都是配合通配符使用

# 它的筛选条件不是一个很具体,没有等于或者大于小于某个具体的值

# 它是一个很模糊的条件,所以被称为模糊查询

# 因为它不算精确匹配,只能算模糊匹配

 

2)  BETWEEN ..and ..在范围内

 

案例1

查询员工编号在100到120之间的员工信息 (请用&&方法)

-- 方法一:

SELECT

  *

FROM

  employees

WHERE

  employee_id >= 100 && employee_id <= 120 ;

 

-- 方法二:

SELECT

  *

FROM

  employees

WHERE

  employee_id BETWEEN 100 AND 120;

 

3) IN

-- 语法:IN(Str1,Str2...)

检查该数值是否为括号内的参数,如果是,返回true,反之false

-- select 18 in (30,15,22,23)

 

案例1

查询员工的工种编号是‘FI_ACCOUNT‘,‘AD_VP‘,‘AD_PRES‘,‘IT_PROG‘中的一个员工名和工种编号

方法1:逻辑表达式  OR ||

SELECT

  last_name,

  job_id

FROM

  employees

WHERE

  job_id=‘FI_ACCOUNT‘ ||

  job_id=‘AD_VP‘||

  job_id=‘AD_PRES‘||

  job_id=‘IT_PROG‘;

#这样查询当然可以,但是当数据偏多时太过于麻烦

SELECT

  last_name,

  job_id

FROM

  employees

WHERE

  job_id IN(‘FI_ACCOUNT‘,‘AD_VP‘,‘AD_PRES‘,‘IT_PROG‘)

  -- 只要满足IN列表中的其中一项,就可以返回数据

 

请问:in列中可以支持我们写% 或 _ 吗?

SELECT

  last_name,

  job_id

FROM

  employees

WHERE

  job_id IN(‘FI_ACCOUNT‘,‘AD_%‘)

不行,这里用的是IN,IN相当于是=号,而在这里使用_和%它是一个不确定的值,所以它不支持使用

-- 相反,它也可以使用关键字NOT来查看不在条件范围内的记录

案例2

查看部门的编号不在60,80,90,30,50,110,110以内的全部信息

SELECT

  *

FROM

  employees

WHERE

  department_id

NOT IN (30, 50, 60, 80, 90, 100, 110);

 

4) IS NULL 查询空值    ISNULL()

案例1

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

SELECT

  last_name,

  commission_pct

FROM

  employees

WHERE

  commission_pct IS NULL ;

 

SELECT

  last_name,

  commission_pct

FROM

  employees

WHERE

  ISNULL(commission_pct);

案例2

查询有奖金的员工名和奖金率

SELECT

  last_name,

  commission_pct

FROM

  employees

WHERE

  commission_pct IS NOT NULL ;

MySQL条件查询

上一篇:使用pt-online-schema-change pt-osc 更改mysql大表


下一篇:6月21日云栖精选夜读:国内首位!Node.js社区将阿里云工程师张秋怡吸纳为CTC成员