MySQL查询语句之条件查询和排序查询(二)

条件查询

语法

select 查询列表 from 表名 where 筛选条件;
条件查询的查询顺序为:
第一步:表名,表示查询来自哪张表
第二步:筛选条件,在选定表中按条件来筛选
第三步:查询,查询筛选后的字段web

分类

  • 1、按条件表达式筛选
    条件运算符:
    >,<,=,!=,<>,>=,<=
  • 2、按逻辑表达式筛选
    逻辑运算符:
    &&=and,||=or,!=not
    &&and:若是两个都为TRUE,结果为TRUE
  • 3、模糊查询
    like,between and,in,is null

1、按条件表达式筛选

  • 案例1:查询工资>12000员工信息
select * from employees where salary>12000;
  • 案例2:查询部门编号不等于90号的员工名部门编号
select last_name,department_id from employees where department_id!=90;

2、按逻辑表达式筛选

  • 案例1:查询工资在1000020000之间的员工名、工资、奖金
select last_name,salary,commission_pct 
from employees 
where salary>=10000 and salary<=20000;
  • 案例2:查询部门编号不是在90-100之间,或者工资高于15000员工
select * from employees 
where department_id<90 or department_id>110 or salary>15000;

3、模糊查询

1.like
通常和通配符搭配使用
通配符
%:任意多个字符,包含0个字符
_:任意单个字符sql

  • 案例1:查询员工名包含字符a的信息
select * from employees where last_name like '%a%';
  • 案例2:查询员工第三个字符为n,第五个字符为l的员工名和工资
select last_name,salary from employees where last_name like '__n_l%';
  • 案例3:查询员工名中第二个字符为_的员工名"转移"
select last_name from employees where last_name like '_\_%'; 
# 此时通配符_做为普通字符须要转移,反斜杠\_

select last_name from employees where last_name like '_$_%' escape '$';
# escape是为了说明$符号为转移字符,在不用反斜杠的状况下

2.between and
优点:
  ①使用between and能够提升语句的简洁度
  ②包含临界值
  ③两个临界值不能调换顺序安全

  • 案例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列表中的某一项
特色:
  ①使用inor提升语句简洁度
  ②in列表中的值类型必须一致或兼容。等价于=svg

  • 案例:查询员工工种编号是IT_PROTAD_VPAD_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_PROT','AD_VP','AD_PRES');

4.is null
特色:
=<>不能判断null
is nullis not null能够判断null函数

  • 案例1:查询没有奖金的员工名和奖金率
select last_name,commission_pct from employees
 where commission_pct is null;
  • 案例2:查询有奖金的员工名和奖金率
select last_name,commission_pct from employees 
where commission_pct is not null;

5.安全等于 <=>spa

  • 案例1:查询有奖金的员工名和奖金率
select last_name,commission_pct from employees 
where commission_pct <=> null;
  • 案例2:查询工资为12000的员工信息
select last_name,commission_pct from employees where salary <=> 12000;

is null<=>的比较
is null:
  仅仅能够判断null值,但可读性高,建议使用
<=>:
  既能够判断null值,又能够判断普通的数值,但可读性低code

  • 查询员工号为176的员工的姓名和部门号和年薪
select last_name,department_id,salary*12*(1+ifnull(commission_pct,0)) as 年薪 from employees;

排序查询

语法:

select 查询列表 from 表 [where 筛选条件] order by 排序列表 [asc|desc]xml

特色:

asc表明升序,desc表明降序,默认是升序asc
order by能够放单个字段,多个字段,表达式,函数,别名
order by字句通常放在查询语句最后面,limit字句除外排序

  • 案例1:查询员工信息,要求工资从高到低排序
select * from employees order by salary desc;
select * from employees order by salary asc; # 默认从低到高
  • 案例2:查询部门编号>=90的员工信息,按入职时间前后排序[添加筛选条件]
select * from employees 
where department_id>=90  # 添加筛选条件
order by hiredate asc; # 再日期前后顺序排序
  • 案例3:按年薪的高低显示员工信息和年薪[按表达式排序]
select * ,salary*12*(1+ifnull(commission_pct,0)) 年薪 
from employees 
order by salary*12*(1+ifnull(commission_pct,0)) desc; # 按表达式排序
  • 案例4:按年薪的高低显示员工信息和年薪[按别名排序]
select *,salary*12*(1+ifnull(commission_pct,0)) 年薪 
from employees order by 年薪 desc; # 按别名排序
  • 案例5:按姓名长度显示员工的姓名和工资[按函数排序]
select length('last_name') 字节长度,last_name,salary 
from employees 
order by length('last_name') desc; # 按函数length排序
  • 案例6:查询员工信息,要求先按工资排序,再按员工编号排序[按多个字段排序]
select * from employees 
order by salary asc,employee_id desc; # 多字段排序