MySQL学习笔记(二)—条件查询,模糊查询,排序查询

MySQL学习笔记(二)—条件查询,模糊查询,排序查询

做者:就叫易易好了
日期:2020/10/24 程序员节

注:如下案例均基于myemployees数据库,获取方式能够看我MySQL学习笔记(一)程序员

1、条件查询

语法:web

​ select数据库

​ 查询列表svg

​ from函数

​ 表名学习

​ where.net

​ 筛选条件;code

执行顺序:xml

先执行的是表名,由于要先看数据库里面是否有这个表,再根据条件来筛选,再查询该列表,也就是说书写顺序与查询顺序不同。blog

分类:

  • 按条件表达式筛选

    条件运算符:

    < > = ! = <> >= <=

  • 按逻辑表达式筛选

    逻辑运算符:

    && || !

    and or not

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

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

    !或not:若是;链接的条件自己为fasle,结果为true,反之为false

一、按条件表达式筛选

#案例1:查询工资>12000的员工
SELECT 
     *  
FROM 
     employees 
WHERE 
     salary>12000;
(此语句用到的条件运算符为">")
#案例2:查询部门编号不等于90号的员工名和部门编号
SELECT 
      last_name,
      department_id 
FROM
      employees
WHERE
      department_id!=90;
 (此指令用到的条件运算符为"!=",在MySQL中,不等号最好用"<>"代替)

二、按逻辑表达式筛选

#案例1:查询工资在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>=110 
OR 
     salary>15000
也能够将WHERE语句写成
WHERE
    NOT(department_id>=90 AND department_id<=110)

2、模糊查询

须要用到的语句:
like
between  and
in
is null|is not null

like

特色:通常与通配符搭配使用

通配符:

“%”表示任意多个字符,包含0个字符(以该字符开头的关键词)

“_”表示任意单个字符

#案例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
'_/_%';
(此时/为转义字符,将第二个下划线从通配符转移成普通字符)
这里也能够自定义转移符,用ESCAPE函数
LIKE
'_#_%' ESCAPE '#';

between and

使用between and能够提升语句简洁度

包含and先后的临界值

两个临界值的顺序不能颠倒

#案例:查询员工编号在100到120之间的员工信息
SELECT
      *
FROM 
      employees
WHERE
      employee_id BETWEEN 100 AND 120

in

用于判断某字段的值是否属于in列表中的某一项

使用in比使用or更提升了语句简洁性

in列表的类型必须统一或兼容

#案例:查询员工的工种编号是IT_PROG、AD_VP、AD_PRES
      中的一个员工名和工种编号
SELECT 
      last_name,
      job_id
FROM 
      employees
WHERE
      job_id IN('IT_PROG','AD_VP','AD_PRES');

注意:in语句不支持通配符,好比上面的那个语句,若是为了省事将’AD_VP’,‘AD_PRES’写成’AD_%’,该语句是识别不了的。

is null|is 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;

3、排序查询

SELECT * FROM employees

该语句查询出来的结果顺序与数据库里面的如出一辙,但在实际应用中,多数要对查询的数据进行排序,因此此时咱们要引入一个排序的条件。

SELECT * FROM employees

order by 排序列表 asc/desc

asc为升序,desc为降序,若是不写,默认是升序

order by子句中能够支持单个字段,多个字段,表达式,函数,别名

order by语句通常放在查询语句的最后边

#案例1:查询员工信息,要求工资从高到低排序
SELECT 
     *
FROM
     employees
ORDER  BY
salary DESC;
#案例2:查询部门编号>=90的员工信息,按入职时间的前后排序
SELECT
     *
FROM 
     employees
WHERE
     department_id>=90
ORDER  BY
     hiredate ASC;
#案例3:按年薪的高低显示员工的信息和年薪
法一:
SELECT 
     *,
     salary*12*(1+IFNULL(commission_pct,0))  AS 年薪
FROM 
     employees
ORDER  BY
     salary*12*(1+IFNULL(commission_pct,0))  DESC;
(此案例用到的方法是按表达式排序)
#案例4:按年薪的高低显示员工的信息和年薪
法二:
SELECT 
     *,
     salary*12*(1+IFNULL(commission_pct,0))  AS 年薪
FROM 
     employees
ORDER  BY
     年薪  DESC;
(此案例用到的方法是按别名排序)
#案例5:根据员工姓名的长度来显示员工姓名和工资
SELECT 
      LENGTH(last_name) as 字节长度,
      last_name,
      salary
FROM 
      employees
ORDER BY
       LENGTH(last_name)  DESC;
(按函数排序)
#案例6:查询员工信息,要求先按工资排序,再按员工编号排序
SELECT
     *
FROM 
     employees
ORDER  BY
     salary ASC,employee_id DESC;
(按多个字段排序)