欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-02 18:39:16
...

条件查询

语法

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

分类

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

一、按条件表达式筛选

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

二、按逻辑表达式筛选

  • 案例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;

三、模糊查询

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

  • 案例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列表中的值类型必须一致或兼容。等价于=

  • 案例:查询员工工种编号是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.安全等于 <=>

  • 案例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值,又可以判断普通的数值,但可读性低

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

排序查询

语法:

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

特点:

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; # 多字段排序